CL-Blog

Computerlinguistik & Politik

Du durchsuchst gerade das Archiv der Kategorie ‘Programmieren für Linguisten’.

Kategorie: Programmieren für Linguisten

2017 3 Aug

PidCL Übung 12

Abgelegt unter: Programmieren für Linguisten | RSS 2.0 | TB | Kommentare geschlossen

Hier ist das zwölfte und letzte Übungsblatt. Sobald dieses abgegeben und korrigiert ist, werde ich euch hier benachrichtigen, sobald die Ergebnisse aller Übungen da sind.

Viel Erfolg!

2017 27 Jul

PidCL Übung 11

Abgelegt unter: Programmieren für Linguisten | RSS 2.0 | TB | Kommentare geschlossen

Hier kommt die elfte Übung. Nächste Woche kommt dann die zwölfte und letzte Übung. Deshalb biete ich nächste Woche Montag um 10 im üblichen Raum noch einmal ein Tutorium an. Außerdem könnt ihr ab heute Abend / morgen im Schaukasten die Ergebnisse bis einschließlich Übungsblatt 7 einsehen und ich verlängere hiermit die Abgabefrist für Übungsblatt 11 um einen Tag, aufgrund des späten Erscheinens.

Bis dahin Viel Erfolg,

Marco

2017 21 Jul

PidCL, 20.7.

Abgelegt unter: Programmieren für Linguisten | RSS 2.0 | TB | Kommentare geschlossen

Themen:

  • Dateien öffnen (open), lesen (readline(), readlines(), for … in … ) und schreiben (write()), schließen (close)
  • Korpusverarbeitung: Extraktion der Wortformen je Lemma aus dm DeReKo-Korpus:
    korpus = open('DeReKo-2014-II-MainArchive-STT.100000.freq','r')
    
    # Dictionary anlegen
    wortformen_pro_lemma = dict()
    
    # Alle Zeilen im Korpus durchgehen
    for zeile in korpus :
    	# Zeile entlang der Tabulatoren auftrennen
    	spalten = zeile.split()
    	# Wenn alles korrekt ist, erhalten wir 4 Teile:
    	# 0=Wortform, 1=Lemma, 2=POS, 3=Frequenz
    	# Zunächst aber testen, ob wir auch 4 Spalten haben
    	if len(spalten) == 4 :
    		lemma = spalten[1]
    		wortform = spalten[0]
    		if lemma in wortformen_pro_lemma :
    			# Das Lemma kam bereits vor 
    			# => aktuelle Wortform zur Liste für dieses Lemma hinzufügen
    			wortformen_pro_lemma[lemma].append(wortform)
    		else :
    			# Lemma wurde noch nicht gesehen 
    			# Für das neue Lemma eine Liste mit der ersten Wortform anlegen
    			wortformen_pro_lemma[lemma] = [ wortform ]
    
    korpus.close()
    print(wortformen_pro_lemma)

2017 19 Jul

PidCL Übung 10

Abgelegt unter: Programmieren für Linguisten | RSS 2.0 | TB | Kommentare geschlossen

Hier kommt die zehnte Übung.

Viel Spaß und bis kommenden Montag,

Marco

2017 12 Jul

PidCL Übung 9

Abgelegt unter: Allgemein,Programmieren für Linguisten | RSS 2.0 | TB | Kommentare geschlossen

Hier kommt die neunte Übung.

Viel Erfolg und bis Montag!

2017 2 Jul

PidCL Übung 8

Abgelegt unter: Programmieren für Linguisten | RSS 2.0 | TB | Kommentare geschlossen

Hier ist das achte Übungsblatt.

Viel Spaß bei der Bearbeitung und zögert nicht bei Fragen dem morgigen Tutorium beizuwohnen.

2017 20 Jun

PidCL Übung 7

Abgelegt unter: Programmieren für Linguisten | RSS 2.0 | TB | Kommentare geschlossen

Hallo liebe (Computer)Linguisten,

Hier die siebte Übung. Diesmal als Python-Skript: uebung7.py - und auch in dieser Form abzugeben.

Wie üblich, bis Ende der Woche.

Viel Erfolg,

Marco

2017 17 Jun

PidCL, 17.6.

Abgelegt unter: Programmieren für Linguisten | RSS 2.0 | TB | Kommentare geschlossen

Python

Themen

  • Typen und Operationen auf Konstanten oder Variablen dieser Typen
    • + – * / ** auf int und float
    • +, *, len(), split() auf Strings
    • Hinweis: len() ist unter Python 2.x byte-orientiert und unter Python 3.x unicode-orientiert
  • Typkonvertierungen: jeder Typname ist auch eine Funktion gleichen Namens, mit dieser kann man (mit Einschränkungen) zwischen Typen konvertieren.
    Beispiele:

    int('0012345')
    str(12345)
    str(False)
    bool('')
  • Neuer Typ: list:
    • kann Konstanten oder Variablen aller anderen Typen in einer geordneten Folge  speichern
    • Syntax von Listen: [ E_0, E_1, ... ,E_k-1 ]
    • Die obige Liste hat die Länge k, die Zählung beginnt bei 0; das letzte Element hat die Position k-1
    • Listenindizierung: ist l eine Liste, dann ist l[i] das i-te Element von l, ab 0 gezählt
    • len() auf Listen
    • Slicing auf Listen: mit l[a:b] (mit a und b als Zahlen) konstruiert eine Teilliste von l mit den Elementen ab Position a bis ausschließlich Position b; a und/oder b können auch weggelassen werden, dann wird für a 0 und für b len(l) benutzt
  • Slicing geht auch auf Strings

 

2017 9 Jun

PidCL, 8.6.

Abgelegt unter: Programmieren für Linguisten | RSS 2.0 | TB | Kommentare geschlossen

Themen:

  • Scratch:
    • Variablen, Zuweisung, Veränderung, arithmetische Operationen
    • Schleifen und Berechnungen
    • Verschachtelte Schleifen: Beispiel: Addition aller Zahlen im Einmaleins-Quadrat:
      embedded-for-loops
    • Die innere Schleife läuft 10x für jeden Durchgang der äußeren Schleife; insgesamt werden also 100 Additionen auf die Variable Summe ausgeführt.
  • Python
    • Die Python-Shell
    • Rechnen
    • Datentypen (bis jetzt): int, float, str, bool

