2009-02-05 7 views
24

Tôi đang tìm một công cụ tốt có thể lấy địa chỉ gửi thư đầy đủ, được định dạng để hiển thị hoặc sử dụng với nhãn thư và chuyển đổi nó thành đối tượng có cấu trúc.Trình phân tích địa chỉ tốt ở đâu

Vì vậy, ví dụ:

// Start with a formatted address in a single string 
string f = "18698 E. Main Street\r\nBig Town, AZ, 86011"; 

// Parse into address 
Address addr = new Address(f); 

addr.Street; // 18698 E. Main Street 
addr.Locality; // Big Town 
addr.Region; // AZ 
addr.PostalCode; // 86011 

Bây giờ tôi có thể làm điều này bằng RegEx. Nhưng phần khó khăn là giữ cho nó đủ chung để xử lý bất kỳ địa chỉ nào trên thế giới!

Tôi chắc chắn phải có thứ gì đó ở đó có thể làm được.

Nếu có ai nhận thấy, đây thực sự là định dạng của đối tượng opensocial.address.

+1

Đây là một vấn đề khó khăn khi bạn đưa địa chỉ quốc tế vào hỗn hợp. Tôi biết rằng [các địa chỉ tiếng Nhật] (http://www.japan-guide.com/e/e2224.html) không tuân theo mô hình đường phố1/street2/thành phố/tiểu bang/zip mà bạn đã trình bày. Họ đi xuống đường phố, chặn và xây dựng theo cách khác với các địa chỉ điển hình của Hoa Kỳ. Các địa chỉ khác ở Châu Âu cũng khác nhau. Regex đó tốt hơn là Unicode, vì bảng chữ cái của chúng ta sẽ không đủ. Không phải là một vấn đề dễ dàng, IMO. – duffymo

+0

Ngừng điều này: http://stackoverflow.com/questions/16413/parse-usable-street-address-city-state-zip-from-a-string Tôi cho rằng bạn có nghĩa là Địa chỉ Hoa Kỳ. – danieltalsky

Trả lời

3

Vì không có giải pháp nhỏ như @duffymo cho biết, điều tốt nhất tiếp theo có thể là xem xét lại thiết kế. Nếu đó là biểu mẫu người dùng, hãy thỏa hiệp và cho phép người dùng điền vào. Nếu bạn đang phân tích dữ liệu hồi tố, sau đó sử dụng một regex rất nghiêm ngặt để phân tích các địa chỉ dựa trên một số tiêu chí (quốc gia là Hoa Kỳ). Sau đó thực hiện một lần thứ hai vượt qua ở những người còn lại và như vậy. Tôi đã thực hiện phương pháp này và đó là cách tiếp cận đáng tin cậy duy nhất.

Một vấn đề thiết kế khác với cách tiếp cận regex chung là nó sẽ tạo ra kết quả dương tính giả cho các địa chỉ không hợp lệ. Nếu bạn đang gửi thư ốc cho những người này, nó sẽ kết thúc nảy và bạn sẽ có nhiều công việc hơn trong tay của bạn cố gắng để sắp xếp ra những cái đã trở lại hoặc tiếp tục gửi thư đến địa chỉ sai.

24

API Googlemaps hoạt động khá tốt cho việc này. Ví dụ: giả sử bạn được cung cấp chuỗi "120 w 45 st nyc". Chuyển nó vào API Googlemaps như sau: http://maps.google.com/maps/geo?q=120+w+45+st+nyc và bạn nhận được phản hồi này:

{ 
    "name": "120 w 45 st nyc", 
    "Status": { 
    "code": 200, 
    "request": "geocode" 
    }, 
    "Placemark": [ { 
    "id": "p1", 
    "address": "120 W 45th St, New York, NY 10036, USA", 
    "AddressDetails": {"Country": {"CountryNameCode": "US","CountryName": "USA","AdministrativeArea": {"AdministrativeAreaName": "NY","Locality": {"LocalityName": "New York","Thoroughfare":{"ThoroughfareName": "120 W 45th St"},"PostalCode": {"PostalCodeNumber": "10036"}}}},"Accuracy": 8}, 
    "ExtendedData": { 
     "LatLonBox": { 
     "north": 40.7603883, 
     "south": 40.7540931, 
     "east": -73.9807141, 
     "west": -73.9870093 
     } 
    }, 
    "Point": { 
     "coordinates": [ -73.9838617, 40.7572407, 0 ] 
    } 
    } ] 
} 
+9

Tôi đoán tôi muốn biết Google hoạt động như thế nào. –

+0

chỉ được cảnh báo bạn có thể nhận được nhiều hơn một kết quả. nếu bạn làm như vậy cho mục đích 'bình thường hóa' bạn sẽ phải thất bại kết quả. khá ngạc nhiên về tốc độ hoạt động của nó mặc dù –

+3

Có giới hạn khoảng 15.000 yêu cầu mỗi ngày. Vì vậy, hãy tôn trọng và cẩn thận và kiểm tra điều khoản sử dụng http://econym.org.uk/gmap/geomulti.htm –

3

Tôi đã thử RecogniContact gần đây. Nó là một thành phần COM của Windows phân tích địa chỉ của Hoa Kỳ và Châu Âu. Bạn có thể kiểm tra nó từ trang web.

http://www.loquisoft.com/index.php?page=8

0

Đối với địa chỉ Canada, tôi đã sử dụng một tên Street Perfect. Chúng tôi đã phải bọc mã c++ ở một số .net để làm cho nó có thể sử dụng lại được cho mục đích của chúng tôi, nhưng điều đó khá dễ dàng.

3

Như đã đề cập, đây không phải là vấn đề tầm thường. Một trong những vấn đề lớn nhất - ngoài các địa chỉ quốc tế - là không có định dạng chuẩn cho địa chỉ và địa chỉ không thể cho bạn biết nếu địa chỉ được định dạng tốt, tức là địa chỉ không tự xác thực như số thẻ tín dụng .

Vì lý do này, bạn phải dựa vào nguồn bên ngoài của sự thật để đảm bảo địa chỉ là có thật. Đây là nơi dịch vụ xác minh địa chỉ được đưa vào danh sách kết hợp. Tùy thuộc vào nhu cầu kinh doanh và yêu cầu ứng dụng của bạn, bạn có thể xem xét một lần chà "hàng loạt" danh sách địa chỉ của bạn hoặc có thể là dịch vụ xác thực địa chỉ/thời gian thực. Có một số nhà cung cấp tốt (thay đổi về chi phí) có thể dễ dàng giải quyết vấn đề này.

Tôi nên đề cập đến rằng tôi là người sáng lập SmartyStreets. Chúng tôi làm CASS-certified address verification. Chúng tôi sẽ lấy địa chỉ chưa được định dạng/thô của bạn và biến chúng thành địa chỉ đã được làm sạch, chuẩn hóa và xác minh/xác nhận. Tùy thuộc vào kích thước của danh sách của bạn, chi phí thường chỉ là một vài đô la và thời gian quay vòng gần như ngay lập tức - thường là một vài phút.

6

Nếu bạn đang tìm kiếm một phân tích cú pháp địa chỉ với một giải pháp đơn giản, hãy thử này:

http://usaddress.codeplex.com/

Tốt: 1. Không cơ sở dữ liệu cần thiết 2. Không tra cứu internet cần 3. Khá chính xác

Xấu: 1. Không thể xác nhận nếu đó là địa chỉ thực 2. Chỉ hoạt động cho địa chỉ Hoa Kỳ 3. trong C#, hãy sử dụng .NET 3.5 trở lên

+0

lời cảnh báo nhanh chóng - trông giống như chính xác muốn tôi ... ngoại trừ phần GPL. Chúng tôi không phân phối mã của chúng tôi, vẫn còn. – viggity