klausschreiber
Well-known member
- 6 Mai 2006
- 247
- 8
Hallo,
ich möchte mit PHP eine "Meinten Sie" Funktion umsetzen. Wie umfangreich die sein soll, weiß ich noch nicht genau, kommt wohl auch auf die Umsetzungsmöglichkeiten drauf an.
Es gibt in mySQL ja den soundex-Algorithmus oder man könnte auch selber den Metaphone Algorithmus implementieren, aber die sind ja für die englische Sprache optimiert und finden auch normale Vertipper vermutlich nicht so gut, wie ein Distanzalgorithmus ala Levenshtein. Aber den Levenshtein kann man ja nicht performant auf eine komplette Wortdatenbank anwenden (lediglich die Firma exorbyte hat es wohl geschafft, eine Art Levenshtein Algorithmus zu entwickeln, der 2,5 Millionen Wörter in unter 10 Millisekunden vergleichen kann).
Ich habe mir auch mal die Wörterbücher von OpenOffice angeschaut, da scheint es eine Textdatei mit allen einzelnen Wörtern in der Grundform zu geben, eine mit Zusammensetzungen und dann noch eine Datei mit Affixen. Hinter den Wörtern ist teilweise etwas angegeben, was nach Wortart oder so aussieht, leider habe ich nichts genaueres gefunden. Wollte auch mal den Source Code anschauen, aber hab die Stelle nicht gefunden und war außerdem zu doof, ne Doku zu finden^^.
Habe in dem Kontext auch noch etwas von einem KD-Baum gelesen, allerdings dazu auch noch nichts wirklich aufschlussreiches gefunden.
Meine Idee bisher ist, die Grundformen in der Datenbank zu speichern (bei häufig verwendeten Wörtern vielleicht auch die Konjugationen/Deklinationen). Dann will ich einen deutschen Stemmer Algorithmus auf das Wort anwenden (z.B. den hier) und dieses herauskommende Wort in eine Zahl umwandeln, wobei ähnlicher Wörter ähnliche Zahlen haben. So soll man dann in der Datenbank durch Suche nach einer Zahlenrange eventuell passende Wörter finden. Falls ich ein komplettes Wörterbuch integrieren will und nicht nur ein paar Fachbegriffe für die Suche, würde ich die aus der Datenbank zurückgegeben Grundformen vielleicht noch per Algorithmus deklinieren/konjugieren und auf diese wenigen Wörter dann den Levenshtein Algorithmus anwenden (Ich könnte natürlich auch alle Konjugationen und Deklinationen in der Datenbank speichern, aber das wären dann halt 20 Millionen Einträge oder so).
An einem Algorithmus, der ähnliche Wörter in ähnliche Zahlen umwandelt, habe ich mich schon rumprobiert. Hat auch mit ein paar Beispielen geklappt, aber genau habe ich es noch nicht getestet. Aber es müssen dafür doch auch schon Lösungen existieren, da ja jedes Programm eine Rechtschreibprüfungen hat und auch Google so eine "Meinten Sie" Funktion. Ich glaube nicht, dass die sich alle auf soundex verlassen.
Mir ist klar, dass die Levenshtein Umsetzung von exorbyte wohl nicht öffentlich zu finden ist, aber kennt jemand andere gute Umsetzungen bzw. hat Ideen?
Danke und sorry für den langen Text^^,
Klaus
ich möchte mit PHP eine "Meinten Sie" Funktion umsetzen. Wie umfangreich die sein soll, weiß ich noch nicht genau, kommt wohl auch auf die Umsetzungsmöglichkeiten drauf an.
Es gibt in mySQL ja den soundex-Algorithmus oder man könnte auch selber den Metaphone Algorithmus implementieren, aber die sind ja für die englische Sprache optimiert und finden auch normale Vertipper vermutlich nicht so gut, wie ein Distanzalgorithmus ala Levenshtein. Aber den Levenshtein kann man ja nicht performant auf eine komplette Wortdatenbank anwenden (lediglich die Firma exorbyte hat es wohl geschafft, eine Art Levenshtein Algorithmus zu entwickeln, der 2,5 Millionen Wörter in unter 10 Millisekunden vergleichen kann).
Ich habe mir auch mal die Wörterbücher von OpenOffice angeschaut, da scheint es eine Textdatei mit allen einzelnen Wörtern in der Grundform zu geben, eine mit Zusammensetzungen und dann noch eine Datei mit Affixen. Hinter den Wörtern ist teilweise etwas angegeben, was nach Wortart oder so aussieht, leider habe ich nichts genaueres gefunden. Wollte auch mal den Source Code anschauen, aber hab die Stelle nicht gefunden und war außerdem zu doof, ne Doku zu finden^^.
Habe in dem Kontext auch noch etwas von einem KD-Baum gelesen, allerdings dazu auch noch nichts wirklich aufschlussreiches gefunden.
Meine Idee bisher ist, die Grundformen in der Datenbank zu speichern (bei häufig verwendeten Wörtern vielleicht auch die Konjugationen/Deklinationen). Dann will ich einen deutschen Stemmer Algorithmus auf das Wort anwenden (z.B. den hier) und dieses herauskommende Wort in eine Zahl umwandeln, wobei ähnlicher Wörter ähnliche Zahlen haben. So soll man dann in der Datenbank durch Suche nach einer Zahlenrange eventuell passende Wörter finden. Falls ich ein komplettes Wörterbuch integrieren will und nicht nur ein paar Fachbegriffe für die Suche, würde ich die aus der Datenbank zurückgegeben Grundformen vielleicht noch per Algorithmus deklinieren/konjugieren und auf diese wenigen Wörter dann den Levenshtein Algorithmus anwenden (Ich könnte natürlich auch alle Konjugationen und Deklinationen in der Datenbank speichern, aber das wären dann halt 20 Millionen Einträge oder so).
An einem Algorithmus, der ähnliche Wörter in ähnliche Zahlen umwandelt, habe ich mich schon rumprobiert. Hat auch mit ein paar Beispielen geklappt, aber genau habe ich es noch nicht getestet. Aber es müssen dafür doch auch schon Lösungen existieren, da ja jedes Programm eine Rechtschreibprüfungen hat und auch Google so eine "Meinten Sie" Funktion. Ich glaube nicht, dass die sich alle auf soundex verlassen.
Mir ist klar, dass die Levenshtein Umsetzung von exorbyte wohl nicht öffentlich zu finden ist, aber kennt jemand andere gute Umsetzungen bzw. hat Ideen?
Danke und sorry für den langen Text^^,
Klaus