mal wieder ich. Diesmal geht es um reguläre Ausdrucke.
Ich habe eine Textdatei. Darin sind halt normale Sätze wie z.B.
Usw. usf. die Leerzeichen zwischen den Satz- und Sonderzeichen sind absicht im Text, damit das einfacher wird.Ich fahre heute Auto , und bin glücklich dabei .
Folgendes muss ich machen:
1) Extrahieren der Nomen
2) Anfügen des Geschlechts an das jeweilige Nomen
3) Sortiert Ausgeben
Die Kriteria zur Genauigkeit der Nomen- und Geschlechtserkennung spielt erstmal keine Rolle.
Das Erkennen der Nomen geht z.B. indem ich jedes Wort prüfe ob das 1. Buchstabe Groß oder Klein ist. Natürlich fallen dann Fehlerhafte dazu wie "Das" "Ist" "Ob" "Müssen", das ist aber egal erstmal.
Nachdem ich die Nomen erkannt habe, muss ich dann dem Nomen das Geschlecht zuordnen.
Hier dachte ich z.B. Endungsorientiert zu arbeiten.
Lehrerin, Freundin, das -in weist auf Feminin hin. Nun muss ich "F", "N", "M" abhängig vom Nomen anfügen und schließlich sortiert ausgeben.
Die Ausgabe soll in etwa so aussehen:
Ich komme allerdings mit den regulären Ausdrücken überhaupt nicht klar.Abend M
Abende M
Abends M
Abendtafel F
Abenteuer N
Abfälle M
Abfällen M
Abgrund M
Ablaufs M
Ablehnung F
...
...
match...search...findall...findit...
Den Anfang habe ich schonmal gemacht, aber weiter komme ich absolut nicht.
Code: Alles auswählen
# Modul zur Verwendung von reg. Ausdrücken
import re
# Set für das Nominalexikon
nominalexikon = set([])
# Korpus aus einer Datei einlesen
# (Sie muss sich im selben Verzeichnis wie die
# Programmdatei befinden...)
text = unicode(open('8malt12.txt','Ur').read(),'utf-8')
# Text wird in Wort-Tokens aufgesplittet
# tokens = text.split()
# Definition des reg. Ausdrücks für Nomen
Nomen_re = re.compile(r'[A-ZÖÄÜ]')
'''
Hier stehe ich voll auf dem Schlauch. Wie definiere ich nun ein Kriterium, dass in jedem Wort, egal welcher Länge,
die 1. Buchstabe gematcht wird ob es klein oder GROß ist?
'''
# Text wird durchsucht und der vorher definierter
# reg. Ausdrück wird gesucht
nominalexikon = Nomen_re.findall(text)
# Entfernen von doppelten Einträgen
nominalexikon = set(nominalexikon)
print nominalexikon