Ich habe viele Adresszeichenfolgen:
1600 Pennsylvania Ave, Washington, DC 20500 USA
Ich möchte sie in ihre Bestandteile zerlegen:
street: 1600 Pennsylvania Ave
city: Washington
province: DC
postcode: 20500
country: USA
Aber natürlich sind die Daten schmutzig: Sie stammen aus vielen Ländern in vielen Sprachen, sind unterschiedlich geschrieben, enthalten Rechtschreibfehler, fehlen, enthalten zusätzlichen Müll usw.
Gegenwärtig besteht unser Ansatz darin, Regeln in Kombination mit dem Fuzzy-Gazetteer-Matching zu verwenden. Wir möchten jedoch die Techniken des maschinellen Lernens untersuchen. Wir haben Trainingsdaten für betreutes Lernen gekennzeichnet. Die Frage ist, was für ein maschinelles Lernproblem ist das? Es scheint nicht wirklich ein Clustering, eine Klassifizierung oder eine Regression zu sein.
Am ehesten könnte ich mir vorstellen, jedes Token zu klassifizieren, aber dann möchten Sie wirklich alle gleichzeitig klassifizieren, um Bedingungen wie "Es sollte höchstens ein Land geben" zu erfüllen. Tatsächlich gibt es viele Möglichkeiten, einen String zu tokenisieren, und Sie möchten jeden ausprobieren und den besten auswählen.
Also: Welche maschinellen Lerntechniken könnte ich zum Parsen von Adressen ausprobieren?
quelle
Antworten:
Dies kann als Sequenzbeschriftungsproblem angesehen werden , bei dem Sie eine Sequenz von Token haben und für jeden eine Klassifizierung angeben möchten. Sie können versteckte Markov-Modelle (HMM) oder bedingte Zufallsfelder (CRF) verwenden, um das Problem zu lösen. Es gibt gute Implementierungen von HMM und CRF in einem Open-Source-Paket namens Mallet .
In Ihrem Beispiel sollten Sie die Eingabe in das folgende Format konvertieren. Darüber hinaus sollten Sie zusätzliche Funktionen generieren.
quelle
Ich musste ein sehr ähnliches Problem lösen, um zu überprüfen, ob eine Adresse gültig oder ungültig ist.
Typischerweise hat die Adresse die Struktur "1600 Pennsylvania Ave, Washington DC, 20500".
Eine Zeichenfolge wie
"Ich ging 2000 Stufen hinunter und erreichte die Pennsylvania Ave in Washington DC."
ist keine gültige Adresse.
Dies kann durch Klassifikationstechniken wie SVM, Neuronale Netze usw. gelöst werden.
Die Idee besteht darin, einen Schlüsselsatz von Funktionen zu identifizieren. Einige davon könnten sein:
1) Beginnt der Straßenname mit einer gültigen Blocknummer? Die meisten US-Blocknummern sind entweder Zahlen (z. B. 1200) oder eine Zahl, gefolgt von einem einzelnen Buchstaben (120A) oder einer Zahl, die auf einen einzelnen Buchstaben folgt (z. B. S200).
2) Wenn die Adresse gut formatiert ist, enden die Straßennamen in Suffixen wie Ave für Allee, Dr für Laufwerk, Blvd für Boulevard. Es ist möglich, die US-Straßensuffixliste von der USPS-Site zu beziehen.
3) Die Anzahl der Wörter im Adressfeld kann ebenfalls ein interessantes Merkmal sein. Wenn zu viele Wörter vorhanden sind, handelt es sich wahrscheinlich nicht um eine gültige Adresse. ZB siehe obiges Beispiel.
4) Wie viele Wörter kommen zwischen der Blocknummer und dem Straßensuffix im Adressfeld vor?
Diese können verwendet werden, um einen Lernalgorithmus zu trainieren, und das resultierende Modell kann verwendet werden, um zu validieren, ob eine gegebene Adresse gültig ist oder nicht.
quelle
Dies ist ein kleiner Hack, für den keine eigene Lösung erforderlich ist: Reverse Geocoding. Dies kann entweder zu saubereren Daten führen oder die gesamte Arbeit für Sie erledigen.
Hier ist zum Beispiel ein Stata-Code
geocode3
von SSC, der Google verwendet. Ich denke, das ist ähnlich wie bei Fuzzy Gazetteer . Die erste Adresse ist ziemlich unordentlich, die zweite sauber und die dritte fremd. Auch andere Software kann damit umgehen.Das funktioniert einigermaßen gut:
Der Kreml hat ein ganz anderes Format.
quelle
Dies klingt nach einem Problem, das mit einer bidirektionalen LSTM-Klassifizierung gelöst werden muss. Sie kennzeichnen beispielsweise jedes Zeichen der Stichprobe als eine Kategorie
straße: 1 stadt: 2 provinz: 3 postleitzahl: 4 land: 5
Trainieren Sie nun Ihren Klassifikator anhand dieser Bezeichnungen. Boom!
quelle