2012-02-27 5 views
19

मैं अमेरिका की एक सूची के पते मैं शहर, राज्य, ज़िप कोड, राज्य आदि में टूट की जरूरत हैक्या अमेरिकी पते को पार्स करने के लिए एक पुस्तकालय है?

उदाहरण पता: "16100 रेत घाटी एवेन्यू, सुइट 380 इरविन, CA 92618"

करता है किसी को पुस्तकालय या ऐसा करने के लिए एक मुफ्त एपीआई पता है? गूगल/याहू जियोकोडर वाणिज्यिक परियोजनाओं के लिए टीओएस द्वारा उपयोग करने के लिए मना किया है ..

यह एक अजगर पुस्तकालय है कि इस preforms खोजने के लिए भयानक होगा ...

धन्यवाद

+1

आप हमें (सटीक) स्वरूप है कि बताने के लिए है (स्ट्रिंग?) डेटा में है। –

उत्तर

16

Pyparsing कार्यक्षमता का एक समूह है सड़क पते को पार्स करने के लिए, यहां इसके लिए एक उदाहरण देखें: http://pyparsing.wikispaces.com/file/view/streetAddressParser.py

+2

धन्यवाद, मैं इसे देख रहा हूं। – WeaselFox

+1

यह लाइब्रेरी इस उत्तर में उल्लिखित स्क्रिप्ट पर आधारित है: https://github.com/pnpnpn/street-address – zengr

5

वह पाइपर्सिंग लाइब्रेरी बहुत रोचक लगती है और विभिन्न उदाहरणों के साथ एक अच्छा काम करने लगता है। और मुझे लगता है कि कच्चे नियमित अभिव्यक्तियों के लिए एक और अधिक पठनीय विकल्प है (जो वास्तव में इस समस्या के लिए एक अच्छा समाधान नहीं है)।

ध्यान रखें कि इस तरह के समाधान का तात्पर्य है कि आप किसी बिंदु पर, ऐसे मानकों को मानकीकृत कर रहे हैं जो मान्य नहीं हैं ... वे केवल वैध दिखाई देंगे। यदि यह पता है कि कोई पता वास्तव में है, तो वास्तविक (और शायद वितरित करने योग्य) आपके आवेदन के लिए महत्वपूर्ण है तो आपको डिलिवरी प्वाइंट सत्यापन (डीपीवी) का उपयोग करने वाली यूएसपीएस-प्रमाणित सेवा का उपयोग करना चाहिए। मैं SmartyStreets के लिए एक डेवलपर हूं, जो एसडीके के साथ ऐसी ही सेवा प्रदान करता है जो एकीकरण को आसान बनाता है (here's a succinct sample)।

प्रतिक्रियाएं यूएसपीएस प्रकाशन 28 के अनुसार मानकीकृत आती हैं। एपीआई निम्न उपयोग उपयोगकर्ताओं के लिए नि: शुल्क है। बाहर इस अजगर पैकेज

+0

एक बेहतर लिंक, शायद: https://github.com/smartystreets/smartystreets-python-sdk – bogeymin

+0

अच्छा पॉइंट @bogeymin - मैं सवाल अपडेट करूंगा। – mdwhatcott

8

की जांच: https://github.com/SwoopSearch/pyaddress

यह भी अगर आप जानते हैं पते के बारे में पर्याप्त विवरण पार्स किया जा सकता लचीलापन देता है।

+1

दुर्भाग्य से, उस परियोजना को त्याग दिया प्रतीत होता है। नवीनतम प्रतिबद्धता अप्रैल 2013 से है। –

0

यह सुनिश्चित करने के लिए कि यह समस्या आपके लिए पहले से ही नहीं संभाली गई है, सावधानीपूर्वक अपने डेटासेट की जांच करें।

मैंने रेगेक्सपी सशर्तों का उपयोग करके पूरी तरह से सड़क नाम समाप्त होने की एक वर्गीकरण बनाने के लिए उचित समय बिताया, ताकि पूरे पते तारों और सड़क से सड़क संख्या को बाहर निकालने का प्रयास किया जा सके और यह पता चला कि मेरे आकार के लिए गुण तालिका पहले से ही इन घटकों को विभाजित किया था।

पार्सिंग एड्रेस स्ट्रिंग्स की प्रक्रिया के साथ आगे बढ़ने से पहले, जो अनिवार्य रूप से अजीब भिन्नताओं के कारण हमेशा थोड़ी सी चीज होती है (कुछ पार्सल पते लैंडलाक्ड पार्सल के लिए होते हैं और अजीब पते आदि होते हैं), सुनिश्चित करें कि आपका डेटासेट आपके लिए यह पहले से ही नहीं किया है !!!

19

इनमें से कुछ उत्तर अब कुछ साल पुराने हैं।

सबसे बुलेटप्रूफ पुस्तकालय मैं हाल ही में देखा है usaddress है: https://github.com/datamade/usaddress:

  • सुदूर address जो हम एक वर्ष के लिए अब https://pypi.python.org/pypi/address/0.1.1 का उपयोग किया गया था की तुलना में अधिक सटीक।
  • अभी तक यह एक पते
  • फिर भी इस लेखन

प्रो टिप के रूप में करने के लिए प्रतिबद्ध किया जा रहा पर असफल देखने के लिए: 1 जब इन सभी पुस्तकालयों में पते का परीक्षण, का उपयोग करें) अपना पता नहीं कॉमा, 2) मल्टी-शब्द शहर के नाम अधिमानतः "सेंट" के साथ यह देखने के लिए कि पुस्तकालय "सड़क" और "संत" (उदाहरण के लिए, सेंट लुइस), और 3) अनुचित आवरण के बीच अंतर कर सकता है या नहीं। यह कॉम्बो आम तौर पर बेहतर पार्सर्स भी गिर जाएगा।

+2

इसे आजमाया और यह आश्चर्यजनक रूप से अच्छी तरह से काम करता है। यदि देश पते में शामिल नहीं है, तो यह कनाडाई पते के लिए भी काम करता है। – JeromeParadis

+1

उपर्युक्त लिंक अब 404 लौटाता है, जो मुझे लगता है, एक अद्यतन/निरीक्षण है। http://datamade.us/blog/parsing-addresses-with-usaddress – Ryan

+1

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

1

मैं जानता हूँ कि यह एक पुरानी पोस्ट है, लेकिन किसी इसे उपयोगी पाते हो सकता है: 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')] 

या:

>>> 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') 
संबंधित मुद्दे