Lubar, yazınızı Stack Overflow'da gördüm ama tutarlılık için benzer bir cevap göndereceğim. Güzel bir soru. Adres doğrulama endüstrisinde çalışıyorum ve daha önce böyle bir sorunla başa çıktım.
Ben bağlantılı bu yığın taşması söz yorumunda; ve tam serbest biçimli sokak adreslerinin biçimi hakkında gerçekten bir garanti olmadığını bilmek önemlidir. Bağlantılı gönderide belirtildiği gibi, tam adresler aşağıdakilerden herhangi birine benzeyebilir:
1) 102 ana cadde Anytown, eyalet
2) 400n 600e # 2, 52173
3) po # 104 60203
4) 1234 LKSDFJlkjsdflkjsdljf #asdf 12345
5) 205 1105 14 90210
(Nedenleri bağlantılı yazı açıklanmıştır.) GeoPy adresleri belirli bir biçimde döndürür - kullanılan coğrafi kodlayıcı bağlı (sonuç biçimi GeoPy'nin kontrolü dışında), ama adresleri belirli bir şekilde her türlü yol bakabilirsiniz bileşeni (virgül kullanmak gibi) ve standart adreslerin virgül içermediğini bilmek önemlidir (USPS Yayını 28'e göre).
Kısa süre önce LiveAddress olarak adlandırılan bir API üzerinde çalışmaya yardımcı oldum ; coğrafi kodlama ve tek satırlı adres ayrıştırmayı destekleyecek şekilde yeni sürüme geçirildi.
GeoPy, bileşenleri ayrıştırmak yerine coğrafi kodlamak üzere tasarlanmıştır (bu görev, buraya girmeyeceğim nedenlerden dolayı gerçekten zordur). LiveAddress olacak , ancak, adres componentize ve adresiyle ilgili koordinatları ve diğer bilgileri dönün ve adreslerin gerçek yalnızca; "tahmin edilen" sonuç yok.
Tek satırlık bir adresi Python kullanarak bileşenlere ayrıştırmak için tüm adresi "sokak" alanına koymanız yeterlidir:
import json
import pprint
import urllib
LOCATION = 'https://api.smartystreets.com/street-address/'
QUERY_STRING = urllib.urlencode({ # entire query sting must be URL-Encoded
'auth-token': r'YOUR_API_KEY_HERE',
'street': '1 infinite loop cupertino ca 95014'
})
URL = LOCATION + '?' + QUERY_STRING
response = urllib.urlopen(URL).read()
structure = json.loads(response)
pprint.pprint(structure)
Ortaya çıkan JSON nesnesi components
, şuna benzer bir nesne içerecektir :
"components": {
"primary_number": "1",
"street_name": "Infinite",
"street_suffix": "Loop",
"city_name": "Cupertino",
"state_abbreviation": "CA",
"zipcode": "95014",
"plus4_code": "2083",
"delivery_point": "01",
"delivery_point_check_digit": "7"
}
Yanıt, ayrıca, birleştirilen first_line ve delivery_line_2 öğelerini de içerecektir, böylece ihtiyacınız varsa bunları manuel olarak birleştirmeniz gerekmez.