2012-04-03 12 views
-1

Ich suche nach Bibliotheken in Java, die eine Adresse aus einer normalen Textfolge analysieren können. Der Text könnte alle Arten von speziellen und nicht-speziellen enthalten :(Zeichen, aber alles, was ich wirklich aus der ursprünglichen Zeichenfolge entfernen möchte, ist eine grobe Adressfolge.Gute Adresse/String Parsing-Bibliotheken in Java?

Mit anderen Worten, wie würde ich eine Adresse aus a ziehen random String, der eine Adresse enthält somewhere? Das Format ist nicht wirklich wichtig, solange die Ausgabe die Straße und die Nummer irgendwo hat. Würden Sie dafür reguläre Ausdrücke verwenden, wenn es keine Bibliotheken gibt?

+1

Sie müssen weitere Details zur Eingabezeichenfolge angeben. Ist es garantiert ein String mit einer einzigen Adresse und sonst nichts? Ist es ein Absatz, der irgendwo eine einzelne Adresse enthält? Kann es mehrere Adressen in der Zeichenfolge geben? Das zugrunde liegende Problem reicht von moderat einfach (wenn die Eingabe sehr eingeschränkt ist) bis potenziell schwierig (berücksichtigen Sie das Problem der Suche nach allen gültigen internationalen Adressen in einer Textseite, die in einer beliebigen Sprache sein kann). –

+1

@StuartGolodetz Ich denke, dass letzteres Ihrer Aussagen wahr ist - er sagte, dass er Adressen aus einer "zufälligen Zeichenfolge" herausziehen möchte, also denke ich, dass er nur irgendwelche Adressen finden wollte, die er aus einem riesigen Haufen herausholen kann von Charakteren. Es sind keine weiteren Informationen zur Eingabezeichenfolge erforderlich. – CodeBlind

+0

Adresse der Straße? Für welche Länder? –

Antwort

2

Ich kenne keine Bibliotheken, die das tun ... aber, das klingt wie ein ausgezeichnetes Problem der künstlichen Intelligenz :)

Wenn Sie irgendwelche vorhandenen Adressbücher in ASCII/Unicode-Form haben, könnten Sie pote Nutze sie normalerweise, um Regex-Muster zu erzeugen, dann führe alle bekannten Adress-Regex-Muster gegen deinen zufälligen Text aus und sieh, was herauskommt. Auf diese Weise können Sie Ihrem Algorithmus "beibringen", wie er sich basierend auf bekannten Adressformaten verhalten soll. Ich vermute, wenn Bibliotheken für diese Art von Dingen existieren, dann würden sie das wahrscheinlich tun, weil es wahrscheinlich mehrere Möglichkeiten gibt, eine Straßenadresse zu formatieren.

Ein Beispiel könnte in der typischen US-Straßenadresse sein. Zum Beispiel:

1234 Main St. NW, Some City, ST, 12345 //[ST] = two-letter state abbreviation 

Sie könnten einen regulären Ausdruck schreiben, der nach zwei Zahlen und einer Abkürzung zwischen den Zuständen sucht. Natürlich würde dies nur für US-Straßenadressen funktionieren, es würde sie nicht alle erfassen, und Sie müssten vorsichtig sein, um Ihre Regex einzuschränken, um falsche Positive zu vermeiden, aber Sie könnten diesen regulären Ausdruck zu Ihrer Liste von Möglichkeiten hinzufügen.

+0

Dies ist eine gute Lösung und wie habe ich begonnen, eine Lösung zu implementieren. State-Abkürzung ist tatsächlich nicht garantiert, also verwende ich Logik, die nach einer reinen Nummer (Hausnummer) sucht, dann "records" Tokens, bis ich eine gemeinsame Straßenadresse endend (wie aus den USPS offiziellen Straßenenden erhalten.) Dies funktioniert die meiste Zeit, aber einige der Abkürzungen sind problematisch (BY für Bayou zum Beispiel). Upvoted, aber ich lasse das offen in der Hoffnung, dass jemand noch eine Killer-Regex-Bibliothek oder Parsing-Bibliothek haben wird, danke für die Antwort! Ich werde in ein paar Tagen annehmen, wenn keine Antworten mehr geben. –

Verwandte Themen