Automatische Korrektur von Fehlern in addr:* (1) - Strasse, Str. & Co.

Ich hab just for fun mal ne Karte draus gemacht: http://test.be2art.de/OSM/funny-addrs.php

In der Karte habe ich diesen Weg gefunden:
http://www.openstreetmap.org/browse/way/141504408/history

Warum korrigiert Wall-E den nicht? Das sollte doch eine einfache Korrektur von Strasse sein.

Gut aufgepaßt :slight_smile:
Das war ein Timeout bei der Kommunikation mit dem API-Server, steht im Logfile als: ERROR while processing way #141504408
Die Nachbarn mit dem gleichen Fehler wurden korrigiert. Dieser hier folgt beim nächsten Lauf - versprochen.

Stehen in der “wird schon stimmen”-Liste nur IDs von OSM-Objekten, oder gibt es auch Ausnahmeregeln?

Ich frage mich nämlich warum dort Adressen wie diese nicht auftauchen: http://www.openstreetmap.org/browse/way/119163698

Jein. Die “wird schon stimmen”-Liste enthält tatsächlich nur IDs, aber “Straße 67” wird schon einen Schritt früher aussortiert.

Das funny_addr-Filterprogramm reagiert unter anderem auf Zahlen in addr:street, kennt aber eine Reihe von Ausnahmen. Neben “Straße des 1. März”, “An der alten B 23”, “Autobahn 45 Ost” werden auch “Straße 67” und “Privatstraße 89” verworfen. Das alles natürlich per Regex:

/(Straße|Platz) des [[:digit:]]{1,2}\\. (Januar|Februar|März|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember)/
/(An der (alten )?)?([ABLK] ?|((Bundes|Landes|Kreis)straße) )[[:digit:]]+/
/(An der )?(BAB( A)? *|Autobahn (A ?)?|A ?)[[:digit:]]+( +\\(?(Nord|Ost|SüdWest)(seite)?\\)?)?/
/(Straße|Privatstraße) [[:digit:]]+/
/[[:digit:]]+\\. [[:alpha:]äöüß -]+/
/[[:digit:]]+er Straße/

Daneben gibt es noch “spezielle” Ausnahmen: zum einen solche, wo ich eigentlich die betroffenen Objekte einzeln in die “wird schon stimmen”-Liste packen sollte (scheitert bislang an Faulheit), zum anderen eine Ausnahme für die eigenwilligen addr:street in Mannheim.

Verstehe. Sieht soweit auf jeden Fall ganz sinnvoll aus.

Ich habe noch eine Kleinigkeit geändert: “str” und “str.” werden nicht nur vor Leerzeichen und Stringende expandiert, sondern auch vor einer Ziffernfolge; in diesem Fall wird zusätzlich ein Leerzeichen eingefügt. Mit etwas Glück gelingt dann im nächsten Schritt auch die Zerlegung von Straße und Hausnummer, wie im Fall von Eisenbahnstr.8 (die Adresse ist freilich in verschiedenen Varianten insgesamt viermal vorhanden) oder Sudetenstr.24.

Neues von Wall·E. Strase und StraSe sind jetzt im Ersetzungskatalog; außerdem wird addr:street in jedem Fall von überschüssigem Leerraum (vorne/hinten) befreit, nicht nur nach einer anderen Korrektur. (Inzwischen werden addr:street und die name-Tags von highway=*-Wegen durch dieselbe Funktion bearbeitet, für diese gilt also gleiches.) Die geplante Leerraum-Beseitigung wird für diese Tags nun also für Objekte, die im jeweiligen Filter landen, vorweggenommen. Das Filterprogramm für Adresskorrekturen sucht nun auch ausdrücklich nach solchen Objekten - daher kommt die heutige Schwemme von Bearbeitungen.

Bei der Gelegenheit habe ich auch ein paar Fehler ins Logging und den Programmablauf eingebaut. Falls noch jemand das Log verfolgt und sich über die vielen “looks suspicious”-Warnungen heute gewundert hat: die kommen daher. Das Problem ist behoben, auch wenn es ein wenig gedauert hat (reicht ja nicht, daß die OSM-DB hinüber war und auf dem Toolserver der crond kaputt ist, vorhin hat auch noch der Login-Server gestreikt).