2017 6 Jun

PidCL Übung 5

Abgelegt unter: Programmieren für Linguisten | RSS 2.0 | TB | Kommentare geschlossen

Hallo,

Hier ist das fünfte Übungsblatt. Im fünften Übungsblatt werdet ihr ein Scratch-Programm erstellen, das selbst zufällige Melodien erzeugt. Damit ihr einen Anhaltspunkt habt, wie es am Ende klingen soll - Hier eine Hörprobe des fertigen Programms zum Grundton 36.

Viel Erfolg!

2017 2 Jun

PidCL, 1.6.

Abgelegt unter: Programmieren für Linguisten | RSS 2.0 | TB | Kommentare geschlossen

Thema:

Zu den besprochenen Themen passt auch dieser etwas reißerische Artikel der FAZ.

2017 31 Mai

PidCL morgen

Abgelegt unter: Programmieren für Linguisten | RSS 2.0 | TB | Kommentare geschlossen

Bitte installieren Sie sich für morgen die Programmiersprache Scratch auf ihrem Rechner (vorzugsweise unter Windows oder MacOS).

 

2017 29 Mai

PidCL Übung 4

Abgelegt unter: Programmieren für Linguisten | RSS 2.0 | TB | Kommentare geschlossen

Hier kommt die vierte Übung. Ende der nächsten Woche wird es in Haus 14, im 2. OG einen Aushang mit den Ergebnissen der ersten vier Übungen geben.

2017 22 Mai

PidCL, 18.5.

Abgelegt unter: Programmieren für Linguisten | RSS 2.0 | TB | Kommentare geschlossen

Themen:

  • Kombination von Linux-Werkzeugen am Beispiel der Erstellung einer Frequenzliste aus einem Text
  • Umleitung der Ausgabe
  • Pipes zur Kombination von Befehlen
  • Shell-Skripte und Platzhalter für Befehlszeilenargumente
  • Linux-Rechtesystem
  • Neue Befehle: uniq, head, tail, chmod

2017 20 Mai

PidCL Übung 3

Abgelegt unter: Programmieren für Linguisten | RSS 2.0 | TB | Kommentare geschlossen

Hier ist das 3. Übungsblatt. Bitte achtet darauf eure Hausaufgaben als PDF abzugeben und nicht als Word-Dateien oder in Form anderer für mich unlesbarer Binärdateien.

Bis Montag im Tutorium.

2017 15 Mai

PidCL, 11.5.

Abgelegt unter: Programmieren für Linguisten | RSS 2.0 | TB | Kommentare geschlossen

Themen:

  • Reguläre Ausdrücke: eignen sich zur Charakterisierung von “Treffern” bei einer Textsuche.
  • Neuer Befehl: grep zur Suche mit regulären Ausdrücken in Textdateien
  • agrep zur approximativen Suche
  • Neuer Befehl: sed (stream editor) zur automatischen Ersetzung von Suchmustern durch andere Strings

Materialien:

 

2017 14 Mai

PidCL Übung 2

Abgelegt unter: Programmieren für Linguisten | RSS 2.0 | TB | Kommentare geschlossen

Hallo liebe angehende Programmierer,

Anbei findet ihr das zweite Übungsblatt. Dafür werdet ihr dieses Korpus brauchen.

Viel Erfolg und bis morgen im Tutorium!

2017 6 Mai

PidCl, Folien des ersten Termins

Abgelegt unter: Programmieren für Linguisten | RSS 2.0 | TB | Kommentare geschlossen

Hier finden Sie meine einleitenden Folien. Bitte nehmen Sie noch einmal die Bedingungen für den Punkteerwerb zur Kenntnis.

2017 4 Mai

PidCl, 4.5.

Abgelegt unter: Programmieren für Linguisten | RSS 2.0 | TB | Kommentare geschlossen

Themen:

  • Textkodierungen: Text ist nicht gleich Text, die Zeichen sind jeweils binär kodiert. Zur Entschlüssung braucht man einen Code, genannt Zeichenkodierung (engl. encoding)
  • Zeichenkodierungen gibt es viele: UTF-8, ISO-8859-{1…15}, usw.
  • ISO-8859 dient vor allem zur Kodierung von europäischen Sprachen, jedoch auch von Türkisch, Hebräisch und Arabisch.
  • Unicode ist der universelle Zeichensatz für alle Zeichen der Welt; die Standardkodierung davon ist UTF-8 (knapp 90% der Webseiten der Welt sind UTF-8-kodiert)
  • Texteditoren, die Shell und andere Programme können in der Regel verschiedene Textkodierung verarbeiten. Die jeweils aktive Kodierung kann man einstellen.
  • Das Programm iconv kann zwischen verschiedenen Textkodierungen hin- und herkonvertieren.
  • Neuer Befehl: file
  • Neuer Texteditor: geany
  • Kompression von Daten mit gzip/gunzip.

Materialien:

 

 

2017 3 Mai

PidCL Übung 1

Abgelegt unter: Programmieren für Linguisten | RSS 2.0 | TB | Kommentare geschlossen

Hallo liebe Alle,

Anbei findet ihr die erste Übung. Wenn ihr Fragen habt schreibt mir eine Email oder kommt in mein Tutorium am Montag von 10-12 Uhr. Das Tutorium findet ab sofort immer im Raum 1.06 in Haus 5 statt.

Bis dahin viel Erfolg,

Marco

 

Übung1

2017 2 Mai

PidCl, 27.4.

Abgelegt unter: Programmieren für Linguisten | RSS 2.0 | TB | Kommentare geschlossen

Themen:

  • Computersicherheit
  • Die Linux-Shell
  • Genereller Aufbau von shell-Befehlen: BEFEHL [OPTIONEN] [DATEINAMEN]
  • Linux-Dateisystem; Befehle: pwd, cd, ls
  • Texteditor: Beispiel: gedit
  • Linux-TextUtils: more, sort
  • Hilfesystem: man

 

 

2017 21 Apr

Tutorium – PidCL

Abgelegt unter: Programmieren für Linguisten | RSS 2.0 | TB | Kommentare geschlossen

Hallo liebe (Computer)linguist(en|innen),

