[Talk-at] OSM Nominatim Adress Suche in Wien

Friedrich Volkmann bsd at volki.at
Sat Feb 17 11:34:55 UTC 2018


On 17.02.2018 10:17, Rudolf Mayer wrote:
> Aber ja, es gibt imho keine Gute website, die dir das Google Maps 
> Webinterface ersetzt. Was dort vor allem gut ist - die Suche ist nicht auf 
> exakte Treffer limitiert - es werden Tippfehler in richtige Lösungen 
> korrigiert, und auch wenn die Schreibweise minimal anders ist als die Suche 
> (z.b. kein "-" drinnen irgendwo) funktioniert es auf osm.org gleich mal 
> nicht. Autocomplete/Suggestion gibt es sowieso nicht. Aber das ist kein 
> Problem der *Daten* ...

Ja, es gibt einen dringenden Bedarf nach einer alternativen 
OSM-Suchmaschine, die nicht auf schnelle Aktualisierung, sondern auf 
Richtigkeit und Vollständigkeit der Ausgaben ausgelegt ist. Es ist schon 
komisch, dass das noch keiner gemacht hat. Es hat nicht jeder die Ressourcen 
für eine Auswertung über die weltweiten OSM-Daten, aber zumindest eine 
Suchmaschine für Österreich sollte machbar sein.

Ich denke dabei an ein zweistufiges System, bei dem die Daten in einem 
nächtlichen (oder wöchentlichen) Cronjob erst mal in eine suchbare Form 
gebracht werden, damit zur Laufzeit über Indexes auf die aufbereiteten Daten 
zugegriffen werden kann. Wie bei einem Data warehouse. Der erste Schritt ist 
sozusagen die Denormalisierung, da werden Eigenschaften (Adresse, access 
usw.) von Flächen auf Teilflächen und Nodes vererbt (kopiert) und von 
Relationen auf die members vererbt (z.B. Adressen) oder umgekehrt (Lage) 
oder die members zusammengehängt (type=route, type=multilinestring).

Dann werden Strichpunktwürste (alt_name="Roßauer Lände; Rossauerlände; 
Roßauerlände",  amenity="restaurant;cafe") werden aufgelöst.

Nun werden Indexes angelegt, die schon darauf ausgelegt sind, bei der Suche 
auch abweichende Schreibweisen zu ermöglichen. In Oracle gibt es so sachen 
wie function-based indexes, eine soundex() Funktion für phonetische Suche 
und eine regexp_like() Funktion; keine Ahnung, wie das in anderen 
Datenbanken geht oder wie Google das macht ?!?
Am besten werden die Werte in den Suchfeldern schon alle in lauter Klein- 
oder lauter Großbuchstaben umgewandelt, Whitespace und Bindestriche 
entfernt, ß in ss umgewandelt usw., damit bei den Suchanfragen keine 
komplizierten regular expressions mehr nötig sind. Gleiches gilt für 
Abkürzungen (Straße=Strasse=Str.). Manche Werte von short_name oder alt_name 
(s.o.) gleichen sich dabei an und können gestrichen werden.

Zur Laufzeit der Abfragen sind in den den regular expressions dann nur noch 
jene Fälle nötig, die im ersten Schritt noch nicht aufgelöst werden konnten.

Wenn eine Anfrage kein Ergebnis liefert, könnte man zum Abfangen einfacher 
Rechtschreibfehler eine nach der anderen Möglichkeit durchgehen, in 
Reihenfolge der Wahrscheinlichkeit unter Berücksichtigung der Performanz der 
Abfragen.
z.B. "stephanplatz" (s fehlt)
1) Buchstabe zuviel?
-> street in (tephanplatz, sephanplatz, ...)
2) Buchstaben vertauscht?
-> street in (tsephanplatz, setphanplatz, ...)
3) Buchstabe anders?
-> street like _tephanplatz or street like s_ephanplatz or ...
4) Buchstabe fehlt
-> street like _stephanplatz or street like s_thephanplatz or ... => bingo!
5) nach den ersten n-1, n-2... Zeichen suchen:
-> street like stephanplat%
    street like stephanpla%
    ...

Ich hab leider keine Ressourcen (Hardware, Bandbreite, für einen Alleingang 
auch die Zeit) um so was zu implementieren, aber vielleicht wer von euch?

-- 
Friedrich K. Volkmann       http://www.volki.at/
Adr.: Davidgasse 76-80/14/10, 1100 Wien, Austria



More information about the Talk-at mailing list