AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Normalisierung von Adressen / Postalman
Thema durchsuchen
Ansicht
Themen-Optionen

Normalisierung von Adressen / Postalman

Ein Thema von hanvas · begonnen am 19. Sep 2023 · letzter Beitrag vom 21. Sep 2023
Antwort Antwort
Seite 1 von 2  1 2      
hanvas
Registriert seit: 28. Okt 2010
Hallo,

ich habe ein etwas älteres Projekt von mir ein wenig überarbeitet und auf Github zur Verfügung gestellt. (https://github.com/hansvas/Postalman/) Dabei handelt es sich um eine Klasse zum parsen von internationalen Adressen. Postalman erzeugt aus

"99999 Berlin, Peter Lustig, Fanz-Lehar-Str. 2" den "korrekten" Output "Peter Lustig, Franz-Lehar-Str. 2, 99999 Berlin" und natürlich auch aus fast jeder anderen Adresse.

außerdem identifiziert Postalman die Adressbestandteile, also die entsprechende Zuordnung von Plz, Strasse, Ort usw. Dieser Teil der Funktionalität geht weitestgehend auf libpostal [1] zurück, wer Postalman nicht einsetzen will kann auch einfach die entsprechenden Headerdateien nehmen und libpostal selbst einbinden.

Adressen können innerhalb von Postalman mit Hilfe von Validatoren geprüft werden. Ich habe einen einfachen Validator der auf Nomanitim basiert und der Adressdaten auch mit Längen und Breitengrad anreichern kann. Im Laufe der Zeit werde ich weitere Validatoren hinzufügen.

hth Hans Joerg

[1] https://github.com/openvenues/libpostal
 
BlueStarHH

 
Delphi 11 Alexandria
 
#2
  Alt 20. Sep 2023, 15:33
Danke, das liest sich interessant. Was muss ich unter "Data directory" einstellen? Wenn ich das Projekt aus Delphi starte erscheint, diese Meldung:

Zitat:
Im Projekt TestPostal.exe ist eine Exception der Klasse Exception mit der Meldung 'libpostalostalman setup error' aufgetreten.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

 
Delphi 12 Athens
 
#3
  Alt 20. Sep 2023, 15:48
Vor 'ner Weile (dachte hier, aber vielleicht auch wo anders) eine Diskussion / Artikel gesehn, wo es darum ging ein Sprachmodel (ähnlich, wie man es von ChatGPT kennt) dafür zu nutzen.

Also das war es schon beeinruckend, was damit alles möglich ist.
  Mit Zitat antworten Zitat
hanvas

 
Delphi 11 Alexandria
 
#4
  Alt 20. Sep 2023, 17:23
Zitat:
Im Projekt TestPostal.exe ist eine Exception der Klasse Exception mit der Meldung 'libpostalostalman setup error' aufgetreten.
Die Klasse benötigt libpostal [1] und das entsprechende Datenmodel. Auf den Seiten von libpostal ist auch angegeben wie man sich das baut. Unter Windows würde ich aber empfehlen einfach [2] herunterladen. Der Link stammt von pypostalwin [3], das ist der nicht offizielle python/windows build der sich aber eignet. Verzeichnis C:\Workbench anlegen, die heruntergeladene Zip Datei hineinkopieren und entpacken.

Die Ordnerstruktur sollte dann so aussehen

C:\Workbench\
-->automate4te\
-->data\
-->datastore\
-->libpostal\
-->m4\
-->resources\
-->scripts\
-->src\

In dem Fall sollte alles mit den voreingestellten Werten funktionieren. Wenn man die Daten anderswo hinkopieren will oder selbst trainieren will (Anleitung unter libpostal, alternative Daten) dann muss man natürlich angeben wo die Daten liegen.

hth Ha Joe


[1] https://github.com/openvenues/libpostal
[2] https://drive.google.com/file/d/1fZU...ew?usp=sharing
[3] https://pypi.org/project/pypostalwin/
  Mit Zitat antworten Zitat
hanvas

 
Delphi 11 Alexandria
 
#5
  Alt 20. Sep 2023, 17:32
Vor 'ner Weile (dachte hier, aber vielleicht auch wo anders) eine Diskussion / Artikel gesehn, wo es darum ging ein Sprachmodel (ähnlich, wie man es von ChatGPT kennt) dafür zu nutzen.

Also das war es schon beeinruckend, was damit alles möglich ist.
Im Grunde ist das der Hintergrund von libpostal. Allerdings ist es kein Sprachmodel. Trainiert wurde das Modell überwiegend mit den Daten von Openstreetmap, aber natürlich sind auch alternative Ansätze möglich. Das ist auch der Grund warum man die rund 1,5 gb Daten benötigt. Es funktioniert erstaunlich gut, ist recht zuverlässig und in gewisser Weise schreibweisentolerant.

Aber damit habe ich nichts zu tun, die Arbeit und auch ein (Python) Modul zum Deduplizieren [1] von Adressen (das eine oder andere werde ich noch einbauen) haben die Macher von libpostal gemacht. Ich will, wenn ich irgendwann mit dem Training fertig bin, libpostal eigentlich einsetzen um mit Hilfe von Donut [2] Rechnungen zu parsen und anschließend die Adressen aufzuarbeiten.

cu Ha Joe

[1] https://github.com/openvenues/lieu
[2] https://github.com/clovaai/donut
  Mit Zitat antworten Zitat
BlueStarHH

 
Delphi 11 Alexandria
 
#6
  Alt 20. Sep 2023, 18:36
Ich habe die ZIP-Datei geladen und nach "C:\Workbench\" entpackt. Dann klappt es.

Entpacke ich die ZIP-Datei hingegen z.B. nach "C:\WorkbenchX\" und stelle im Programm folgendes ein:

Path to libpostal: C:\WorkbenchX\libpostal\src\.libs\libpostal-1.dll
Data directory: C:\WorkbenchX\libpostal
oder C:\WorkbenchX\libpostal\datastore
oder C:\WorkbenchX\libpostal\Data

Erscheint dieser Fehler:

Im Projekt TestPostal.exe ist eine Exception der Klasse Exception mit der Meldung 'libpostalostalman setup error' aufgetreten.

Was mache ich falsch?
  Mit Zitat antworten Zitat
BlueStarHH

 
Delphi 11 Alexandria
 
#7
  Alt 20. Sep 2023, 18:39
Ich will, wenn ich irgendwann mit dem Training fertig bin, libpostal eigentlich einsetzen um mit Hilfe von Donut [2] Rechnungen zu parsen und anschließend die Adressen aufzuarbeiten.
Wozu braucht man die Adressen von Rechnungen? Wenn ich eine Rechnung ausstelle, kenn ich die Adresse, da ich sie selbst draufgeschrieben haben. Wenn ich eine Rechnung empfange, kenne ich die Adresse auch. Denn es ist meine eigene.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

 
Delphi 12 Athens
 
#8
  Alt 20. Sep 2023, 18:44
Wenn ich eine Rechnung empfange, kenne ich die Adresse auch. Denn es ist meine eigene.
Auch die vom Absender?

Oder wenn du in deinen Daten nach einer Adresse suchst, sie aber nicht findest, weil sie anders gespeichert ist.
  Mit Zitat antworten Zitat
BlueStarHH

 
Delphi 11 Alexandria
 
#9
  Alt 20. Sep 2023, 18:45
Verbesserungsvorschlag zu

Delphi-Quellcode:
function TPostalMan.ParseAddress
 (const a: AnsiString; FieldsAndValues: TPostalManValues;
  useOptions: Boolean = False; useOriginal : Boolean = False) : Boolean;
...
     try
       FieldsAndValues.Add(Field,value);
     except
       Duplicates.Add(Field,Value);
     end;
...
ändern in:

Delphi-Quellcode:
     try
       if not FieldsAndValues.TryAdd(Field,value) then
         Duplicates.Add(Field,Value);
     except
       //Fehlerbehandlung, wenn Hauptspeicher voll oder andere Gründe...
     end;
  Mit Zitat antworten Zitat
hanvas

 
Delphi 11 Alexandria
 
#10
  Alt 20. Sep 2023, 18:47
Ich habe die ZIP-Datei geladen und nach "C:\Workbench\" entpackt. Dann klappt es.
Schön

Was mache ich falsch?
Sollte eigentlich gehen, ich schaue mir das später an und melde mich dann.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz