[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