Eine weitere Neuerung betrifft das, was ich im Parallelfaden neulich angedeutet hatte:

Sowohl bei addr:city als auch bei addr:street versucht Wall·E jetzt “komische” Werte im Bedarfsfall zu korrigieren. Komisch heißt hier: beginnt mit einem Kleinbuchstaben, das ist aber eventuell noch ausbaufähig. Der Korrekturversuch läuft so ab: zunächst wird Leerraum zwischen den Wörtern auf je genau ein Leerzeichen normalisiert (also mehrere Leerzeichen zusammengeschrumpft, Tabs etc. ersetzt); anschließend werden die Wörter selbst “kapitalisiert” (erster Buchstabe groß, übrige klein) - ausgenommen Präpositionen und Artikel, das erste Wort jedoch immer.
Anschließend kommt der wichtigste Schritt: der Vorschlag für das geänderte Tag wird mit der Overpass API abgeglichen. Bei der Änderung von addr:city frage ich die Overpass API, ob das bearbeitete Objekt innerhalb einer area mit passendem Namen liegt; im Fall von addr:street, ob in der Nähe eine Straße des jeweiligen Namens vorhanden ist. Nur bei positivem Ergebnis wird die Ersetzung durchgeführt.
Weil diese neuen Korrekturprozesse noch wenig erprobt sind und ich die Adresskorrekturen bald in den vollautomatischen Betrieb überführen will, schreiben sie eine dicke Warnung ins Log. Ich denke allerdings, daß dank Overpass API eigentlich nichts schief gehen kann.

Eine erfolgreiche Korrektur sieht so aus (bisher einziges Beispiel):

editing node #2218482952, http://www.openstreetmap.org/browse/node/2218482952
	addr:street tag modified: " Beim unteren Tor " -> "Beim unteren Tor"
	addr:street tag modified: "Beim unteren Tor" -> "Beim Unteren Tor"
	 --- warning: this is an experimental feature ---

Link zum Knoten: http://www.openstreetmap.org/browse/node/2218482952

Eine versuchte, aber nach Overpass-API-Befragung abgebrochene Korrektur ist bisher real noch nicht vorgekommen, sähe aber so aus (gleiches Objekt mit künstlich eingebautem, anderem Fehler):

	--- note: attempted modification of addr:street tag: "Beim un teren Tor" -> "Beim Un Teren Tor" discouraged by result of Overpass API query; cancelled. ---

Nachtrag: der neue Korrekturprozeß für addr:city ist offensichtlich fehlerhaft. Dank der Kontrolle per Overpass API geht aber in den Daten nichts kaputt.

Soweit ganz schön, aber da gäbe es noch die Straße Im grünen Winkel plus fünf Stichstraßen in einem Bonner Neubaugebiet. Laut Beschluss des Hauptausschusses werden Adjektive in Straßennamen mit kleinem Anfangsbuchstaben geschrieben. Siehe den Auszug aus dem Bonner Straßenkataster. (Gilt glaube ich nur für Neubenennungen.)
Es gibt dazu auch einen länglichen Bug. Da muss ich irgendwann mal vorbei, um die Straßenschilder zu prüfen und dann den Bug schließen zu können.

Wenn du also die Straßen nach dem gleichen Muster korrigierst, werden irgendwann die Straße und dann später die addr:street falsch korrigiert. Aber du pflegst ja eine Ausnahmeliste für die Straßen.

PS: Das scheint bisher der einzige Fall in Bonn zu sein.

Edbert (EvanE)

Mit einer endlich langen Ausnahmeliste wäre man in diesem Fall angesichts der sprachlichen Vielfalt wohl aufgeschmissen. Das von mir oben angegebene Beispiel (“Beim unteren Tor” → “Beim Unteren Tor”) ist übrigens noch vor einer Änderung der Ausführungsbedingung entstanden; nach dieser Änderung wäre hier gar keine Korrektur erfolgt. (Regex-Matching in Emacs geschieht leider standardmäßig “case-insensitive” - selbst mit “[1]” -, wenn man nicht case-fold-search überschreibt).

