Urmel: Rechtschreibfehler korrigieren durch Suggest, verschiedene Methoden: Jaro–Winkler distance vs. levenshtein

Beitrag lesen

ich hatte schon mehrere Beiträge zum Thema "Rechtschreibfehler korrigieren" z.B. via Suggestvorschlag. Bisher scheinen zwei Methoden https://en.wikipedia.org/wiki/Jaro–Winkler_distance und https://de.wikipedia.org/wiki/Levenshtein-Distanz die besten Ergebnisse zu liefern.

Es erscheint mir ein irrwitziger Aufwand zu sein, Wortvorschläge alleine durch solche Unterschiedswerte finden zu wollen. Dazu müsstest du jedes geschriebene Wort mit jedem Wort eines Wörterbuchs vergleichen.

Ich zerlege für einen ähnlichen Einsatz das zu prüfende Wort nach einer Normalisierung (in der Regel einfach Kleinschreibung) in Teile aus jeweils drei Buchstaben. Das Ausgangswort "Testwort" wird so zur Gruppe Tes, est, stw, two, wor, ort. Diese Gruppe suche ich in einer Tabelle, in der das Lexikon (also die Menge aller bekannten Wörter) auf gleiche Weise zerlegt wurde. Je mehr Übereinstimmungen ein Lexikon-Wort hat, desto eher passt es zum Ausgangswort.

Die Lexikonstabelle hat zwei Spalten, das Wort und das Wortteil. Ein SQL-Befehl sieht vereinfacht so aus:

select wort, count(*) as wert from lexikon where teil in ("Tes", "est", "stw", "two", "wor", "ort") having wert > 0 order by wert desc;

(wert sollte statt lediglich größer Null eher größer der halben Anzahl der Wortteile sein, um die Anzahl der weit abliegenden Treffer zu minimieren. wort ist zudem nicht das Wort selbst, sondern ein Index, der in die eigentliche Worttabelle zeigt; für "Testwort" sechsmal "Testwort" als solches in eine Tabelle zu schreiben ist Platzverschwendung und erschwert obendrein das Gruppieren.)

Die Suche nach Wortvorschlägen ist rasant und bedarf kaum noch Korrekturmaßnahmen. Wenn man unbedingt will, können zur Verfeinerung auf die Vorschläge noch irgendwelche Algorithmen, wie von dir erwähnt, angewendet werden.

Varianten speichern statt der Drei-Buchstaben-Teile zusätzlich Zwei- oder Vier-Buchstaben-Teile. Es können Wortanfänge und -enden auch höher bewertet werden als Mittelteile.