Ablauf der Übung • Klärung von aktuellen Fragen zur Vorlesung • Kurze Einführung in Python • Einrichten einer Python-Umgebung • Bearbeiten der Programmieraufgabe Einführung in Python Übung zur Vorlesung NLP Beate Krause, Dominik Benz 22.04.2008 23.04.2008 NLP-Übung: Einführung in Python 1 Python ist eine… • • • • • 23.04.2008 NLP-Übung: Einführung in Python 2 Zum Programmieren braucht man.. objektorientierte dynamisch getypte interpretierte interaktive High-Level-Programmiersprache • Einen Texteditor. Komfortabel: – Eclipse (http://www.eclipse.org/downloads/moreinfo/classic.php) Pydev Python Plugin (http://pydev.sourceforge.net/) • den Python-Interpreter – http://www.python.org/download/ • für uns zusätzlich: NLTK – http://nltk.sourceforge.net/ 23.04.2008 NLP-Übung: Einführung in Python 3 23.04.2008 NLP-Übung: Einführung in Python 4 Getting started Variablen • • Gut zum „Herumspielen“: Das Interactive Development Enviroment (IDLE) Variablennamen: ASCII-Zeichen + Ziffern (erstes Zeichen darf keine Ziffer sein) müssen nicht deklariert werden, werden ins Leben gerufen, sobald Wert zugewiesen wird (aber auch erst dann!) • 1 1 2 3 4 5 6 7 8 Python 2.5.2 (r252:60911, Feb 21 2008, 13:11:45) [MSC v.1310 32 bit Type "copyright", "credits" or "license()" for more information. >>> print 3 + 10 * 10 103 >>> "hello,-" + "world" ’hello,-world’ >>> "spam-" * 4 ’spam-spam-spam-spam-’ 2 3 4 5 NLP-Übung: Einführung in Python 5 7 8 9 2 3 4 5 6 7 8 9 10 11 2 3 4 5 6 7 8 9 10 11 12 13 14 NLP-Übung: Einführung in Python NLP-Übung: Einführung in Python 6 kann verschiedene Elemente enthalten (Strings, Integer, andere Listen, …) sind im Gegensatz zu Strings mutable, d.h. Inhalt kann nach Definition modifiziert werden 1 >>> msg = ’Hello-World’ >>> msg[0] ’H’ >>> msg[3] ’l’ >>> msg[1:4] ’ell’ >>> len(msg) 11 >>> msg[-1] ’d’ 23.04.2008 Traceback (most recent call last): File "<pyshell\#3>", line 1, in <module> msg * newNum NameError: name ’newNum’ is not defined 23.04.2008 • • Strings werden als Sequenz von Zeichen aufgefasst, aus denen „slices“ extrahiert werden können 1 newNum Sequenztyp Liste Sequenztyp Strings • ’Hi’ 3 num 6 10 23.04.2008 >>> msg = >>> num = >>> msg * ’HiHiHi’ >>> msg * 7 >>> numbers = [1, 4, 9, 16] >>> colors = [’green’, ’blue’, ’red’] >>> colors[0] * numbers[1] ’greengreengreengreen’ >>> colors[0] = ’black’ >>> numbers[1] = 2 >>> colors[0] * numbers[1] ’blackblack’ >>> name = ’Saulus’ >>> name[0] = ’P’ Traceback (most recent call last): File "<pyshell#6>", line 1, in <module> name[0] = ’S’ TypeError: ’str’ object does not support item assignment 23.04.2008 NLP-Übung: Einführung in Python 8 Sequenzen / Strings: nützliche Funktionen Sequenztypen allgemein 1 • alle Sequenztypen unterstützen die Operationen 2 3 4 Verkettung "Gambol"+ "putty"== "Gambolputty" >>> >>> >>> >>> chomsky = [’colorless’, ’green’, ’ideas’] chomsky.sort() # Sortieren chomsky.reverse() # Reihenfolge umkehren chomsky.append(’sleep’) # Elemente hinzufuegen 5 Wiederholung: 2 * "spam"== "spamspam" 6 7 Indizierung: "Python"[1] = "y" 8 9 Mitgliedschaftstest: "yth" in "Python" # Elemente aus Liste in String umwandeln >>> sent = ’;’.join(chomsky) >>> sent ’colorless;green;ideas;sleep’ 10 Slicing: "Monty-Python’s-Flying-Circus"[6:12] = "Python" 11 12 Iteration: for x in "egg" 23.04.2008 NLP-Übung: Einführung in Python 13 9 # String mittels Delimiter aufteilen >>> sent.split(;) [’colorless’, ’green’, ’ideas’, ’sleep’] 23.04.2008 Kontrollstrukturen: if / else 1 2 3 4 5 6 7 NLP-Übung: Einführung in Python 10 Dictionaries • • >>> word = ’Hello-World’ >>> if len(word) < 3: print ’word-length-is-less-than-three’ elif len(word) == 3: print ’word-length-is-three’ else: print ’word-length-is-greater-than-three’ 1 2 3 4 5 6 Listen sind immer mit Integers indiziert Verallgemeinerung („alles mit allem indizieren“): Dictionaries >>> >>> >>> >>> >>> ’n’ pos = {} pos[’colorless’] = ’adv’ pos[’furiously’] = ’adv’ pos[’ideas’] = ’n’ pos[’ideas’] 7 • Gültigkeitsbereich der Schleife durch whitespace festgelegt(!!) • kein Semikolon am Ende der Zeilen 8 9 10 >>> pos.keys() # all keys (as list) >>> pos.values() # all values (as list) >>> pos.items() # all items (as key / value pairs) 11 12 13 23.04.2008 NLP-Übung: Einführung in Python 11 >>> if ’adv’ in pos: # ACHTUNG: prueft nur Schluesselmenge 23.04.2008 NLP-Übung: Einführung in Python 12 Reguläre Ausdrücke • • 1 2 3 4 5 6 Reguläre Ausdrücke ctd. „Zeichenketten, die der Beschreibung von Mengen beziehungsweise Untermengen von Zeichenketten mit Hilfe bestimmter syntaktischer Regeln dienen“ (Wikipedia) seehr mächtig & praktisch – aber: learning by doing!! • Online testen: http://www.fileformat.info/tool/regex.htm >>> import nltk >>> s = ’This-is-a-greeeat-sentence!’ >>> nltk.re_show(’is’, s) Th{is} {is} a greeeat sentence! >>> nltk.re_show(’e+’, s) This is a gr{eee}at s{e}nt{e}nc{e}! 7 8 9 10 11 >>> import re # alle nicht-Vokal / Vokal-Paare >>> re.findall(’([^aeiou][aeiou])’, s) [’hi’, ’-i’, ’-a’, ’re’, ’se’, ’te’, ’ce’] 23.04.2008 NLP-Übung: Einführung in Python 13 Hinweise zur Übung / NLTK • NLTK bietet recht viele „fertige“ Funktionalität / Hilfestellung – z.B. praktisch zum Plotten der Häufigkeiten: nltk.draw.plot – Stopwortlisten für verschiedene Sprachen verfügbar – … • es geistert auch viel fertiger Python-NLP-Code im Netz herum – inspirieren OK, kopieren nicht – Rad nicht 2x erfinden – aber VERSTEHEN! 23.04.2008 NLP-Übung: Einführung in Python 15 23.04.2008 NLP-Übung: Einführung in Python 14