Aber Deine Befürchtung kann ich Dir nehmen: auf Straßen wird diese Korrektur nicht angewandt (denn wogegen sollte ich die vermeintlich richtige Schreibweise dann abgleichen?). Ferner werden mit der korrigierten Ausführungsbedingung nur addr:street (und addr:city) von Objekten angefaßt, die ohnehin bearbeitet wurden und mit einem Kleinbuchstaben beginnen. addr:street=“Im grünen Winkel” und “Im Grünen Winkel” bleiben also gleichermaßen unberührt. Lediglich bei “im [Gg]rünen [Ww]inkel” würde ein Korrekturversuch zu “Im Grünen Winkel” unternommen. Im Bonner Fall käme dann ein Veto durch die Overpass API-Abfrage, addr:street bliebe unverändert (und würde wenig später im housenumbervalidator auftauchen).

Edit: Hier ist mal ein Beispiel:

editing node #2239737435, http://www.openstreetmap.org/browse/node/2239737435
	addr:street tag modified: "stuttgarterstrasse" -> "stuttgarterstraße"
	--- note: attempted modification of addr:street tag: "stuttgarterstraße" -> "Stuttgarterstraße" discouraged by result of Overpass API query; cancelled. ---
	warning: addr:street tag "stuttgarterstraße" of node #2239737435 still looks suspicious
	warning: no road nearby matching addr:street tag "stuttgarterstraße" of node #2239737435

Wall·E versucht den Kleinbuchstaben am Wortanfang zu korrigieren, findet aber keine “Stuttgarterstraße” - denn die heißt laut OSM (und aller Wahrscheinlichkeit nach korrekt) “Stuttgarter Straße”. Also bleibt es hier bei der “stuttgarterstraße”.

Mit der neuen Korrektur geht es mir primär darum, den Bedarf an nachträglichen manuellen Korrekturen weiter zu reduzieren. Es ist schon häufiger vorgekommen, daß der Roboter an einem Objekte z.B. “Str.” expandiert, Straße und Hausnummer getrennt und die Postleitzahl von “D-” bereinigt, also gleich mehrere Fehler korrigiert hat - aber der klein geschriebene Ortsname oder Straßenname stehengeblieben ist - ärgerlich.

Übrigens ist heute nach wochenlangen Verzögerungen durch eine bunte Folge von vergessenen chmod u+x und ln -s sowie falsch verstandenen bzw. schlecht dokumentierten qsub-Optionen, Programmierfehlern und den Ausfall von cron die Korrektur von Straßennamen erstmals vollautomatisch gelaufen. (Kein Aprilscherz.) Zukünftig geht es im Rhythmus 07., 17., 27. weiter.

Nachtrag: Das Problem mit der analogen Korrektur von addr:city ist nach längerer Suche behoben. Zu schädlichen Bearbeitungen ist es nicht gekommen, es steht lediglich eine Menge Unfug im Log. Auch die heutige Schwemme von Änderungssätzen geht größtenteils auf die Leerraumbeseitigung zurück.


  1. [:lower:] ↩︎

OK, wie immer hast du die Dinge gründlich durchdacht, bevor du sie realisierst.
Da nur bei addr:street die Kleinbuchstaben korrigiert werden und der Prüfung auf den Straßennamen in der Nähe, existiert die Gefahr einer Fehlerfortpflanzung nicht.

Edbert (EvanE)

