Lubar, saya melihat posting Anda di Stack Overflow tetapi saya akan memposting jawaban yang sama di sini untuk konsistensi. Itu pertanyaan yang bagus. Saya bekerja di industri verifikasi alamat dan telah mengatasi masalah Anda sebelumnya.
Saya menautkan pertanyaan Stack Overflow ini dalam komentar; dan penting untuk mengetahui bahwa sebenarnya tidak ada jaminan tentang format alamat jalan bentuk lengkap lengkap. Seperti disebutkan dalam pos tertaut, alamat lengkap dapat terlihat seperti ini:
1) 102 jalan utama Anytown, negara bagian
2) 400n 600e # 2, 52173
3) po # 104 60203
4) 1234 LKSDFJlkjsdflkjsdljf #asdf 12345
5) 205 1105 14 90210
(Alasannya dijelaskan dalam posting tertaut.) Saya menyadari bahwa GeoPy mengembalikan alamat dalam format tertentu - tergantung pada geocoder yang digunakan (format yang dihasilkan di luar kendali GeoPy), tetapi alamat dapat melihat segala macam cara dalam suatu tertentu komponen (seperti memiliki koma), dan penting untuk mengetahui bahwa alamat standar tidak memiliki koma (menurut USPS Publikasi 28).
Saya membantu mengerjakan API yang baru-baru ini disebut LiveAddress ; itu baru saja ditingkatkan untuk mendukung penguraian geocoding dan alamat jalur tunggal.
GeoPy dirancang untuk melakukan geocode, bukan menguraikan komponen (tugas itu sebenarnya sangat sulit karena alasan saya tidak akan masuk ke sini). LiveAddress akan , bagaimanapun, komponen alamat dan mengembalikan koordinat dan informasi lain tentang alamat, dan hanya jika alamat itu nyata; tidak ada hasil "tebak".
Untuk mem-parsing alamat baris tunggal ke dalam komponen menggunakan Python, cukup masukkan seluruh alamat ke dalam bidang "jalan":
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)
Objek JSON yang dihasilkan akan berisi components
objek yang akan terlihat seperti ini:
"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"
}
Responsnya juga akan mencakup first_line gabungan dan delivery_line_2 sehingga Anda tidak harus menggabungkannya secara manual jika Anda memerlukannya.