6.2
Klassen
6.2.1
Ober-/Unterklassen
Motivation
Ziel
Eine Klasse programmieren, welche eine Konkordanz über einem gestemmten Index anzeigt.
Beispiel-Output
>>> text.concordance(’die’,width=30)
BLACK KNIGHT : Then you shall die . ARTHUR : I command you
Camelot . He was not afraid to die , O brave Sir Robin .
Concorde , you shall not have died in vain ! CONCORDE : Uh
2 : Oh , he ’ s died ! FATHER : And I want
that ? MAYNARD : He must have died while carving it . LAUNCE
ARTHUR : Look , if he was dying , he wouldn ’ t bother
Beispiel: Konkordanzprogramm über gestemmten Wörtern
Ziel
Eine Klasse programmieren, welche eine Konkordanz über einem gestemmten Index anzeigt.
Benötigte Kompetenzen
- Wie lassen sich (einfache) Klassen definieren?
- Definition eigener Regex-Stemmer oder Benutzung von NLTK-Stemmern
- Formatierung von zentriertem textuellem Output mit Format-Ausdrücken
Klassen
Gemeinsame Eigenschaften und Fähigkeiten von Objekten
Was verbindet oder unterscheidet die Objekte der verschiedenen Klassen?
Essbare Objekte
Geometrische Objekte
Klassen
- Klassen spezifizieren und implementieren die Eigenschaften
(Attribute) und Funktionalitäten
(Methoden) von Objekten.
- Klassen abstrahieren
gemeinsame Eigenschaften und Funktionalitäten.
- Klassen sind in Unter-/Oberklassen (superclass/subclass) organisiert (Vererbung
).
- Vererbung heisst, dass Eigenschaften/Methoden einer Oberklasse defaultmässig
auch in der Unterklasse zur Verfügung stehen.
- Die Methoden können in der Unterklasse aber auch umdefiniert
werden (Flexibilität
).
- Die allgemeinste Klasse ist in Python heisst object.
- Jede selbstdefinierte Klasse hat mindestens eine Oberklasse
, von der sie eine Unterklasse ist.
- Mehrfachvererbung
ist möglich, d.h. eine Klasse kann Unterklasse von unterschiedlichen Klassen sein.
Typen von Klassenhierarchien
ISA-Relation: Beziehung zwischen einer Klasse und ihrer Oberklasse
Ein Apfel ist eine Frucht. Jedes Quadrat ist ein Rechteck.
Flache Hierarchie → 49
Verschachtelte Hierarchie
Klassenhierachie in NLTK
Ist die NLTK-Klasse nltk.FreqDist ist eine Unterklasse von dict?
>>> issubclass(nltk.FreqDist,dict) True
Die Eigentümlichkeiten der Oberklasse object
Die Klasse object ist trotz ihres Namens eine Klasse!
>>> help(object) Help on class object in module __builtin__: class object | The most base type
Objekte (Instanzen) der Klasse object
>>> o = object() >>> type(o) <type ’object’>
Gibt es eine Oberklasse der Klasse object?
>>> issubclass(object,object) True
Klassenhierarchie in NLTK
Klassenhierarchien sind normalerweise eher flach. Eine Ausnahme in NLTK sind die Einleseklassen für
Korpora.
Klassenhierarchie für Treebanks im Klammerformat → 50
( (S
(NP-SBJ
(NP (NNP Pierre) (NNP Vinken) )
(, ,)
(ADJP
(NP (CD 61) (NNS years) )
(JJ old) )
(, ,) )
(VP (MD will)
(VP (VB join)
(NP (DT the) (NN board) )
(PP-CLR (IN as)
(NP (DT a) (JJ nonexecutive) (NN director) ))
(NP-TMP (NNP Nov.) (CD 29) )))
(. .) ))
6.2.2
Klassendefinition
Klassen definieren: Case-insensitive Strings
Definition der Klasse, der Konstruktorfunktion und einer Methode → 51
Instantiierung eines Objekts und Methodenaufruf
Zusammenhang von Definition und Verwendung
Mehrfachvererbung (multiple inheritance)
Eine Klasse kann Unterklasse von mehr als einer Oberklasse
sein. Im Sinne von class EdibleFruit(Produce,Fruit):
Mehrfachvererbung in der Oberbegriffshierarchie bei WordNet
Quelle: http://wordnetweb.princeton.edu/perl/webwn
Regex-Stemmer-Klasse definieren
Klasse mit Default-Argument → 52
Initialisierung und Verwendung
Textindexer definieren
enumerate(s) generiert Paare (Position,Item) aus Sequenz
l = [’wenn’, ’fliegen’, ’hinter’, ’fliegen’, ’fliegen’] >>> list(enumerate(l)) [(0, ’wenn’), (1, ’fliegen’), (2, ’hinter’), (3, ’fliegen’), (4, ’fliegen’)]
nltk.Index(Pairs) erzeugt invertierten Index aus (Item,Position)
>>> index = nltk.Index((w,i) for (i,w) in enumerate(l)) >>> index[’fliegen’] [1, 3, 4]
Private und öffentliche Methode definieren
Unterstrich drückt Privatheit der Stemm-Methode aus
Öffentliche Methode für Formatierung