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 2 von 2     12   
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
 
hanvas

 
Delphi 11 Alexandria
 
#11
  Alt 20. Sep 2023, 19:15
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.
Im Grunde geht es um die automatische Verarbeitung von Dokumenten. Modelle wie Donut, Layoutlm, lilit und noch einige mehr können, entsprechendes Training vorrausgesetzt, die Inhalten von Dokumenten klassifizieren.

Also

Kunde->Hans Joerg Vasold, Schäferspforte....
Verkäufer->Amazon, Koblenz ....
Iban->DE 97 ....
TaxId->
Brutto-> 1189,00
Netto-> 1189,00
Steuer->0
Währung->€

usw.

Dabei fasst man (oder ich) die Daten zu Gruppen zusammen, also beispielsweise die Adresse(n), die Zeile(n) eine Rechnung, den Kopf oder Fuß usw. Das hat Vorteile beim Auszeichnen der Trainingsdaten, insbesondere das ich viel weniger Auszeichnen muss, ist zunächst weniger Fehleranfällig und lässt sich auch leichter trainieren.

Es hat aber unter anderem den Nachteil das ich die Gruppen später mit anderen Modellen (die ich ebenfallss trainieren muss) wieder aufsplitten muss.

Der Plan ist letztendlich ein Programm zu haben mit dem ich Dokumente (in diesem Fall Rechnungen) verarbeite, ein weiteres Programm zu haben, welches ein verarbeitetes Dokument zusammen mit den erkannten Daten präsentiert (und auch zur Korrektur verwendet werden kann) um anschließend einen Export der erkannten und korrigierten Daten durchzuführen.

cu Ha Joe
  Mit Zitat antworten Zitat
hanvas

 
Delphi 11 Alexandria
 
#12
  Alt 20. Sep 2023, 20:27
Was mache ich falsch?
Gar nichts, war mein Fehler.

In der Routine TPostalMan.Setup hat ein API Aufruf zum Setzen des Datenverzeichnisses gefehlt.

Hinweis: Wer nur die Headerdatei verwendet und das Datenverzeichnis verändern will muss erst das Datenverzeichnis setzen (libpostal_setup_datadir) bevor setup (libpostal_setup) aufgerufen wird.

Hab die entsprechende Datei (Postal.PostalMan) auf github geändert.

ps.: bei C:\Workbench\libpostal ist das Datenverzeichnis C:\Workbench\libpostal\datastore\libpostal, bei C:\WorkbenchX\libpostal ist das Datenverzeichnis entsprechend C:\WorkbenchX\libpostal\datastore\libpostal, natürlich können die Daten unterhalb von C:\Workbench\libpostal\datastore\libpostal aber auch in ein anderes Verzeichnis kopiert werden und dann muss eben das als Datenverzeichnis verwendet werden.

hth Ha Joe

Geändert von hanvas (20. Sep 2023 um 20:31 Uhr)
  Mit Zitat antworten Zitat
hanvas

 
Delphi 11 Alexandria
 
#13
  Alt 21. Sep 2023, 10:41
Was mache ich falsch?
Gar nichts, war mein Fehler.
Nicht nur.

Ich habe libpostal noch mal selbst gebaut. Wenn ich die selbst gebauten Binaries/Datenverzeichnisse verwende kann ich libpostal an jede beliebige Stelle kopieren, wenn ich die "vorbereiteten" verwende bin ich tatsächlich auf den Pfad C:\Workbench... festgelegt. Es scheint so als ob der Author von pypostalwin an irgendeiner Stelle den Pfad/Pfade fest verdrahtet hätte.

Ich werde versuchen die Binaries auf Github in den ächsten Tagen zur Verfügung zu stellen, muss dazu aber ein Release basteln (wegen der Dateigröße) bis dahin wirst Du wohl mit der Lösung "C:\Workbench" auskommen müssen oder die Binaries selbst bauen. Die Anleitung dazu findest du bei libpostal.

cu Ha Joe
  Mit Zitat antworten Zitat
hanvas

 
Delphi 11 Alexandria
 
#14
  Alt 21. Sep 2023, 12:58
Ich habe libpostal noch mal selbst gebaut....
Ich werde versuchen die Binaries auf Github in den ächsten Tagen zur Verfügung zu stellen
Ich habe die Daten mit der Testanwendung als Release auf Github gestellt. Einfach in ein beliebiges Verzeichnis entpacken und die Testanwendung ausführen. Die Pfade für die DLL und das Datenverzeichnis werden in dem Fall automatisch, beim starten der Testanwendung gesetzt.

hth Ha-Jö
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   

 

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 13:10 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