2012-02-27 14 views
19

Ho una lista di indirizzi degli Stati Uniti ho bisogno di entrare in città, stato, codice postale, stato, eccc'è una libreria per analizzare gli indirizzi degli Stati Uniti?

esempio l'indirizzo: "16100 Sand Canyon Avenue, Suite 380 Irvine, CA 92618"

fa qualcuno sa di una libreria o di una API gratuita per farlo? Google/Yahoo geocoder è vietato l'uso da parte del TOS per i progetti commerciali ..

Sarebbe fantastico per trovare una libreria Python che preforme questo ...

Grazie

+1

Dovete dirci il formato (esatto) che (string?) dati sono in. –

risposta

5

Quella libreria di pypars sembra molto interessante e sembra fare un buon lavoro con una varietà di esempi. E penso che sia un'alternativa più leggibile alle espressioni regolari non elaborate (che non sono davvero una buona soluzione per questo problema).

Essere consapevoli del fatto che questo tipo di soluzione implica che, ad un certo punto, si sta standardizzando gli indirizzi che non sono validi ... appariranno solo validi. Se sapere se un indirizzo è effettivamente, reale (e forse consegnabile) è importante per la tua applicazione, allora dovresti utilizzare un servizio certificato USPS che utilizza Delivery Point Validation (DPV). Sono uno sviluppatore di SmartyStreets, che fornisce solo un tale servizio, insieme agli SDK che semplificano l'integrazione (here's a succinct sample).

Le risposte tornano standardizzate secondo la pubblicazione 28 USPS. L'API è gratuita per utenti con basso utilizzo.

+0

Un link migliore, forse: https://github.com/smartystreets/smartystreets-python-sdk – bogeymin

+0

Buono point @ bogeymin: aggiornerò la domanda. – mdwhatcott

8

Dai un'occhiata a questo pacchetto di Python: https://github.com/SwoopSearch/pyaddress

Consente inoltre la flessibilità se si sa abbastanza dettagli circa gli indirizzi da analizzare.

+1

Sfortunatamente, quel progetto sembra essere abbandonato. L'ultimo commit è da aprile 2013. –

0

Controllare attentamente il set di dati per assicurarsi che questo problema non sia già stato gestito per l'utente.

ho speso una discreta quantità di tempo prima di creare una tassonomia di probabilmente il nome finale della strada, usando i condizionali espressioni regolari per cercare di strappare il numero civico dalle corde indirizzo completo e tutto e si è scoperto che la tabella di attributi per i miei shapefile aveva già segmentato questi componenti.

Prima di procedere con il processo di analisi delle stringhe di indirizzo, che è sempre un po 'complicato a causa delle inevitabili strane variazioni (alcuni indirizzi di pacchi sono per pacchi senza sbocco sul mare e hanno indirizzi strani, ecc.), Assicurati che il tuo set di dati non l'ha già fatto per te !!!

19

Molte di queste risposte hanno ormai qualche anno.

La biblioteca più a prova di proiettile che ho visto di recente è usaddress: https://github.com/datamade/usaddress:

Pro consiglio: quando si verifica indirizzi in tutte queste librerie, utilizzare 1) non virgole nel vostro indirizzo, 2) nomi di città di più parole preferibilmente con "St." nel nome per vedere se la libreria può distinguere tra "street" e "Saint" (ad esempio, St. Louis) e 3) involucro improprio. Questo combo tipicamente farà cadere anche i parser migliori.

+2

Ho provato questo e funziona sorprendentemente bene. Se il paese non è incluso nell'indirizzo, funziona anche per gli indirizzi canadesi. – JeromeParadis

+1

Il link sopra ora restituisce un 404 a causa, presumo, di un aggiornamento/supervisione. http://datamade.us/blog/parsing-addresses-with-usaddress – Ryan

+1

https://github.com/datamade/usaddress – Justas

1

So che questo è un vecchio post, ma qualcuno potrebbe trovare utile: https://usaddress.readthedocs.io/en/latest/

>>> import usaddress 
>>> usaddress.parse('Robie House, 5757 South Woodlawn Avenue, Chicago, IL 60637') 
[('Robie', 'BuildingName'), 
('House,', 'BuildingName'), 
('5757', 'AddressNumber'), 
('South', 'StreetNamePreDirectional'), 
('Woodlawn', 'StreetName'), 
('Avenue,', 'StreetNamePostType'), 
('Chicago,', 'PlaceName'), 
('IL', 'StateName'), 
('60637', 'ZipCode')] 

Oppure:

>>> import usaddress 
>>> usaddress.tag('Robie House, 5757 South Woodlawn Avenue, Chicago, IL 60637') 
(OrderedDict([ 
    ('BuildingName', 'Robie House'), 
    ('AddressNumber', '5757'), 
    ('StreetNamePreDirectional', 'South'), 
    ('StreetName', 'Woodlawn'), 
    ('StreetNamePostType', 'Avenue'), 
    ('PlaceName', 'Chicago'), 
    ('StateName', 'IL'), 
    ('ZipCode', '60637')]), 
'Street Address') 

>>> usaddress.tag('State & Lake, Chicago') 
(OrderedDict([ 
    ('StreetName', 'State'), 
    ('IntersectionSeparator', '&'), 
    ('SecondStreetName', 'Lake'), 
    ('PlaceName', 'Chicago')]), 
'Intersection') 

>>> usaddress.tag('P.O. Box 123, Chicago, IL') 
(OrderedDict([ 
    ('USPSBoxType', 'P.O. Box'), 
    ('USPSBoxID', '123'), 
    ('PlaceName', 'Chicago'), 
    ('StateName', 'IL')]), 
'PO Box') 
Problemi correlati