Rechtschreibprüfung automatisieren?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
pan
User
Beiträge: 9
Registriert: Freitag 11. März 2011, 15:29

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
BlackJack

@pan: "reparieren" und "preparieren" lassen sich ganz einfach an dem 'p' am Anfang unterscheiden. :-P

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. :-)
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

BlackJack hat geschrieben:@pan: "reparieren" und "preparieren" lassen sich ganz einfach an dem 'p' am Anfang unterscheiden. :-P

Warum musst Du die überprüfen? Die sind ja beide richtig geschrieben
Im Prinzip ja, bis auf "preparieren" welches "präparieren" geschrieben wird. :mrgreen:
BlackJack

Oh man, ich glaube ich brauche eine Rechtschreibprüfung und/oder mehr Kaffee. :oops:
pan
User
Beiträge: 9
Registriert: Freitag 11. März 2011, 15:29

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
anogayales
User
Beiträge: 456
Registriert: Mittwoch 15. April 2009, 14:11

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
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.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

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
pan
User
Beiträge: 9
Registriert: Freitag 11. März 2011, 15:29

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
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.
pan
User
Beiträge: 9
Registriert: Freitag 11. März 2011, 15:29

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
Antworten