Angesichts der inzwischen gesammelten Erfahrungen werde ich die “experimental feature”-Warnung wohl bald streichen und die Korrektur unabhängig von anderen Bearbeitungen durchführen lassen (bislang nur, wenn zuvor ein anderer Fehler korrigiert wurde). Bisher wurden im Zuge der automatischen Korrekturen 92 Bearbeitungen vorgenommen, ohne daß sich Hinweise auf Probleme ergeben hätten. Darüberhinaus habe ich die entsprechenden Funktionen etliche Male manuell eingesetzt. Auszug aus dem Log:


      6         addr:city tag modified: "holzminden" -> "Holzminden"
      4         addr:city tag modified: "münchen" -> "München"
      3         addr:city tag modified: "delligsen" -> "Delligsen"
      3         addr:city tag modified: "bodenwerder" -> "Bodenwerder"
      1         addr:city tag modified: "leipzig" -> "Leipzig"
      1         addr:city tag modified: "hammelburg" -> "Hammelburg"

     41         addr:street tag modified: "die schraag" -> "Die Schraag"
     16         addr:street tag modified: "die huf" -> "Die Huf"
      1         addr:street tag modified: "waldmüllerstraße" -> "Waldmüllerstraße"
      1         addr:street tag modified: "waisenhausstraße" -> "Waisenhausstraße"
      1         addr:street tag modified: "sternwartstraße" -> "Sternwartstraße"
      1         addr:street tag modified: "SiemensStraße" -> "Siemensstraße"
      1         addr:street tag modified: "reichenbachstraße" -> "Reichenbachstraße"
      1         addr:street tag modified: "nymphenburger Straße" -> "Nymphenburger Straße"
      1         addr:street tag modified: "mittlere straße" -> "Mittlere Straße"
      1         addr:street tag modified: "Landshuter straße" -> "Landshuter Straße"
      1         addr:street tag modified: "kirchstraße" -> "Kirchstraße"
      1         addr:street tag modified: "karlstraße" -> "Karlstraße"
      1         addr:street tag modified: "kaiserstraße" -> "Kaiserstraße"
      1         addr:street tag modified: "johannisstraße" -> "Johannisstraße"
      1         addr:street tag modified: "hermannstraße" -> "Hermannstraße"
      1         addr:street tag modified: "hauptstraße" -> "Hauptstraße"
      1         addr:street tag modified: "Fritz - Brather - Straße" -> "Fritz-Brather-Straße"
      1         addr:street tag modified: "frauenhoferstraße" -> "Frauenhoferstraße"
      1         addr:street tag modified: "Beim unteren Tor" -> "Beim Unteren Tor"

“Frauenhoferstraße” ist mit einiger Sicherheit falsch, dies ist aber dem in OSM eingetragenen (bzw. im Zuge von “div.Adress Korrekturen” von falsch zu anders falsch geänderten) Straßennamen geschuldet. Der Trigger beinhaltet inzwischen auch [[:lower:]][[:upper:]], wie man an der “SiemensStraße” sieht.