Wie am Donnerstag in der Vorlesung besprochen findet das Tutorium am Montag von 10.15 – 11.45 Uhr statt. Unser Treffpunkt für diese Woche ist Raum 0.38 im Erdgeschoss von Haus 14. Thema des Tutoriums wird die Installation von Linux in einer virtuellen Maschine sein.

Bis Montag und ein schönes Wochenende,

Marco

2017 21 Jan

Python: names and values

Abgelegt unter: Computerlinguistische Techniken,Programmieren für Linguisten | RSS 2.0 | TB | Kommentare geschlossen

Ein interessanter Vortrag von der PyCon 2015:

2015 27 Jul

PidCL – Bonusübungsblatt

Abgelegt unter: Programmieren für Linguisten | RSS 2.0 | TB | Kommentare geschlossen

Hi,

 

Hier kommt das Bonus-Übungsblatt! Ihr habt diesmal 2 Wochen Zeit dafür.

Bitte bearbeitet das Übungsblatt nur, wenn ihr noch nicht bestanden habt und es sich für euch lohnt, es zu bearbeiten. Bei diesem Übungsblatt gibt es maximal 100% zu erreichen – und eure schlechteste Abgabe wird dann durch die hier erreichten Punkte ersetzt. Rechnet also bitte selbst einmal nach, ob ihr durch die Bearbeitung den Kurs noch bestehen könnt. Bei irgendwelchen Fragen schreibt mir oder Marco einfach eine Mail.

 

Noch viel Erfolg bei euren Klausuren und danach schöne Semesterferien!

Aline

 

2015 23 Jul

PidCl, 23.7.

Abgelegt unter: Programmieren für Linguisten | RSS 2.0 | TB | Kommentare geschlossen

Themen:

Programmcode:

2015 22 Jul

PidCL – Ergebnisse

Abgelegt unter: Programmieren für Linguisten | RSS 2.0 | TB | Kommentare geschlossen

Liebe alle,

 

Morgen hängen wir am schwarzen Brett die erweiterte Notenliste inklusive Übungen 10, 11 und 12 aus. Am Ende der Liste wird auch eure insgesamt erreichte Punktzahl stehen – wenn ihr dort 70% oder mehr habt, dann habt ihr den Kurs bestanden.

 

Für diejenigen, die diese 70% noch nicht erreicht haben: Am WE werden wir das Bonusübungsblatt hochladen, mit dem ihr, wie schon mehrmals erwähnt, eure schlechteste Abgabe ausgleichen könnt. Ob sich das rechnerisch für euch noch lohnt, könnt ihr ja selbst mal nachrechnen, bevor ihr euch entscheidet, das Übungsblatt noch zu bearbeiten.

 

Bis morgen!

Aline

 

 

2015 17 Jul

PidCL, 16.7.

Abgelegt unter: Programmieren für Linguisten | RSS 2.0 | TB | Kommentare geschlossen

Themen:

