ตอนนี้, ฉันเห็นโพสต์ของคุณที่ Stack Overflow แต่จะโพสต์คำตอบที่คล้ายกันที่นี่เพื่อความสอดคล้อง มันเป็นคำถามที่ดี ฉันทำงานในอุตสาหกรรมการตรวจสอบที่อยู่และแก้ไขปัญหาของคุณมาก่อน
ฉันเชื่อมโยงกับคำถาม Stack Overflowในความคิดเห็น และสิ่งสำคัญคือต้องรู้ว่าไม่มีการรับประกันเกี่ยวกับรูปแบบของที่อยู่ถนนอิสระที่สมบูรณ์ ตามที่กล่าวไว้ในโพสต์ที่เชื่อมโยงที่อยู่ที่สมบูรณ์สามารถมีลักษณะดังนี้:
1) 102 ถนนสายหลัก Anytown รัฐ
2) 400n 600e # 2, 52173
3) po # 104 60203
4) 1234 LKSDFJlkjsdflkjsdljf #asdf 12345
5) 205 1105 14 90210
(เหตุผลอธิบายในโพสต์ที่เชื่อมโยงกัน) ฉันรู้ว่า GeoPy ส่งคืนที่อยู่ในรูปแบบที่แน่นอน - ขึ้นอยู่กับ geocoder ที่ใช้ (ซึ่งรูปแบบผลลัพธ์นั้นอยู่นอกเหนือการควบคุมของ GeoPy) แต่ที่อยู่สามารถมองหาวิธีต่างๆ องค์ประกอบ (เช่นมีเครื่องหมายจุลภาค) และเป็นสิ่งสำคัญที่จะต้องทราบว่าที่อยู่มาตรฐานไม่มีเครื่องหมายจุลภาค (อ้างอิงจาก USPS Publication 28)
ฉันช่วยทำงานใน API เพียงเมื่อเร็ว ๆ นี้เรียกว่าLiveAddress ; มันเพิ่งอัพเกรดเพื่อรองรับการเข้ารหัสภูมิศาสตร์และการแยกวิเคราะห์ที่อยู่บรรทัดเดียว
GeoPy ถูกออกแบบมาเพื่อเข้ารหัสภูมิศาสตร์ไม่แยกวิเคราะห์ส่วนประกอบ (งานนั้นยากจริง ๆ ด้วยเหตุผลที่ฉันจะไม่เข้าไปที่นี่) อย่างไรก็ตาม LiveAddress จะจัดองค์ประกอบที่อยู่และพิกัดการส่งคืนและข้อมูลอื่น ๆ เกี่ยวกับที่อยู่และเฉพาะในกรณีที่ที่อยู่นั้นเป็นของจริง ไม่มีผลลัพธ์ "เดา"
ในการแยกที่อยู่บรรทัดเดียวเป็นส่วนประกอบโดยใช้ Python เพียงแค่ใส่ที่อยู่ทั้งหมดลงในช่อง "ถนน":
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)
วัตถุ JSON ที่เป็นผลลัพธ์จะมีcomponents
วัตถุซึ่งจะมีลักษณะดังนี้:
"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"
}
การตอบกลับจะรวมการรวม first_line และ delivery_line_2 ไว้ด้วยกันดังนั้นคุณไม่จำเป็นต้องต่อข้อมูลเหล่านั้นด้วยตนเองหากคุณต้องการ