Rechtschreibkorrektur für die Datennormalisierung in Java

8

Ich bin auf der Suche nach einer Java-Bibliothek, um eine anfängliche Rechtschreibprüfung / Datennormalisierung bei benutzergenerierten Textinhalten durchzuführen. Stellen Sie sich die Interessen vor, die in einem Facebook-Profil eingegeben wurden.

Dieser Text wird zu einem bestimmten Zeitpunkt (vor oder nach der Korrektur des Zauberspruchs, was auch immer besser funktioniert) und einige davon als Schlüssel für die Suche nach (exakte Übereinstimmung) verwendet. Es wäre schön, Rechtschreibfehler und ähnliches zu reduzieren, um mehr Matches zu produzieren. Es wäre noch besser, wenn die Korrektur auf Token, die länger als nur ein Wort sind, z.B. "trinking coffee" würde "Kaffee trinken" und nicht "Kaffee denken".

Ich habe die folgenden Java-Bibliotheken zur Rechtschreibkorrektur gefunden:

  1. JAZZY scheint nicht aktiv entwickelt zu werden. Außerdem scheint der auf Wörterbüchern basierende distanzbasierte Ansatz aufgrund der Verwendung von Nicht-Standardsprache in sozialen Netzwerkprofilen und Mehrwort-Token unzureichend zu sein.
  2. APACHE LUCENE scheint eine statistische Rechtschreibprüfung zu haben, die viel besser geeignet sein sollte. Frage hier würde wie ein gutes Wörterbuch erstellen? (Wir verwenden Lucene nicht, sonst gibt es keinen Index.)

Irgendwelche Vorschläge sind willkommen!

    
dareios 23.02.2010, 10:45
quelle

5 Antworten

10

Was Sie implementieren möchten, ist kein Korrektor, sondern eine unscharfe Suche. Peter Norvigs Aufsatz ist ein guter Ausgangspunkt, um aus Kandidaten, die mit einem Wörterbuch verglichen werden, eine unscharfe Suche zu erstellen.

Alternativ werfen Sie einen Blick auf BK-Trees.

Ein N-Gram-Index (von Lucene verwendet) liefert bessere Ergebnisse für längere Wörter. Der Ansatz, Kandidaten bis zu einer bestimmten Bearbeitungsdistanz zu erzeugen, wird wahrscheinlich gut genug für Wörter im normalen Text funktionieren, aber nicht gut genug für Namen, Adressen und wissenschaftliche Texte. Es erhöht jedoch Ihre Indexgröße.

Wenn Sie die Texte indiziert haben, haben Sie Ihren Textkorpus (Ihr Wörterbuch). Nur was in Ihren Daten enthalten ist, kann trotzdem gefunden werden. Sie müssen kein externes Wörterbuch verwenden.

Eine gute Quelle ist Einführung in Information Retrieval - Wörterbücher und toleranter Abruf Es gibt eine kurze Beschreibung der kontextsensitiven Rechtschreibkorrektur.

    
Thomas Jung 23.02.2010, 12:20
quelle
2

Im Hinblick darauf, einen Lucene-Index als Grundlage für eine Rechtschreibprüfung zu füllen, ist dies ein guter Weg, um das Problem zu lösen. Lucene hat eine aus der Box Rechtschreibprüfung , die Sie verwenden können .

Es gibt viele Wörterbücher im Internet, die Sie herunterladen und als Grundlage für Ihren Lucene-Index verwenden können . Ich würde vorschlagen, diese mit einer Anzahl von domänenspezifischen Texten sowie z.B. Wenn Ihre Benutzer Mediziner sind, dann ergänzen Sie vielleicht das Wörterbuch mit Quelltexten aus medizinischen Thesen und Publikationen.

    
Joel 23.02.2010 12:32
quelle
0
duffymo 23.02.2010 10:52
quelle
0

Sie können das Gutenberg-Projekt oder das Internet Archive für viele und viele Korpus.

Ich denke auch, dass der Wiktionary Ihnen helfen könnte. Sie können sogar einen direkten Download machen.

    
malaverdiere 23.02.2010 11:05
quelle
0

Ссылка ist eine gute Java-Bibliothek zur Rechtschreibprüfung, aber ich stimme Thomas Jung zu möglicherweise nicht die Antwort auf Ihr Problem.

    
Michael Munsey 03.04.2010 06:24
quelle

Tags und Links