2009-02-05 6 views
24

전체 우편 주소를 사용하거나 메일 레이블로 표시하거나 사용하기 위해 서식을 지정하고 구조화 된 개체로 변환 할 수있는 유용한 도구를 찾고 있습니다. 예를 들면 그래서좋은 주소 구문 분석기의 위치

는 :

// 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 

는 지금은 정규식을 사용하여이 작업을 수행 할 수 있습니다. 하지만 까다로운 부분은 세계 어디에서나 주소를 처리 할 수있을 정도의 일반 정보를 유지하는 것입니다.

거기에는 뭔가 할 수있는 것이있을 것이라고 확신합니다.

눈치 채 셨을 경우 실제로는 opensocial.address 개체의 형식입니다.

+1

국제 주소를 가져 오는 것이 어려운 문제입니다. 나는 [일본어 주소] (http://www.japan-guide.com/e/e2224.html)가 귀하가 제시 한 street1/street2/city/state/zip 모델을 따르지 않는다는 것을 알고 있습니다. 그들은 전형적인 미국 주소와 다른 방식으로 거리, 블록 및 건물에 내려갑니다. 유럽의 다른 주소도 다릅니다. 그 정규 표현식은 유니 코드 (Unicode)가 더 좋았습니다. 왜냐하면 우리 알파벳이 충분하지 않기 때문입니다. 쉬운 문제는 아닙니다, IMO. – duffymo

+0

여기에 속합니다 : http://stackoverflow.com/questions/16413/parse-usable-street-address-city-state-zip-from-a-string 나는 미국 주소를 의미한다고 생각합니다. – danieltalsky

답변

3

@duffymo와 같은 사소한 해결책이 없기 때문에 차선책은 디자인을 재고하는 것일 수 있습니다. 그것이 사용자 양식이라면, 타협하여 사용자가 채우도록하십시오. 소급 적으로 데이터를 파싱하는 경우 매우 엄격한 정규식을 사용하여 일부 기준 (국가는 미국)에 따라 주소를 구문 분석합니다. 그런 다음 남겨진 것들에 두 번째 패스를합니다. 나는이 접근 방식을 취했으며 유일하게 신뢰할 수있는 접근 방식입니다.

일반 정규식 접근법을 사용하는 또 다른 디자인 문제는 잘못된 주소에 대해 거짓 긍정을 생성한다는 것입니다. 이 사람들에게 달팽이 메일을 보내면 수신 거부로 끝나게 될 것이므로 어떤 메일이 다시 왔는지 또는 잘못된 주소로 메일을 보내려고하는지 더 많은 일을 손으로 처리해야합니다.

24

Google지도 API는 이에 매우 잘 작동합니다. 예를 들어 '120 w 45 st nyc'문자열이 있다고 가정 해 보겠습니다. 그래서 같은 Google지도의 API로 전달 : http://maps.google.com/maps/geo?q=120+w+45+st+nyc 당신이 응답을 얻을 :

{ 
    "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

Google이 어떻게하는지 알고 싶습니다. –

+0

두 개 이상의 결과가 다시 나타날 수 있다는 경고를받습니다. 만약 당신이 '정상화'를 위해서라면 그 결과를 실패해야합니다. 얼마나 빨리 작동하는지 꽤 놀랍다. –

+3

하루에 약 15,000 건의 요청 제한이있다. 따라서 존중하고 신중하게 사용 약관을 확인하십시오. http://econym.org.uk/gmap/geomulti.htm –

3

을 나는 RecogniContact 최근 시도했다. 미국 및 유럽 주소를 구문 분석하는 Windows COM 구성 요소입니다. 웹 사이트에서 테스트 할 수 있습니다. 캐나다 주소

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

0

는, 내가 하나가 Street Perfect라고 사용했다. c++ 코드를 일부 .net에 포장하여 다시 사용할 수 있도록해야했지만 상당히 쉬웠습니다.

3

언급 한 바와 같이 이것은 사소한 문제는 아닙니다. 가장 큰 이슈 중 하나는 - 주소에 대한 표준 형식이 없으며, 주소가 잘 형성되었는지, 즉 신용 카드 번호와 같은 자체 검증이 아닌지를 말할 수 없다는 것입니다 .

주소가 실제 주소인지 확인하려면 외부 진원을 이용해야합니다. 여기에서 주소 확인 서비스가 제공됩니다. 비즈니스 요구 사항 및 응용 프로그램 요구 사항에 따라 주소 목록 또는 실시간/실제 주소 확인 서비스의 일회성 일괄 "일괄 처리"스크럽을 볼 수 있습니다. 이 문제를 쉽게 해결할 수있는 훌륭한 제공자 (비용이 다양 함)가 많이 있습니다.

저는 SmartyStreets의 창립자입니다. 우리는 CASS-certified address verification을합니다. 서식없는/원시 주소를 가져 와서 정리, 표준화 및 확인/확인 된 주소로 변환합니다. 목록의 크기에 따라 비용은 일반적으로 수 달러에 불과하며 처리 시간은 거의 순간적입니다. 일반적으로 몇 분입니다.당신이 간단한 해결책이있는 주소 파서를 찾고 있다면

6

,이 시도 :

http://usaddress.codeplex.com/

좋은 : 1. 어떤 데이터베이스가 2. 필요 없음 인터넷 검색 3. 예쁜 정확한

을 할 필요가 없습니다

나쁜 : 그것은 우리가, C#에서 3.를 해결 .NET 3.5

0 이상을 사용하기위한 2 만 작동하는 실제 주소 인 경우 1. 확인 할 수 없습니다
+0

경고 단어 - GPL 부분을 제외하고는 원했던 것 같습니다. 우리는 여전히 코드를 배포하지 않습니다. – viggity

관련 문제