ubuntuusers.de

Algorithmus für Vertipper/ue statt ü bei Suche?

Status: Gelöst | Ubuntu-Version: Ubuntu 12.04 (Precise Pangolin)
Antworten |

dr.gonzo

Avatar von dr.gonzo

Anmeldungsdatum:
17. Oktober 2004

Beiträge: 252

Hallo,

ich muß eine Adressuche implementieren und mich stört es, dass ich z.b. den Strassennamen korrekt schreiben muß und bei einer Suche nach "Hafenstraße" nicht "Hafenstrasse" gefunden wird. Kennt ihr vernünftige Algorithmen, die man dafür benutzen kann? Ich bin nach einiger Recherche bei http://de.wikipedia.org/wiki/K%C3%B6lner_Phonetik gelandet, ein auf den deutschen Sprachraum abgestimmer http://de.wikipedia.org/wiki/Soundex-Algorithmus.

Ich hab das getestet, aber die Ergebnisse sind noch nicht zufriedenstellend. Gibt es da noch etwas besser geeignetes? Zumal ich mit diesem Algortihmus nicht die Möglichkeit habe, nur nach Teilstrings zu suchen.

Kerberos

Anmeldungsdatum:
18. Juni 2007

Beiträge: 330

Ich kenne bloß das hier: http://norvig.com/spell-correct.html

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13205

Kenne mich leider auch nicht detailliert aus, aber da gibt es sicherlich eine Menge.

Einstiegspunkte

Eine relativ einfache Variante wäre diese: Du nutzt eine Suche nach regulären Ausdrücken. Dafür bearbeitest Du die Eingabe so, dass z.B. "ss", "ß" und "s" durch den regulären Teilausdruck "(s{1,2}|ß) ersetzt werden. Ähnliches machst Du mit "ä", "Ö" usw.

Ciao

robert

Kinch

Anmeldungsdatum:
6. Oktober 2007

Beiträge: 1261

Benutz einfach eine Normalisierung. Sämtliche Varianten von Straße, also Strasse, str. etc pp werden beim Einleisen auf eine einzige Variante gemappt. Sowohl beim Einlesen der Datenbank, als auch des Queries. Zum Mapping, kannste einfach reguläre Ausdrücke benutzen.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13205

Kinch schrieb:

Benutz einfach eine Normalisierung. Sämtliche Varianten von Straße, also Strasse, str. etc pp werden beim Einleisen auf eine einzige Variante gemappt. Sowohl beim Einlesen der Datenbank, als auch des Queries. Zum Mapping, kannste einfach reguläre Ausdrücke benutzen.

Man kann das machen, sollte dann aber den ursprünglichen Text behalten. Mit anderen Worten: ein zusätzliches Feld einführen, das den normalisierten Suchtext enthält. Das wäre dann auch die Spalte, auf die man den Index setzt.

Ciao

robert

dr.gonzo

(Themenstarter)
Avatar von dr.gonzo

Anmeldungsdatum:
17. Oktober 2004

Beiträge: 252

Hallo,

danke für die Antworten, sie scheinen darauf hinzudeuten, daß es "den" Algorithmus nicht gibt, da hab ich also nichts übersehen. Die Idee einer zusätzlichen Spalte hatten wir auch schon bei Kölner Phonetik, aber dort waren, wir ich schon schrieb, die Ergebnisse nicht zufriedenstellend. Ich probier nochmal den Levenshtein-Algorithmus aus den Wikipedia-Links aus, wenn der Aufwand zum Testen nicht besonders hoch ist. Und ansonsten wird es zumindest eine Suche nach regulären Ausdrücken, um zumindest "Strasse" wie auch "Straße" finden zu können.

Grüße, Jörg

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

dr.gonzo schrieb:

... Und ansonsten wird es zumindest eine Suche nach regulären Ausdrücken, um zumindest "Strasse" wie auch "Straße" finden zu können.

Das ließe sich ja auch automatisch aufspalten, so dass Du direkt nach allen möglichen Varianten suchst:

Süße  ->  Süße / Sueße
    Süße  ->  Süße / Süsse
    Sueße  ->  / Sueße / Suesse

indem Du alle fraglichen Buchstaben(kombinationen) automatisch in ihre Varianten expandierst.

Obwohl, wenn Du direkt mit Regulären Ausdrücken suchst, wäre das sehr viel einfacher. Nur wie ? - vielleicht so, allerdings etwas unscharf ? :

Süße  ->  S[uü]e?[sß][sz]?e

track

Antworten |