Arne N. hatte auch schon einmal eine Python-Einführung gemacht. Arne freut sich über jede Anregung und Kritik: python-einfuehrung ÄT arne PUNKT cl

  • ipython
  • Erstellung von Klassen in Python. Beispiel: Regelklasse:
    # Klasse zur Repräsentation einer Grammatikregel wie NP --> ART NN
    class Regel :
        # Konstruktor
        def __init__(self,ls,rs) :
           # Interne Repräsentation als Tupel konstruieren
           self._regel_paar = (ls,rs)
    
        # Akzessor auf die linke Regelseite
        def linke_seite(self) :
          return self._regel_paar[0]
    
        # Akzessor auf die linke Regelseite
        def rechte_seite(self) :
          return self._regel_paar[1]
    
        # Gibt die Länge der rechten Regelseite zurück
        def laenge(self) :
        	return len(self.rechte_seite())
    
        # Verzweigt die Regel binaer
        def ist_binaer(self) :
        	return self.laenge() == 2
    
    # Test
    print(r.laenge())
    print("%s --> %s" % (r.linke_seite(),r.rechte_seite())
  • Klassen haben immer einen Konstruktor: dieser initialisiert die Daten der Instanz entweder mit Standardwerten oder Werten, die über Argumente von außen übergeben werden. An dieser Stelle “entstehen” erst die Datenelemente, d.h. ihre Namen (_regel_paar im Beispiel) und ihre Typen.
  • Klassenfunktionen haben stets einen versteckten Parameter namens self. Dieser bezeichnet in deiktischer Weise die aktuelle Instanz selbst und ermöglicht so den Zugriff auf andere Attribute (Daten und Funktionen) der Instanz
  • Attribute, die mit _ beginnen werden als privat angesehen. Sie dürfen innerhalb der Klasse verwendet werden, aber sollen nicht von außen verwendet werden
  • Objektkomposition: Klassen können Datenelemente enthalten, die vom Typ anderer Klassen sind. Beispiel: Grammatikklasse:
    # Grammatikklasse: diese enthält Regeln (Instanzen der Regelklasse)
    class Grammatik :
    	# Konstruktor: Erzeugt eine leere Grammatik 
    	def __init__(self,s) :
    		# Das Satzsymbol ist s
    		self._satz_symbol = s
    		# Wir verwenden zur Repräsentation ein dictionary, welches linke 
    		# Regelseiten auf Listen von Regelobjekten abbildet
    		self._regel_dict = dict()
    
    	# Füge eine Regel hinzu
    	def fuege_hinzu(self,r) :
    		# Prüfe, ob die linke Seite von r schon als Schlüssel im dict ist
    		if r.linke_seite() not in self._regel_dict :
    			# Nicht enthalten => auf leere Liste setzen
    			self._regel_dict[r.linke_seite()] = []
    		# Jetzt kann die Regel gefahrlos an die Wert-Liste angefügt werde
    		self._regel_dict[r.linke_seite()].append(r)
    
    # Leere Grammatik konstruieren (mit Satzsymbol 'S')
    g = Grammatik('S')
    # Regeln hinzufügen
    g.fuege_hinzu(Regel('NP',['ART','NN']))
    g.fuege_hinzu(Regel('NP',['NE']))

2015 11 Jul

PidCL Übungsblatt 12

Abgelegt unter: Programmieren für Linguisten | RSS 2.0 | TB | Kommentare geschlossen

Liebe Kommilitonen,

Hier habt ihr das zwölfte und letzte obligatorische Übungsblatt. Es wird noch ein weiteres Bonusübungsblatt geben, mit dem ihr euer schwächstes ausgleichen könnt.

Viel Spaß und ein schönes Wochende

Marco

2015 10 Jul

PidCL, 9.7.

Abgelegt unter: Programmieren für Linguisten | RSS 2.0 | TB | Kommentare geschlossen

Themen:

  • Wie funktioniert Google? Page-Rank-Algorithmus
  • Wie überwacht Google seine Anwender? Durch sog. Browser-Redirect und Dienste wie Google Maps, Google Analytics etc.
  • Weitere Überwachungsmöglichkeit durch den sog. Browser-Fingerabdruck: Im HTTP-Protokoll ist vorgesehen, dass der Client (also der Browser, den man gerade benutzt) Informationen über Betriebssystem, Bildschirmauflösung, Schriftarten etc. an den HTTP-Server schickt. Damit kann der Server die Seitendarstellung an den Client anpassen (z.B. andere Darstellung für Smartphones auswählen). Nun kann man aus diesen Informationen hierzu einen Fingerabdruck errechnen (genauer gesagt, einen Hashwert), mit dem der Browser ziemlich eindeutig identifiziert werden kann. Es ist davon auszugehen, dass alle großen Webfirmen das benutzen. Mehr dazu hier und hier.
  • Suchmachinen, die die Privatheit ihrer Nutzer zumind. ihrer Selbstdarstellung nach mehr respektieren: ixquick, duckgogo.
  • Weitere Tipps: ab und zu mal die Browser-Cookies löschen!
  • Python-Dictionaries (dict) bilden eindeutige Schlüssel auf eindeutige Werte ab; es kann nicht zwei Schlüssel mit verschiedenen Werten geben (also ist ein dict so etwas wie eine Funktion). Für die Schlüssel gibt es eine Einschränkung: sie müssen unveränderlich sein (also keine Liste etc.), die Werte sind beliebig (können also Strings, Zahlen, Listen, Tupel und selbst wieder Dictionaries sein).
  • Beispiele für den Umgang mit Dictionaries:
    # Erzeugt ein leeres dict
    >>> wb = {}
    >>> wb['Tisch'] = 'table'
    >>> wb['Katze'] = 'cat'
    >>> print(d)
    { 'Tisch' : 'table', 'Katze' : 'cat' }
    
    # Abfrage eines Werts
    >>> wb['Tisch']
    'table'
    
    # Fehler, wenn der Schlüssel nicht funktioniert
    >>> wb['Biene']
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    KeyError: 'Biene'
    # Oder gleich beim Erzeugen mit Werten füllen
    >>> wb2 = { 'Hund' : 'dog', 'Frosch' : 'frog' }
    
    # Test, ob ein Schlüssel enthalten ist, mit 'in'
    >>> 'Hund' in wb2
    True
    >>> 'Katze' in wb2
    False
    
    # Ausgabe der Schlüssel:
    >>> wb2.keys()
    ['Hund', 'Frosch']
    
    # Ausgabe der Werte:
    >>> wb2.values()
    ['dog', 'frog']
    
    # Ausgabe der Schlüssel-Wert-Paare:
    >>> wb2.values()
    [('Hund' : 'dog'), ('Frosch' : 'frog')]
  • Iterieren über Dictionaries:
    d = irgendein Dictionary
    
    # Über die Schlüssel
    
    for key in d :
       # ...
    
    for key in d.keys() :
       # ...
    
    # Über die Schlüssel-Wert-Paare:
    for x in d.items() : 
      print(x[0]) # Schlüssel
      print(x[1]) # Wert
  • Tupel in Python: Tupel (Paare, Tripel, Quadrupel, …) sind geordnete Container mit einer festen Anzahl von Komponenten. Sie dienen typischerweise dazu, zu einer Sache weitere Eigenschaften zu verzeichnen. Tupel haben umgrenzenden runde Klammern, Komponenten sind durch Komma getrennt:
    # Haus kommt 42 mal in einem Korpus vor
    wortfreq = ('Haus', 42)
    
    # Katze ist ein fem. Nomen
    wortinfo = ('Katze', 'NN', 'fem')
  • Anders als Listen sind Tupel unveränderlich. Mit einem Index kann auf die Komponenten zugegriffen werden
  • Dateiverarbeitung in Python: Dateien können mit open() zum Lesen oder Schreiben geöffnet werden. Nach der Verarbeitung müssen Dateien mit .close() wieder geschlossen werden. Mit .readline() oder .readlines() können einzelnen Zeilen oder alle Zeilen eingelesen werden.
  • Beispiel: Einlesen eines kleinen Lexikons und Repräsentation in einem Dictionary:
    # Öffnen der Datei zum Lesen
    f = open('wortliste.txt','r')
    
    # Leeres Dict erzeugen
    woerter = {}
    
    # Alle Zeilen aus der Datei in eine Liste einlesen
    eintraege = f.readlines()
    
    # Über diese Liste iterieren
    for x in eintraege :
      # Von der aktuellen Zeile den Zeilenumbruch
      # am Ende löschen und die Zeile am Tabulator auftrennen
      l = x.strip().split('\t')
      # Schlüssel und Wert in das dict eintragen
      woerter[l[0]] = l[1]
    
    # Datei schließen
    f.close()
    
    print(woerter)
  • Aufgabe: das vorangegangene Skript enthält noch einen Fehler, wenn man es z.B. auf diese Datei anwendet. Wer findet und korrigiert ihn?

2015 5 Jul

PidCL – 11. Übungsblatt

Abgelegt unter: Programmieren für Linguisten | RSS 2.0 | TB | Kommentare geschlossen

Hi alle,

 

hier kommt das vorletzte obligatorische Übungsblatt.

Die Liste mit den Ergebnissen von ÜB 8 + 9 hängen wir dann wie gesagt innerhalb der nächsten Tage aus.

 

Viel Erfolg und schönen Sonntag noch!

Aline

2015 3 Jul

PidCL, 2.7.

Abgelegt unter: Programmieren für Linguisten | RSS 2.0 | TB | Kommentare geschlossen

Themen:

  • Listen und Teillisten:
    >>> l = list(range(0,10))
    >>> l[2:5]
    [2,3,4]
    >>> l[2:]
    [2,3,4,5,6,7,8,9]
    >>> l[:5]
    [0,1,2,3,4]
    >>> l[:]
    [0,1,2,3,4,5,6,7,8,9]
  • Objektorientierte Programmierung (OOP): Ein Programmierparadigma, welches das Datum in den Mittelpunkt des Programmierens rückt und die Funktionen darum anordnet. OOP kennt Klassen und Objekte (Instanzen). Eine Klasse ist eine syntaktische und semantische Einheit von Datentypen (Mengen von gleichartigen Objekten, Beispiel: Zahlen) und Funktionen, die auf diesen Daten operieren. Eine Instanz ist dann ein konkretes Datum mit den Funktionen, die seine Klasse definiert. Klassen sind demnach die Baupläne für Objekte.
  • Für den Zugriff auf eine einem Objekt zugeordnete Funktion verwendet Python (wie viele andere OOP-Sprachen auch) den Punkt-Operator:
    # Beispiel: einen String in Großbuchstaben ausgeben
    # Mit . rufen wir die upper()-Fkt. von String aus.
    >>> 'katze'.upper()
    'KATZE'
    # Das Gleiche mit einer Variablen:
    >>> wort = 'katze'
    >>> wort.upper()
    'KATZE'
  • Python kennt viele eingebaute Klassen wie str, list, set, int, bool usw. Jede Klasse bringt eine spezifische Menge von Funktionen mit sich. Mit dem Python-Befehl help(klassenname) können die verfügbaren Funktionen angezeigt werden.
  • Beispiel: String-Klasse. Hier gibt es zahlreiche nützliche Funktionen zur Manipulation von Zeichenketten.
    Beispiele:

    • split(): Teilt einen String mit Hilfe eines Trennzeichens/Trennstrings auf in eine Liste von Strings. Der Standard für das Trennzeichen ist das Leerzeichen:
      >>> 'Heute scheint die Sonne'.split()
      ['Heute','scheint','die','Sonne']
      # Nützlich für kommaseparierte Daten
      >>> '12;27;48'.split(';')
      ['12','27','48']
    • find(): Sucht einen Teilstring in einem String und gibt die Anfangsposition zurück:
      >>> 'Heute scheint die Sonne'.find('Sonne')
      18
    • replace(): ersetzt einen String durch einen anderen:
      >>> satz = 'Heute scheint die Sonne'
      >>> satz.replace('die Sonne','der Mond')
      'Heute scheint der Mond'
    • Boolsche Klassifikationsfunktionen isalnum(), isalpha(), isdigit(), islower(), islower(), isupper(). Geben True zurück, wenn alle Zeichen im String Buchstaben (isalpha), Buchstaben oder Ziffern (isalnum), Ziffern (isdigit), Kleinbuchstaben (islower) oder Großbuchstaben (isupper) sind.
    • lower() und upper(): Konvertieren Großbuchstaben in Kleinbuchstaben und umgekehrt.
  • Auch Objekten zugeordnete Funktionen (im Jargon auch Methoden genannt) können verschachtelt werden. Allerdings sieht man die Verschachtelung nicht sofort:
    >>> 'Heute scheint die Sonne'.upper().split()
    ['HEUTE', 'SCHEINT', 'DIE', 'SONNE']

    Hier wenden wird zunächst die upper()-Funktion auf den String an. Das Ergebnis ist: ‘HEUTE SCHEINT DIE SONNE’. Hierauf wird dann split() angewendet.

  • Merke: OOP-Funktionen werden von links nach rechts ausgewertet.
  • Zu beachten ist aber, dass sich der Objekttyp durch eine OOP-Funktion ändern kann (da die Funktion eine Instanz einer anderen Klasse zurückgibt als zu der sie selbst gehört):
    >>> 'Heute scheint die Sonne'.split().pop().upper().count('N')
    2

    Zunächst wird der String in eine Liste von Strings aufgeteilt (eine Liste von Strings ist KEIN String mehr, sondern eine Instanz der Klasse list). Auf diese wenden wir pop() an, eine Funktion der list-Klasse, die den letzten String der Liste (also ‘Sonne’) zurückgibt. Diesen String wandeln wir in Großbuchstaben um, was wieder einen String ergibt. In diesem zählen wir die Vorkommen von ‘N’, was letztendlich die Zahl 2 ergibt.

  • Bitte schon mal lesen und sich Gedanken über die Darstellung in Python machen: https://de.wikipedia.org/wiki/Trie

 

2015 1 Jul

PidCL Tutorium

Abgelegt unter: Programmieren für Linguisten | RSS 2.0 | TB | Kommentare geschlossen

Hallo zusammen,

Hier habt ihr, wie versprochen, Musterlösungen zu den Aufgaben in Übung 9 und die Funktionen, die wir heute zusammen im Tutorium geschrieben haben, sodass ihr nochmal vergleichen könnt, und nocheinmal nachvollziehen könnt, was Euch noch schwer gefallen ist.

Einen schönen Mittwoch noch,

Marco

2015 30 Jun

Ergebnisse und letzte Übungsblätter

Abgelegt unter: Programmieren für Linguisten | RSS 2.0 | TB | Kommentare geschlossen

Hallo alle, hier mal ein paar Infos zwischendurch:
1.  Die Ergebnisse von ÜB 6+7 hängen jetzt am schwarzen Brett aus. Nächste Woche kommen noch ÜB 8+9 dazu.

2. Zusätzlich zu dem gerade noch laufenden 10. Übungsblatt wird es noch zwei weitere Pflichtübungsblätter geben (also insgesamt 12).

3. Es wird noch ein 13. Übungsblatt geben, was als Bonusübungsblatt gewertet wird. Ihr könnt dadurch eure schlechteste Abgabe ausgleichen – die wird dann einfach rausgerechnet und stattdessen durch die erreichten Punkte von ÜB13 ersetzt. Wenn ihr den Kurs eh schon durch die ersten 12 Übungsblätter bestanden habt, braucht ihr das natürlich nicht abgeben (wir werden dann vor dem 13. Übungsblatt eine Liste mit eurer insgesamt erreichten Punktzahl aushängen).

 

Liebe Grüße

Aline

 

 

 

2015 27 Jun

PidCL – Zehntes Übungsblatt

Abgelegt unter: Programmieren für Linguisten | RSS 2.0 | TB | Kommentare geschlossen

Hallo,

Hier ist das zehnte Übungsblatt. Abgabetermin ist Samstag der 4.7.

Viel Erfolg und einen schönes Wochenende,

Marco

2015 26 Jun

PidCL, 25.5.

Abgelegt unter: Programmieren für Linguisten | RSS 2.0 | TB | Kommentare geschlossen

Themen:

  • Kontrollstruktur : if-else:
    if BoolscherAusdruck :
      # wird ausgeführt, wenn BoolscherAusdruck gleich True ist
    else :
      # wird ausgeführt, wenn BoolscherAusdruck gleich False ist
  • Funktionen in Python:
    def Funktionsname(Param1,... Paramk) :
       Funktionsdefinition
  • Beispiele für Funktionen in Python:
    • Fakulätsfunktion:
      def factorial(n) :
        f = 1
        for x in range(1,n+1) :
          f = f * x
        return f
      
      # Zahl vom Benutzer erfragen
      n = int(input('Positive Ganzzahl: '))
      # Hinweis: das 'n' hier ist ein anderes als das oben 
      # in der Definition von factorial()
      
      if n < 0 :
        print('Fehler: Zahl ist negativ')
        exit()
      else :
        print(factorial(n))
    • Summe der Zahlen in einer Liste:
      def listensumme(l) :
        "Gibt die Summe der Zahlen in der Liste zurück"
        summe = 0
        for x in l :
         summe += x  
        return summe
      
      print(listensumme([2,3,5,7,11,13,17,19]))
    • Die Wörter einer Wortliste zu einem Satz (String) verbinden (erste Version):
      def satz(liste) :
        """Verkettet alle Wörter in liste und fügt
        Leerzeichen zwischen den Wörtern ein"""
        s = ''
        for wort in liste:
          s  = s + ' ' + wort
          # Neuer Wert von s ist alter Wert von  s verkettet mit 
          # Leerzeichen verkettet mit aktuellem Wort
        return s
      
      print(satz(['the','Queen','is','not','amused']))
    • Die Wörter einer Wortliste zu einem Satz (String) verbinden (verbesserte Version):
      def satz(liste) :
        """Verkettet alle Wörter in liste und fügt
        Leerzeichen zwischen den Wörtern ein"""
        if len(liste) == 0 :
          # Liste ist leer => Satz ist auch leer
          return ''
        else :
          # Beginne mit dem ersten Wort der Liste
          s = liste[0]
          # Gehe die Liste nun mit einem Index durch
          # Grund: wir fangen jetzt nicht beim ersten Element an
          for i in range(1,len(liste)):
            s  = s + ' ' + liste[i]
          return s
      
      print(satz(['the','Queen','is','not','amused']))
  • Neue Python-Wörter:
    • def leitet eine Funktionsdefinition ein
    • return Wert : beendet eine Funktion und gibt Wert als Funktionswert zurück. Hinweis: eine Python-Funktion kann auch mehrere Vorkommen von return aufweisen.
    • pass : macht nichts

2015 21 Jun

PidCL – Neuntes Übungsblatt

Abgelegt unter: Programmieren für Linguisten | RSS 2.0 | TB | Kommentare geschlossen

Hallo liebe alle,

Hier kommt das neunte Übungsblatt.
Wir haben uns entschieden, die Abgabefrist dauerhaft von Freitagabend auf Samstagabend zu verlegen, damit ihr ein bisschen mehr Zeit für die Übungsblätter habt.

Viel Erfolg und noch einen schönen Sonntag,
Aline

Hinweis: Bitte verpackt eure Hausaufgaben als GENAU EINE zip-Datei mit eurem Namen, in der sich euer Lösungsdokument und eure Scripte befinden – ansonsten ist das für uns leider sehr unübersichtlich. Danke!

2015 18 Jun

PidCL, 18.6.

Abgelegt unter: Programmieren für Linguisten | RSS 2.0 | TB | Kommentare geschlossen

Themen:

  • Prozessor-Architektur
  • Zahlenbereiche in Python: range(n,m) bezeichnet in Python ein halboffenes Intervall [n,m[ , zu dem n gehört, aber m nicht mehr.
  • Ranges sind Listen in Python 2, und Fast-Listen in Python 3. Mit list() kann in Python 3 ein range in eine Liste umgewandelt werden:
    >>> list(range(1,10))
    [1,2,3,4,5,6,7,8,9]
  • in-Operator: mit in kann in Python getestet werden, ob eine Zahl in einem gegebenen Intervall liegt:
    >>> 2 in range(0,10)
    True
    >>> 10 in range(0,10)
    False
  • Intervalle (ranges) sind besonders sinnvoll in Zusammenhang mit for-Schleifen. Die for-Schleife: for x in r : lässt x der Reihe nach jeden Wert im Intervall r annehmen:
    for x in range(0,10) :
      print x
  • Beispiel: Fakultätsfunktion:
    n = int(input('Bitte eine positive Ganzzahl eingeben: '))
    f = 1
    
    for x in range(1,n+1) :
      f = f * x
    
    print x
  • Neue Funktion: input(Prompt) liest einen String von der Tastatur und gibt vorher 'Prompt' aus:
    >>> input("Geben Sie Ihren Namen ein: ")
    Geben Sie Ihren Namen ein: Donald Duck
    'Donald Duck'
  • Industrie 4.0

2015 17 Jun

PidCL morgen

Abgelegt unter: Programmieren für Linguisten | RSS 2.0 | TB | Kommentare geschlossen

Hallo zusammen

der Programmierkurs am Donnerstag findet statt, wird aber wegen des Dies academicus auf 90min verkürzt.

 

2015 14 Jun

PidCL – Achtes Übungsblatt

Abgelegt unter: Programmieren für Linguisten | RSS 2.0 | TB | Kommentare geschlossen

Guten Morgen,
Hier, kommt das achte Übungsblatt – die Abgabefrist läuft wieder bis Samstagabend.

Schönen Sonntag noch!
Aline

2015 11 Jun

PidCL, 11.6.

Abgelegt unter: Programmieren für Linguisten | RSS 2.0 | TB | Kommentare geschlossen

Themen:

  • Datentypen sind interne Repräsentationsformen von Daten. Datentypen bisher sind int, str, float und bool.
  • Mit Datentypen sind auch bestimmte Operationen verknüpft: ‘+’ bedeutet bei int und float “Addition”, bei Zeichenketten “Verkettung”
  • Typenkonversion: innerhalb sinnvoller Grenzen kann zwischen Datentypen hin -und her konvertiert werden: aus ints können floats gemacht werden, mit Verlusten auch umgekehrt, aus bestimmten Zeichenketten können auch (Fließkomma)Zahlen gemacht werden.
  • Die Typkonversion macht man mit Funktionen, die wie die Typen heißen. Beispiele:
    int(3.1415)     # int aus float
    float(42)       # float aus int
    int('1234')     # int aus str(ing), wobei String eine gültige Zahldarstellung ist
    float('3.1415')
  • Neuer Datentyp: list: realisiert eine beliebige, auch leere Folge von irgendwelchen anderen Daten. Beispiele:
    [2,3,5,7]                # Liste von Zahlen
    ['Hans','liebt','Maria'] # Liste von Strings
    [[2,3],[5,7]]            # Liste von Zahlenlisten
    ['Justin Bieber',23,True,2.500000] # Liste von ganz versch. Daten
  • Operationen auf Listen: Verkettung mit +, len() zur Bestimmung der Länge, Indizierung mit []:
    abba = ['Agneta','Björn','Benny','Annafrid' ]
    len(abba)
    abba[3]    # 3tes Element von 0
  • Kontrollstrukturen sind syntaktische Mittel in Programmiersprachen, um den Programmablauf zu strukturieren. Solche sind Schleifen (Iteration), Auswahlanweisungen (if-then-else), Sequenzen, Blöcke und Rekursion.
  • Ein Block ist in Python eine zusammenhägende Sequenz von Anweisungen, die auf der gleichen Einrückungstiefe stehen.
  • Kontrollstrukturen: while-Schleifen:
    z = 0
    while z < 5 :
      print('hi')
      z = z + 1
    
    # Summe der Zahlen von 1 bis 10
    summe = 0
    i = 1
    while i < 11:
      summe = summe + i
      i = i +1
    
    print(summe)

2015 7 Jun

PidCL – Siebtes Übungsblatt

Abgelegt unter: Programmieren für Linguisten | RSS 2.0 | TB | Kommentare geschlossen

Hallo,

hier ist das 7. Übungsblatt. Die Frist ist dieses Mal wieder bis Samstagabend verlängert.

 

Außerdem an dieser Stelle noch kurz einige Hinweise:

1. Marco und ich möchten euch alle nochmal darum bitten, entweder euren Namen oder eure Matrikelnummer in eure Lösung zu schreiben. Das macht das Kontrollieren für uns sehr viel einfacher.

2. Schaut bitte genau, ob es bei dem Übungsblatt noch eine zweite Seite gibt. Klingt jetzt vielleicht ein bisschen blöd, aber es ist schon mehrmals vorgekommen, dass unterschiedliche Leute diese Seite wohl einfach übersehen haben.

3. Ab morgen Nachmittag hängen die Ergebnisse von Übung 4 und 5 wieder am schwarzen Brett in Haus 14 aus.

 

Noch einen schönen Sonntag euch allen!

Aline

2015 5 Jun

PidCL, 4.6.

Abgelegt unter: Programmieren für Linguisten | RSS 2.0 | TB | Kommentare geschlossen

Themen:

  • Reguläre Ausdrücke in AWK
  • Python
    • Datentypen: string, int, float, bool
    • Operationen auf Zahlen, Zeichenketten und boolschen Werten
    • Funktionen: print() und type()

2015 30 Mai

PidCL – Sechstes Übungsblatt

Abgelegt unter: Programmieren für Linguisten | RSS 2.0 | TB | Kommentare geschlossen

Hi zusammen!

 

Hier kommt schon mal das 6. Übungsblatt.

Viel Erfolg euch allen und ein schönes Wochenende!

 

Aline

2015 28 Mai

PidCL, 28.5.

Abgelegt unter: Programmieren für Linguisten | RSS 2.0 | TB | Kommentare geschlossen

Themen:

  • N-Gramme
  • Variablen in AWK, Zuweisung an Variablen
  • AWK: spezielle Tests BEGIN und END
  • Operationsweise von AWK: AWK geht die Textdatei mit den tabellarischen Daten zeilenweise durch, zerlegt die Zeilen mit dem Feldseparator (standardmäßig Tabulator, veränderbar mit der FS-Variablen in der BEGIN-Aktion), wendet der Reihe nach alle Tests auf die Daten an (inklusive des leeren Tests, der immer wahr ist) und führt, wenn ein Test wahr ist, die dazugehörigen Aktionen aus.
  • Komplexe Tests mit && (aussagenlogisches Und) und || (aussagenlogisches Oder)
  • AWK-Skript zur Erstellung von Bigrammen:
    BEGIN    { wort_vorher = "<START>"; }
             { print wort_vorher "\t" $1; wort_vorher = $1; }
    END      { print wort_vorher "\t"; "<STOP>"; };
  • Auswahl bestimmter N-Gramme:
    BEGIN                  { wort_vorher = "<START>"; }
    $1 == "Parlament"      { print wort_vorher "\t" $1; }
                           { wort_vorher = $1; }
  • Digitales Wörterbuch der deutschen Sprache

2015 24 Mai

PidCL – Fünftes Übungsblatt

Abgelegt unter: Programmieren für Linguisten | RSS 2.0 | TB | Kommentare geschlossen

Hi all,

 

Hier kommt Übungsblatt Nr. 5! Weil das mit dem Hochladen etwas gedauert hat, haben wir die Abgabefrist dieses Mal auf Samstagabend verlängert.

Für die Bearbeitung der einen Aufgabe benötigt ihr diese Datei hier. Es handelt sich um eine annotierte Version des Tiger-Korpus mit Daten zu Lemmata, morphologischen Informationen etc.

Aus Copyright-Gründen können wir sie nicht einfach so ungeschützt hier hochladen, deswegen ist die zip-Datei mit einem Passwort geschützt. Das Passwort verschicke ich gleich an euch alle per Mail – sollte jemand keine Mail bekommen, dann schreibt mir oder Marco einfach nochmal und ihr bekommt das Passwort.

Falls ihr das Archiv per Kommandozeile entpacken möchtet: Mit “unzip -P passwort verzeichnisname” sollte das gehen.

 

Viel Erfolg euch allen und schöne Pfingsten!

Aline

 

 

2015 22 Mai

PidCL, 21.5.

Abgelegt unter: Programmieren für Linguisten | RSS 2.0 | TB | Kommentare geschlossen

Themen:

  • Shell-Scripte sind Textdateien, die gültige Linuxbefehle enthalten und die von einem Script-Interpretierer, einer Shell, ausgeführt werden.
  • Wie jedes Linux-Programm können auch Shell-Scripte Parameter haben. Diese werden einfach mit $1, $2 durchnumeriert. Beispiel: das Script, welches aus Korpora die Types isoliert, sieht so aus.
    sort < $1 | uniq -c | sort -nr > $1.freq

    $1 ist der Platzhalter, der für den ersten von außen gegebenen Parameter steht. Wir speichern das Script in einer Datei count_freq und machen diese ausführbar. Nun wenden wir das Script auf tiger.corpus an:

    $ ./count_freq tiger.corpus

    Im Script wird nun $1 durch tiger.corpus ersetzt und die Befehlskette ausgeführt.

  • Wildcard-Symbole: diese sind z.B. *, + und ? und haben in etwa die Bedeutung wie in regulären Ausdrücken.
  • Wildcard-Symbole werden in erster Linie zusammen mit der Shell bei der Angabe von Dateinamenmustern verwendet. Beispiele:
    # Zeige alle Text-Dateien (=alle Dateien mit der Endung txt)
    ls -l *.txt
    
    # Lösche alle Dateien mit Tilde am Ende
    # (Vorsicht: es gibt keinen Papierkorb)
    rm *~
    
    # Zeige alle Dateien, die mit h anfangen und auf txt enden
    ls -l h*.txt
    
    # Suche Maus in allen .corpus Dateien
    grep Maus *.corpus
  • AWK ist eine Verarbeitungssprache für tabellarische Daten. Solche Daten sind in Zeilen und Spalten unterteilt. Zwischen den Spalten steht ein Trennzeichen, in awk meist TAB (Tabulator), oft aber auch Komma und Semikolon. Insbesondere wenn Komma verwendet wird (aber nicht nur), spricht man von CSV-Format (comma separated values). CSV-Dateien werden gerne zum Austausch von Daten zwischen Programmen verwendet, z.B. kann Excel csv-Dateien importieren.
  • AWK ist auch ein Script-Interpreter: es wendet ein awk-Script auf eine oder mehrere Textdateien an:
    $ awk -f awk-script.awk text-datei.txt
  • AWK-Scripte bestehen aus 2 Spalten. In der 1. Spalte steht stets ein Test (ein Muster etc.), in der 2. eine Aktion in {}. Der Test kann auch leer sein, die einfachste Aktion ist print (gibt die gesamte Zeile aus)
  • AWK liest die Eingabetextdatei zeilenweise ein, separariert sie in Spalten (die mit $1, $2 etc. angesprochen werden können) und wendet auf sie alle Tests im Script an. Wenn ein Test erfolgreich ist, dann wird die dazugehörige Aktion ausgeführt.
  • AWK implementiert zwei wichtige Operationen auf Relationen (Tabellen): Projektion und Selektion. Projektion wählt bestimmte Spalten aus der Eingabetabelle aus, Selektion bestimmte Zeilen.
  • Ein einfaches Beispiel, welches die Wörter aller Zeilen mit Wortart NN ausgibt ist folgendes (vgl. Datei tagged.corpus):
    # Selektion von Nomen und Projektion der ersten Spalte (das jeweilige Wort)
    $2 == "NN"     { print $1; }
  • Weitere Beispiele finden Sie hier.

2015 16 Mai

PidCL – kein Übungsblatt diese Woche!

Abgelegt unter: Programmieren für Linguisten | RSS 2.0 | TB | Kommentare geschlossen

Guten Morgen,

diese Woche wird es kein Übungsblatt geben, da am Donnerstag ja auch keine Vorlesung stattgefunden hat.

Und noch ein Hinweis: Die Ergebnisse eurer Übungsblätter 1 bis 3 werden wir ab Montag/Dienstag am schwarzen Brett des Linguistik-Departements (Haus 14, 2. Stock) aushängen.

Noch ein schönes Wochenende euch!

Aline

 

2015 12 Mai

PidCL – Hinweise zur Bearbeitung der Ü-Blätter

Abgelegt unter: Programmieren für Linguisten | RSS 2.0 | TB | Kommentare geschlossen

Hallo zusammen,

eine kurze Durchsage:

  1. Bitte achten Sie auf Rechtschreibfehler in Ihren Abgaben. Zu einem Studium gehört es auch, seine Muttersprache fehlerfrei zu beherrschen. Die Tutoren behalten sich vor, Abgaben mit zu vielen Fehlern mit Punktabzügen zu versehen
  2. Keine Gruppenarbeit! Die Ü-Blätter sind die einzige Leistung, die Sie für den Kurs erbringen müssen. Jede(r) muss ihre/seine Lösung für sich machen.
  3. Wir haben zumindest bei einigen den Eindruck, dass diese ihre Abgaben gar nicht testen. Dieser Kurs ist ein intrinsisch praktischer, also bitte vorher alles ausprobieren, was Sie abgeben.

Danke.

2015 10 Mai

PidCL – Viertes Übungsblatt

Abgelegt unter: Programmieren für Linguisten | RSS 2.0 | TB | Kommentare geschlossen

Hallo zusammen,

Hier kommt das vierte Übungsblatt. Sorry wegen der leichten Verspätung.

Hier nochmal Brown-Korpus und Tiger-Korpus, die ihr für die eine Aufgabe braucht – aber die müsstet ihr ja auch noch von den anderen Übungsblättern haben.

Viel Erfolg und noch einen schönes Restwochenende!

Aline


CL-Blog läuft unter Wordpress 3.5.1
Anpassung und Design: Gabis Wordpress-Templates
23 Verweise - 0,347 Sekunden.