Yeti: Vielleicht mittels Soundex-Algorithmus?

Beitrag lesen

Hi,

Na, so rudimentär ist die schon gar nicht mehr, viel mehr gibt's da nämlich kaum noch.

Okay, dann habe ich wohl zu tief gestapelt. Das war nämlich die allererste Vorgehensweise, die mir einfiel, als ich auf die soundex-Funktion in PHP stieß. In einem Userkommentar stand dann noch der Hinweis auf levenshtein(), womit der Server fast schon zum "Gedankenlesen" gebracht werden könnte. ;-)
Da ich aber immer noch ein paar falsche Hits hatte, hab ich das für imperfekt gehalten. Allerdings für meine Zwecke hat es gereicht (ich überprüfe, ob es die entsprechende Firma schon gibt, also z.B. BMW = Bayerische Motorenwerke AG o.ä.). Da ist ein Fehler nicht allzu tragisch, zur Not müssen erkannte Duplikate manuell gelöscht werden.

Mmh, nein, ganz so ist das nicht. Dieser Algorithmus (US. Patent #1261167 (von 1918) und #1435663 (von 1922)) wurde zum Gebrauch im US-Amerikanischem Zensus erstellt und mußte auf die dort vorkommenden, aus fast dem gesamtem weltlichem Sprachraum stammenden Namen passen. Dadurch funktioniert er allgemein recht gut, auch wenn er bei indo-germanischem Sprachen stets ein klein wenig besser ist, dafür aber leichte Schwierigkeiten im finnisch-ugurischen hat.
Deshalb ist er auch für den allgemeinen Gebrauch recht gut geeignet. Aufgrund einiger, teilweise künstlicher, der damaligen Technik geschuldeter Beschränkungen wie zum Beispiel die begrenzte Wort- und Hashlänge gab es eine Reihe Verbesserungsversuche auch in sprachlich eingrenzender Weise. "Metaphone", "double Metaphone", "Phonem" und jede Menge anderer. Selbst ich habe mal einen gebastelt ;-)

Okay, hab mich da nicht wirklich eingearbeitet. Mir kam es aber so vor, als wäre das speziell auf eine Sprache angepasst.

Wo liegt die Beschränkung im internationalem Einsatz? In der Sprachverwandschaft: je weiter die individuellen Sprachen auseinandergelaufen sind, desto schwieriger wird's. Stadtnamen werden jedoch falls keine politischen Gründe dagegen stehen meist phonetisch übersetzt.
München -> munchen -> M525 (de)
Munich  -> munich  -> M52  (en)
Múnich  -> munich  -> M52  (es)
мюнхен   -> mjunchen (ISO) -> M2525 (ru)
мюнхен   -> múnchen (ISO Alternative) -> munchen -> M525 (ru)

Wie gesagt, einfach mal ausprobieren. Wollte nur darauf hinweisen, dass es keine perfekten Ergebnisse liefert und man mit Ungenauigkeiten arbeiten muss.

Nö, Soundex o.ä., also eine imperfekte Hashfunktion ist schon ganz gut. Über das Ergebnis, also den Hash kann dann eine Ähnlchkeitsanalyse geführt werden. Sei es eine Variation über die Hammingdistanz wie der Damerau-Levenshtein-Algorithmus, eine longest-common-substring/subsequence o.ä.

Okay, dann soll er das machen. ;-)

Außerdem liefern manche Worte den gleichen Wert zurück, obwohl sie völlig unterschiedlich sind (rest und reset).

Nun, genau das ist ja auch der Witz daran!

Bei Städtenamen mag das stimmen, wenn du aber z.B. übersetzen willst und dann für "I rested on the way" bekommst "Ich startete auf dem Weg neu", dann ist das falsch. ;-)
Aber stimmt, für seine Zwecke ist genau das der Witz daran.

Wichtiger beim Vergleich ist das, was ich bei meiner Liste oben angestellt habe: Minimieren der Unterschiede der Zeichensätze durch Überführung (hier: unter Verlust) in einen gemeinsamen Zeichensatz. Die Wahrscheinlichkeiten für eine Treffer sind sehr hoch, da der benötigte Datensatz recht klein ist. Es wird ja nicht der Name jedes Kuhdorfs in allen Sprachen benötigt, sondern nur die der Orte, die tatsächlich auch benutzt werden.

D'accord.

Der Yeti

--
Habe nun, ach! WInfo, BWL, und Mathe, Und leider auch Info!
Durchaus studiert, mit heißem Bemühn. Da steh' ich nun, ich armer Thor!
Und bin so klug als wie zuvor!
sh:( fo:| ch:? rl:? br:< n4:& ie:( mo:| va:| de:[ zu:) fl:| ss:) ls:< js:|