Seite 1 von 1
Rechtschreibprüfung automatisieren?
Verfasst: Donnerstag 14. April 2011, 10:50
von pan
Hallo beisammen,
habt ihr schonmal an so etwas gearbeitet oder gibts vielleicht (fertige) Libs?
Meine Idee war, dass ich mit einer Lookupliste (entweder themenspezifisch selbst gebaut, oder z.B. die von OpenOffice) versuche auf Genauigkeit zu matchen.
Wie aber zB reparieren und preparieren unterscheiden?
Habt ihr Anregungen?
Danke
Re: Rechtschreibprüfung automatisieren?
Verfasst: Donnerstag 14. April 2011, 10:59
von BlackJack
@pan: "reparieren" und "preparieren" lassen sich ganz einfach an dem 'p' am Anfang unterscheiden.
Warum musst Du die überprüfen? Die sind ja beide richtig geschrieben. Falls Du wissen willst ob das richtige Wort im Text verwendet wurde, müsste der Rechner den Inhalt und Sinn von Texten verstehen können. Das ist schwierig bis unmöglich 100%ig zu machen. Da wird seit Jahrzehnten dran geforscht. Wenn Du das hinbekommst, wirst Du berühmt.

Re: Rechtschreibprüfung automatisieren?
Verfasst: Donnerstag 14. April 2011, 11:05
von /me
BlackJack hat geschrieben:@pan: "reparieren" und "preparieren" lassen sich ganz einfach an dem 'p' am Anfang unterscheiden.
Warum musst Du die überprüfen? Die sind ja beide richtig geschrieben
Im Prinzip ja, bis auf "preparieren" welches "präparieren" geschrieben wird.

Re: Rechtschreibprüfung automatisieren?
Verfasst: Donnerstag 14. April 2011, 11:42
von BlackJack
Oh man, ich glaube ich brauche eine Rechtschreibprüfung und/oder mehr Kaffee.

Re: Rechtschreibprüfung automatisieren?
Verfasst: Donnerstag 14. April 2011, 15:09
von pan
Hi,
mir ist schon klar, dass das nicht ganz so trivial ist und daher wollte ich das Rad ja auch nicht erfinden

Grundsätzlich wäre es ja kein Problem Wörter einfach mit einer LookUp Liste zu matchen und es durch die "Ähnlichsten" zu ersetzen.
Probleme gibt es halt bei Wörtern, die durch einen Schreibfehler wie ein anderes Wort klingen.
Wie zB.
Preparieren und Reparieren. Woher soll der Algorithmus nun wissen, was gemeint ist:
"Ist nur zufällig ein 'p' mir rangerutscht, oder hat man fälschlicherweise 'e' mit 'ä' vertauscht?"
Falls es euch hilft, die Texte habe alle den selben Inhalt (@BlackJack).
Aber gut, verschiebe ich das Projekt erstmal. Hatte mir mal den Wikiartikel zum "natural language processing" durchgelesen und da wurde so beiläufig erwähnt, dass das dazu genutzt wird..
Danke
Re: Rechtschreibprüfung automatisieren?
Verfasst: Donnerstag 14. April 2011, 15:15
von anogayales
Das ganze wird in der Spracherkennung mittels eines n-gramms gelöst. Dazu brauchst du einen riesigen Textkorpus, den du dir aus der Wikipedia zum Beispiel beschaffen kannst.
Dann errechnest du dir die Wahrscheinlichkeiten und dann kannst du einfach mal ein paar Tests machen. Das ganze ist nicht soooo aufwendig. Das schwierigste ist dir erstmal den Textkorpus anzulegen.
Mehr dazu:
http://de.wikipedia.org/wiki/N-Gramm
Grüße,
anogayales
Re: Rechtschreibprüfung automatisieren?
Verfasst: Donnerstag 14. April 2011, 17:30
von BlackJack
@pan: Automatisch ersetzen würde ich da gar nichts -- machen Rechtschreibprüfungen ja in der Regel auch nicht. Die unterkringeln Worte, die sie nicht kennen und bieten dann eine Auswahl an Korrekturmöglichkeiten an. Und da könntest Du einfach alle bekannten Worte anbieten, die einen nicht zu grossen "Abstand" zu dem Unbekannten haben. Ein Stichwort wäre hier die Levenshtein-Distanz. Und `difflib.get_close_matches()` aus der Standardbibliothek könntest Du Dir mal anschauen:
Code: Alles auswählen
In [109]: f = open('/usr/share/dict/ngerman')
In [110]: words = [w.strip().decode('utf-8') for w in f]
In [111]: f.close()
In [112]: difflib.get_close_matches('preparieren', words, 10)
Out[112]:
[u'reparieren',
u'reparierten',
u'reparierend',
u'pr\xe4parieren',
u'repariere',
u'reparierende',
u'pr\xe4parierten',
u'pr\xe4parierend',
u'separieren',
u'reparierte']
Wobei das für meinen Geschmack ein wenig zu langsam ist.
Re: Rechtschreibprüfung automatisieren?
Verfasst: Donnerstag 14. April 2011, 18:42
von sma
anogayales hat geschrieben:Das ganze wird in der Spracherkennung mittels eines n-gramms gelöst. Dazu brauchst du einen riesigen Textkorpus, den du dir aus der Wikipedia zum Beispiel beschaffen kannst.
Der Zufall will es, dass Google genau so einen riesigen Textkorpus besitzt, eine recht gute Rechtschreibprüfung (z.B. in Gmail und Google Docs) implementiert hat und AFAIK auch ein API dafür zur Verfügung stellt. Das müsste man also (Internet-Verbindung vorausgesetzt) nicht selbst implementieren.
Stefan
Re: Rechtschreibprüfung automatisieren?
Verfasst: Freitag 15. April 2011, 11:22
von pan
Hi,
vielen Dank für eure Anregungen!
@BlackJack: Korrekturbestätigungen sind bei mir leider keine Lösung. Es müsste voll automatisiert sein, da das ein Prozess ist, der Daten aus dem Netz im Hintergrund verarbeitet und nur die Ergebnisse bereit stellt.
Außerdem enthält dein Code laut Compiler noch ein Fehler in Zeile 1:
Code: Alles auswählen
In [109]: f = open('PATH')
^
SyntaxError: invalid syntax
Danke auch für den google Tipp, ich werde aber erstmal mit meiner eigenen Liste arbeiten, die um die 30.000 Wörter enthält!
ciao
Re: Rechtschreibprüfung automatisieren?
Verfasst: Freitag 15. April 2011, 11:31
von BlackJack
@pan: Mein Code enthält keine Syntaxfehler sondern ist die Kopie des Inhalts einer Python-Shell. IPython um genau zu sein. Das nach den ``In […]:``\s ist das was ich eingegeben habe und die ``Out […]``\s sind die Antworten vom Interpreter.
Re: Rechtschreibprüfung automatisieren?
Verfasst: Freitag 15. April 2011, 13:22
von pan
hrhr. sorry für die Unterstellung und mein Blindheit.
kenne mich mit Python nicht sonderlich gut aus und hab die [109] für irgeneine Referenz gehalten:)
danke