In vielen weiteren Fällen unterbleibt ein Korrekturversuch, weil der eingetragene Wert von addr:street bzw. addr:city nicht mit einem benachbarten Straßennamen bzw. umgebenden Ortsnamen zur Deckung gebracht werden kann:


      1         --- note: attempted modification of addr:street tag: "stuttgarterstraße" -> "Stuttgarterstraße" discouraged by result of Overpass API query; cancelled. ---
      1         --- note: attempted modification of addr:street tag: "theodor - Heuss -Straße" -> "Theodor - Heuss -Straße" discouraged by result of Overpass API query; cancelled. ---
      1         --- note: attempted modification of addr:street tag: "Walter-Freitag straße" -> "Walter-Freitag Straße" discouraged by result of Overpass API query; cancelled. ---
      1         --- note: attempted modification of addr:street tag: "UTLANDSHÖRN" -> "Utlandshörn" discouraged by result of Overpass API query; cancelled. ---
      1         --- note: attempted modification of addr:street tag: "kolpingstraße 15" -> "Kolpingstraße 15" discouraged by result of Overpass API query; cancelled. ---
      1         --- note: attempted modification of addr:street tag: "kieferstraße 37" -> "Kieferstraße 37" discouraged by result of Overpass API query; cancelled. ---
      1         --- note: attempted modification of addr:street tag: "Am alten Stauwehr 1" -> "Am Alten Stauwehr 1" discouraged by result of Overpass API query; cancelled. ---
      1         --- note: attempted modification of addr:street tag: "Filiale Café am DomfelsenZum Domfelsen" -> "Filiale Café am Domfelsenzum Domfelsen" discouraged by result of Overpass API query; cancelled. ---
      1         --- note: attempted modification of addr:street tag: "Berliner Straße 119 / Ecke Hadlichstraße  1" -> "Berliner Straße 119 / Ecke Hadlichstraße 1" discouraged by result of Overpass API query; cancelled. ---
      1         --- note: attempted modification of addr:street tag: "Fritz - Brather - Straße" -> "Fritz-Brather-Straße" discouraged by result of Overpass API query; cancelled. ---
      1         --- note: attempted modification of addr:street tag: "Walter-Schleich straße" -> "Walter-Schleich Straße" discouraged by result of Overpass API query; cancelled. ---
      2         --- note: attempted modification of addr:street tag: "k.a" -> "K.a" discouraged by result of Overpass API query; cancelled. ---
     13         --- note: attempted modification of addr:street tag: "k.a." -> "K.a." discouraged by result of Overpass API query; cancelled. ---
      1         --- note: attempted modification of addr:street tag: "lachner straße" -> "Lachner Straße" discouraged by result of Overpass API query; cancelled. ---
      1         --- note: attempted modification of addr:street tag: "bresslauer Straße" -> "Bresslauer Straße" discouraged by result of Overpass API query; cancelled. ---
      2         --- note: attempted modification of addr:street tag: "Ernst-August straße" -> "Ernst-August Straße" discouraged by result of Overpass API query; cancelled. ---
      2         --- note: attempted modification of addr:street tag: "allersheimerstraße" -> "Allersheimerstraße" discouraged by result of Overpass API query; cancelled. ---
      1         --- note: attempted modification of addr:street tag: "koperrnikusstraße" -> "Koperrnikusstraße" discouraged by result of Overpass API query; cancelled. ---
      1         --- note: attempted modification of addr:street tag: "wolf heidenheim straße" -> "Wolf Heidenheim Straße" discouraged by result of Overpass API query; cancelled. ---
      1         --- note: attempted modification of addr:city tag: "frankfurt rödelheim" -> "Frankfurt Rödelheim" discouraged by result of Overpass API query; cancelled. ---
      1         --- note: attempted modification of addr:street tag: "dr.jasperstraße" -> "Dr.Jasperstraße" discouraged by result of Overpass API query; cancelled. ---
      1         --- note: attempted modification of addr:street tag: "dr. jasperstraße" -> "Dr. Jasperstraße" discouraged by result of Overpass API query; cancelled. ---
      1         --- note: attempted modification of addr:street tag: "dr.jasperstraße" -> "Dr.Jasperstraße" discouraged by result of Overpass API query; cancelled. ---
      1         --- note: attempted modification of addr:street tag: "rühlerstraße" -> "Rühlerstraße" discouraged by result of Overpass API query; cancelled. ---
      2         --- note: attempted modification of addr:street tag: "sahlfelderstraße" -> "Sahlfelderstraße" discouraged by result of Overpass API query; cancelled. ---
      1         --- note: attempted modification of addr:street tag: "Wasserburger Landstraße 264  / Von-Erckert-Straße" -> "Wasserburger Landstraße 264 / Von-Erckert-Straße" discouraged by result of Overpass API query; cancelled. ---
      1         --- note: attempted modification of addr:street tag: "Neustädter- Straße" -> "Neustädter-Straße" discouraged by result of Overpass API query; cancelled. ---

Erstes Wort groß geschrieben ist in DE wohl immer groß geschrieben (ich kenne zumindestens keine Ausnahme).
Bei den folgenden Worten gilt das meist, jedoch nicht immer.

  • “Im grünen Winkel” in Bonn wird laut Ratsbeschluss mit kleinem ‘g’ geschrieben.
  • “Am grauen Turm”, Nassau (Lahn) wird laut einem Straßenschild mit kleinem ‘g’ geschrieben.
    Die anderen Straßenschilder habe ich leider nicht geprüft.

Edbert (EvanE)

Es gibt relativ viele Straßennamen, in denen Adjektive offiziell klein geschrieben werden. Auch wenn die Duden das anders vorschreibt: der Rat, der die Schreibweise beschlossen hat, kannte die Regel offensichtlich nicht oder hat (siehe Bonn) beschlossen, es besser zu wissen.

Baßtölpel

Das Problem der Unterscheidung zwischen Buchstabendreher und fehlendem Buchstaben besteht natürlich immer noch. Nachdem ich in den letzten Tagen einige Hauptsraßen und Schubertsraßen in addr:street-Tags händisch korrigiert habe, bin ich nun aber geneigt, eine Positivliste mit einigen besonders häufigen Straßennamen einzurichten, bei denen von einem vergessenen Zeichen auszugehen ist. Im folgenden nur die Präfixe:

  • Haupt

  • Post

  • Mozart

  • Schubert

  • Kant

  • Ost, West

  • Forst

  • Humboldt

  • Trift

  • Spessart

D.h. Spessar**tsr**aße soll beispielsweise zu Spessar**tstr**aße korrigiert werden. Die Liste wird sicher im Laufe der Zeit noch anwachsen, aber mit den obigen häufigen Straßennamen sollte bereits einiges abgedeckt sein.

Die ebenfalls relativ häufige Marktstraße fehlt in der obigen Liste: auf 17 Marktstraßen kommt eine Markstraße, das Risiko einer Fehlkorrektur ist zu groß. In den anderen Fällen besteht nach meiner Einschätzung kein solches Risiko: es gibt in OSM weder Posstraßen noch Mozarstraßen oder Kanstraßen. Es gibt zwar eine Handvoll Schuberstraßen, aber ich vermute, daß auch diese überwiegend oder sogar allesamt falsch geschrieben sind (zumal einige alle davon in “Komponistensiedlungen” mit Wagner-, Mozart-, Beethoven-, Haydn-, Bach- und ähnlichen Straßen liegen). Ähnliches gilt für die bisweilen zu findenden Humboldstraßen.

Meinungen?

PS. Auf die Gefahr hin, mich damit unbeliebt zu machen, habe ich einige der Schuber- und Humboldstraßen mit Notes versehen.

Sehr schön, wieder ein paar mehr saubere Straßennamen. :slight_smile:

Die Mark(t)straße außen vor zu lassen ist in meinen Augen sinnvoll, wie ein Blick auf Wikipedia zeigt. Bekannteste Beispiele dürften die Mark Brandenburg und der Markgraf sein.

Die Triftstraße in obiger Liste zu finden, hatte mich etwas erstaunt, da ich den Namen für selten hielt. Allerdings habe ich mit einem kurzer Blick in Wikipedia heraus gefunden, dass dieser Begriff von Viehtrieb stammt, also in durch Viehwirtschaft geprägten Gegenden durchaus öfter vorkommen kann.

Edbert (EvanE)

Ich weiss nicht, ob sich der Aufwand lohnt, Tippfehler sind ja nocht sooo häufig. Aber wenn, würde ich “Gerhart Hauptmann” und “Bertolt Brecht” (ggf. korrekte Schreibweise vorher ermitteln…) mit aufnehmen. “Hayden” findet man auch oft.

Durch die Triftstraße in München wurde Holz getrieben, als sie noch ein Kanal war.

Grüße, Max

Hallo Max

Also noch ein Wort-Ursprung: (auf/mit dem Wasser) treiben.
Die Beschäftigung mit OSM bildet ungemein. Wikipedia verzeichnet bei Trift sowohl Holztrift als auch Viehtrift und enthält auch einen Verweis zu dem von dir erwähnten Triftkanal.

Edbert (EvanE)

Es geht nur um die Fehlergruppe “tsraße”. Mir war das natürlich völlig klar :wink: deswegen habe ich es wohl vergessen, dies deutlicher herauszustellen.
Von Eigennamen lasse ich die Finger - nicht alle Straßennamen müssen sich auf denselben Gerhar(d|t|dt) Hauptmann beziehen.

Ad Trift: auch wieder was gelernt.

Kannst Du wall-e mal wieder anwerfen? Es sit so mühsam, das Zeug in addr:street alles per Hand zu korrigieren.

Baßtölpel