Vielleicht einen Blick auf pypostal hilft. pypostal sind die offiziellen Python-Bindungen zu libpostal.
Mit den Beispielen von Mike Bethany ich machte dieses kleine Beispiel:
from postal.parser import parse_address
addresses = [
"420 Fanboy Lane, Cupertino CA 12345",
"1829 William Tell Oveture, by Gioachino Rossini 88421",
"114801 Western East Avenue Apt. B32, Funky Township CA 12345",
"1 Infinite Loop, Cupertino CA 12345-1234",
"420 time!",
]
for address in addresses:
print parse_address(address)
print "*" * 60
> [(u'420', u'house_number'), (u'fanboy lane', u'road'), (u'cupertino', u'city'), (u'ca', u'state'), (u'12345', u'postcode')]
> ************************************************************
> [(u'1829', u'house_number'), (u'william tell', u'road'), (u'oveture by gioachino', u'house'), (u'rossini', u'road'), (u'88421',
> u'postcode')]
> ************************************************************
> [(u'114801', u'house_number'), (u'western east avenue apt.', u'road'), (u'b32', u'postcode'), (u'funky', u'road'), (u'township',
> u'city'), (u'ca', u'state'), (u'12345', u'postcode')]
> ************************************************************
> [(u'1', u'house_number'), (u'infinite loop', u'road'), (u'cupertino', u'city'), (u'ca', u'state'), (u'12345-1234',
> u'postcode')]
> ************************************************************
> [(u'420', u'house_number'), (u'time !', u'house')]
> ************************************************************
Obligatorisch: http://xkcd.com/208/ –
Sie müßten einige vernünftigen Grenzen setzen, was ein „Adresse "ist. Wie viele Nummern kann es haben? Muss es ein richtiges Ende haben (z. B. Rd, St, Ct)? Wie viele Wörter kann es vor dem Ende haben (z. B. 1337 Old Stack Overflow Fragen Lane zu lang?) –
Haha, lustig. Irgendwie was ich machen möchte. – Souleiman