Hallo. Hallo. Hallo.
Ich bin neu in diesem Forum und brauche direkt mal eure Hilfe.
Ich möchte ein Programm schreiben, welches Komposita in verschiedenen Korpora erkennt und analysiert.
Mein Ansatz ist dabei in den Korpora selbst schon nach möglichen Bestandteilen vom Kompositum zu suchen.
Allerdings würde ich dann hierbei nicht alle Komposita aller Korpora berücksichtigen können.
Gäbe es da noch eine andere Möglichkeit, die idealerweise simpler und effektiver ist?
Wörter und Satzzeichen sollen erstmal voneiander getrennt werden, aber wie kann ich bei der Tokenisierung Abkürzungen ausklammern?
Und wie kann ich die verschiedenen Fugenelemente unterbringen?
Ein Kompositum soll auch gefunden werden, wenn die Glieder und das Kompositum selbst in verschiedenen Korpora untergebracht sind.
Auch sollte das Programm resistent gegen unerwartete Formate (wie "***") sein und ein Token pro Zeile auswerfen.
Vielen Dank schonmal für Eure Unterstützung!
Kompositaanalyse
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Wir sind hier keine Linguisten - oder geht es gar nicht um Sprachanalyse? Deine Frage hat ja weniger mit Python zu tun, als viel mehr mit fachlich speziellen Dingen. Zudem wissen wir nichts über das Datenformat usw.
Da fehlt es hier definitiv an Angaben!
Da fehlt es hier definitiv an Angaben!
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Es geht ja hauptsächlich um die Programmierarbeit. Also z.B. die Tokenisierung.
Das Programm soll einen Textkorpus einlesen (korpus = codecs.open('finn.txt','Ur','utf-8').read()) und darin
zusammengesetzte Wörter erkennen und analysieren. Die Ausgabe soll in einer eigenen Datei erfolgen
und zwar so, dass ein Token pro Zeile ausgegeben wird.
Der linguistische Aspekt ist ja "nur" der, worauf das Programm angewendet werden soll.
Was genau meinst du mit Datenformat?
Das Programm soll einen Textkorpus einlesen (korpus = codecs.open('finn.txt','Ur','utf-8').read()) und darin
zusammengesetzte Wörter erkennen und analysieren. Die Ausgabe soll in einer eigenen Datei erfolgen
und zwar so, dass ein Token pro Zeile ausgegeben wird.
Der linguistische Aspekt ist ja "nur" der, worauf das Programm angewendet werden soll.
Was genau meinst du mit Datenformat?
@Myra2907: Es geht nicht hauptsächlich um die Programmierarbeit, denn beim Tokenisieren und Komposita suchen kommt es doch ganz entscheident darauf an was für Dich Token sind und was Komposita und wie man die erkennen kann. Also alles sehr fachspezifisch.
Mit Format ist war gemeint welches Format die Eingabe hat. Anscheinend gar keins, also einfach beliebiger, irgend wie formatierter Text‽
Mit Format ist war gemeint welches Format die Eingabe hat. Anscheinend gar keins, also einfach beliebiger, irgend wie formatierter Text‽
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Ja und wie geht das algorithmisch? Das ist doch *fachlich* und nichts Python spezifisches!Myra2907 hat geschrieben:... und darin zusammengesetzte Wörter erkennen und analysieren.
Du musst uns doch mitteilen, welchen Algorithmus Du da umsetzen willst...
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Da habt ihr allerdings recht. Entschuldigt. Dann versuche ich das ein wenig spezifischer zu erläutern.
Ein Kompositum ist das Ergebnis der Zusammensetzung aus mindestens zwei verschiedenen Morphemen. Ein Verknüpfungsglied dieser Morpheme nennt man Fugenelement. Im Deutschen ist das häufigste Fugenelement das –s, also zum Beispiel Urheber + Recht + s + Novelle.
Also beim Tokenisieren sollen die Wörter (Token) und Satzzeichen aus einem eingelesen Text (Textkopus bzw. Textdatei (txt)) in Listenform (Ein Wort/Zeichen pro Zeile) getrennt werden.
Der Benutzter soll immer weitere Textdateien angeben können, die dann tokenisiert und dann auf alle zusammengesetzten Wörter hin untersucht werden
und das Programm soll diese Wörter auch noch analysieren, also ausgeben ob es zB aus zwei Nomen zusammengesetzt ist.
Mein Problem ist jetzt die Herangehensweise an den Algorithmus mit regulären Ausdrücken.
Ich hab jetzt mit dem tokenisieren angefangen, allerdings habe ich noch keinen Ansatz gefunden, bei dem die Satzzeichen nicht rausgelöscht, sondern als
einzelnes Token wahrgenommen werden.
Ein Kompositum ist das Ergebnis der Zusammensetzung aus mindestens zwei verschiedenen Morphemen. Ein Verknüpfungsglied dieser Morpheme nennt man Fugenelement. Im Deutschen ist das häufigste Fugenelement das –s, also zum Beispiel Urheber + Recht + s + Novelle.
Also beim Tokenisieren sollen die Wörter (Token) und Satzzeichen aus einem eingelesen Text (Textkopus bzw. Textdatei (txt)) in Listenform (Ein Wort/Zeichen pro Zeile) getrennt werden.
Der Benutzter soll immer weitere Textdateien angeben können, die dann tokenisiert und dann auf alle zusammengesetzten Wörter hin untersucht werden
und das Programm soll diese Wörter auch noch analysieren, also ausgeben ob es zB aus zwei Nomen zusammengesetzt ist.
Mein Problem ist jetzt die Herangehensweise an den Algorithmus mit regulären Ausdrücken.
Ich hab jetzt mit dem tokenisieren angefangen, allerdings habe ich noch keinen Ansatz gefunden, bei dem die Satzzeichen nicht rausgelöscht, sondern als
einzelnes Token wahrgenommen werden.
Code: Alles auswählen
# coding=utf8
from __future__ import division
import codecs
import re
korpus = codecs.open('finn.txt','Ur','utf-8').read()
outfile = open("finn.tokenisiert.txt", "a")
re.split(r'\W+', korpus)
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Dateien solltest Du immer mittels ``with`` öffnen:
Wieso willst Du den Text splitten? Wieso suchst Du nicht einfach nach allen Wörter und Satzzeichen?
Code: Alles auswählen
with open(...) as handler:
# handler ist hier das File object
# die Datei wird automatisch geschlossen
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Danke schonmal dafür!
Ich muss den Text splitten, weil ich auch zusammengesetzte Wörter suchen muss, die aus Teilwörtern bestehen hinter denen in der Textdatei ein Komma oder ein Punkt ist.
Ich weiß nicht, ob das jetzt doof ist oder so... :K
Wie genau meinst du denn das mit dem Suchen? Dann müsste ich doch im Prinzip die ganze Datei suchen?!
Ich muss den Text splitten, weil ich auch zusammengesetzte Wörter suchen muss, die aus Teilwörtern bestehen hinter denen in der Textdatei ein Komma oder ein Punkt ist.
Ich weiß nicht, ob das jetzt doof ist oder so... :K
Wie genau meinst du denn das mit dem Suchen? Dann müsste ich doch im Prinzip die ganze Datei suchen?!
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Ja, aber wieso muss es da `re.split` sein? Mittels `re.finditer` / `re.findall` suchst Du Dir eben die passenden Sachen zusammen. Als Ergebnis erhältst Du die Suchergebnisse doch auch "separiert".Myra2907 hat geschrieben: Ich muss den Text splitten, weil ich auch zusammengesetzte Wörter suchen muss, die aus Teilwörtern bestehen hinter denen in der Textdatei ein Komma oder ein Punkt ist.
Hier mal ein Beispiel (in Python 3) mit Deinem Ersten Posting als Eingabe (`text`):
Code: Alles auswählen
for token in re.finditer(r"\w+|[\.\?,;!]", text):
print(token.group(), end="|")
>>> Hallo|.|Hallo|.|Hallo|.|Ich|bin|neu|in|diesem|Forum|
und|brauche|direkt|mal|eure|Hilfe|.| # usw
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert