Parse usable Street Address, City, State, Zip from a string [closed]

Problem: mam pole adresu z bazy danych Access, które zostało przekonwertowane na Sql Server 2005. To pole ma wszystko w jednym polu. Muszę przeanalizować poszczególne sekcje adresu do odpowiednich pól w znormalizowanej tabeli. Muszę to zrobić dla około 4000 rekordów i musi być powtarzalne.

Założenia:

  1. Przyjmij adres w USA (na razie)

  2. Załóżmy, że łańcuch wejściowy będzie czasami zawiera adresata (osobę adresowaną) i/lub drugi adres (tj. Apartament B)

  3. Stany mogą być skracane

  4. Kod Pocztowy może być standardowy 5 cyfrowy lub zip+4

  5. W niektórych przypadkach występują literówki

UPDATE: w odpowiedzi na postawione pytania, standardy nie były powszechnie przestrzegane, muszę przechowywać poszczególne wartości, nie tylko geocode i błędy oznacza literówkę (poprawione powyżej)

Próbka Data:

  • A. P. Croll & Son 2299 Lewes-Georgetown Hwy, Georgetown, DE 19947

  • 11522 Shawnee Road, Greenwood DE 19950

  • 144 Kings Highway, S. W. Dover, DE 19901

  • Intergrated Const. Usługi 2 Penns Way Suite 405 New Castle, DE 19720

  • Humes Realty 33 Bridle Ridge Court, Lewes, DE 19958

  • Nichols Wykopalisko 2742 Pulaski Hwy Newark, DE 19711

  • 2284 Bryn Zion Road, Smyrna, DE 19904

  • VEI Dover Crossroads, LLC 1500 Serpentine Road, Suite 100 Baltimore MD 21

  • 580 North Dupont Highway Dover, DE 19901

  • Box 778 Dover, DE 19903

Author: Matt, 2008-08-19

24 answers

Wykonałem wiele pracy nad tego rodzaju parsowaniem. Ponieważ są błędy, których nie dostaniesz 100% dokładności, ale jest kilka rzeczy, które możesz zrobić, aby uzyskać większość drogi, a następnie wykonać wizualny test BS. Oto ogólny sposób postępowania. To nie jest kod, bo to jest dość akademickie, aby go napisać, nie ma dziwactwa, tylko dużo obsługi ciągów.

(teraz, gdy zamieściłeś kilka przykładowych danych, wprowadziłem kilka drobnych zmian)

  1. Pracuj wstecz. Zacznij od kodu pocztowego, który będzie pod koniec i w jednym z dwóch znanych formatów: XXXXX lub XXXXX-XXXX. Jeśli to nie pojawi się, możesz założyć, że jesteś w części Miasto, Stan, poniżej.
  2. następną rzeczą, przed zip, będzie stan, i będzie to albo w formacie dwuliterowym, albo jako słowa. Wiesz, co to będzie. jest ich tylko 50. Możesz również brzmiećwydawać słowa, aby zrekompensować błędy ortograficzne.
  3. Przed tym jest miasto, a to prawdopodobnie na ta sama linia co stan. Możesz użyć bazy kodów pocztowych, aby sprawdzić miasto i stan na podstawie zip, lub przynajmniej użyć go jako detektora BS.
  4. adres ulicy będzie zazwyczaj jedną lub dwie linie. Druga linia będzie na ogół numer apartamentu, jeśli istnieje, ale może to być również Skrzynka pocztowa.
  5. wykrycie nazwy w pierwszej lub drugiej linii będzie prawie niemożliwe, jeśli nie będzie poprzedzona liczbą (lub jeśli będzie poprzedzona " attn:" lub " attention do: "to może dać ci wskazówkę, czy to nazwa, czy linia adresu.

Mam nadzieję, że to trochę pomoże.

 113
Author: Tim Sullivan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-19 15:52:05

Myślę, że outsourcing problem jest najlepszym rozwiązaniem: wysłać go do Google (lub Yahoo) geocoder. Geocoder zwraca nie tylko lat / long (które nie są tu interesujące), ale także bogate parsowanie adresu, z wypełnionymi polami, których nie wysłałeś(w tym ZIP+4 i county).

Na przykład parsowanie" 1600 Amphitheatre Parkway, Mountain View, CA " daje
{
  "name": "1600 Amphitheatre Parkway, Mountain View, CA, USA",
  "Status": {
    "code": 200,
    "request": "geocode"
  },
  "Placemark": [
    {
      "address": "1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA",
      "AddressDetails": {
        "Country": {
          "CountryNameCode": "US",
          "AdministrativeArea": {
            "AdministrativeAreaName": "CA",
            "SubAdministrativeArea": {
              "SubAdministrativeAreaName": "Santa Clara",
              "Locality": {
                "LocalityName": "Mountain View",
                "Thoroughfare": {
                  "ThoroughfareName": "1600 Amphitheatre Pkwy"
                },
                "PostalCode": {
                  "PostalCodeNumber": "94043"
                }
              }
            }
          }
        },
        "Accuracy": 8
      },
      "Point": {
        "coordinates": [-122.083739, 37.423021, 0]
      }
    }
  ]
}

Teraz to jest parseable!

 92
Author: James A. Rosen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-19 20:30:52

Oryginalny plakat prawdopodobnie długo ruszył, ale wziąłem cios w przenoszenie Perla Geo:: StreetAddress: US moduł używany przez geocoder.us do C#, wrzuciłem go na CodePlex i myślę, że ludzie natkną się na to pytanie w przyszłości może uznać je za przydatne:

US Address Parser

Na stronie głównej projektu staram się mówić o jego (bardzo realnych) ograniczeniach. Ponieważ nie jest wspierany przez bazę danych USPS ważnych Adresów Ulic, parsowanie może być niejednoznaczny i nie może potwierdzić ani zaprzeczyć ważności danego adresu. Może po prostu spróbować wyciągnąć dane z łańcucha.

Jest przeznaczony do sytuacji, gdy musisz uzyskać zestaw danych głównie w odpowiednich polach lub chcesz podać skrót do wprowadzania danych(pozwalając użytkownikom wklejać adres do pola tekstowego zamiast zakładek między wieloma polami). Jest to nie przeznaczone do sprawdzania dostępności adresu.

Nie próbuje analizować niczego powyżej linia ulicy, ale można by pewnie z regexem zrobić coś dość blisko. pewnie bym to zerwał pod numerem domu.

 25
Author: Nicholas Piasecki,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-24 21:38:50

Robiłem to w przeszłości.

Albo zrób to ręcznie, (zbuduj ładny gui, który pomaga użytkownikowi zrobić to szybko) lub zrób to automatycznie i sprawdź w oparciu o najnowszą bazę adresową (musisz to kupić) i ręcznie obsługuj błędy.

Ręczna obsługa zajmie około 10 sekund, co oznacza, że możesz zrobić 3600/10 = 360 na godzinę, więc 4000 powinno zająć około 11-12 godzin. Zapewni to wysoką dokładność.

Do automatyzacji, potrzebujesz najnowszego US baza adresowa, i dostosować swoje zasady przed tym. Sugeruję, aby nie wymyślać regex (trudne do utrzymania w dłuższej perspektywie, tyle WYJĄTKÓW). Przejdź do 90% dopasowania do bazy danych, resztę zrób ręcznie.

Pobierz kopię standardów adresowania pocztowego (USPS) na http://pe.usps.gov/cpim/ftp/pubs/Pub28/pub28.pdf i zauważ, że ma ponad 130 stron. Wyrażenia regularne do implementacji, które byłyby szalone.

Dla adresów międzynarodowych, wszystkie zakłady są wyłączone. Pracownicy z USA nie byliby w stanie / align = "left" /

Alternatywnie, Użyj usługi danych. Nie mam jednak żadnych zaleceń.

Ponadto: kiedy wysyłasz rzeczy pocztą (po to to jest, prawda?) upewnij się, że na kopercie (we właściwym miejscu) umieściłeś "żądaną korektę adresu" i zaktualizowałeś bazę danych. (Zrobiliśmy prosty gui dla osoby z recepcji, aby to zrobić; osoba, która faktycznie sortuje pocztę)

Wreszcie, po wyczyszczeniu danych, poszukaj duplikaty.

 16
Author: Christopher Mahan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-19 16:31:12

Pracuję w domenie przetwarzania adresów od około 5 lat i naprawdę nie ma srebrnej kuli. Poprawne rozwiązanie będzie zależeć od wartości danych. Jeśli nie jest zbyt cenny, wrzuć go przez parser, jak sugerują inne odpowiedzi. Jeśli jest nawet trochę cenny, na pewno będziesz musiał mieć człowieka, który oceni / poprawi wszystkie wyniki parsera. Jeśli szukasz w pełni zautomatyzowanego, powtarzalnego rozwiązania, prawdopodobnie chcesz porozmawiać z korektą adresu sprzedawca jak Group1 lub Trillium.

 13
Author: Nicholas Trandem,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-19 17:08:25

Po poradzie tutaj, opracowałem następującą funkcję w VB, która tworzy przejezdne, choć nie zawsze doskonałe (jeśli podano nazwę firmy i linię suite, łączy ona pakiet i miasto) użytecznych danych. Zapraszam do komentowania/refakturowania / krzyczenia na mnie za złamanie jednej z moich zasad itp.:

Public Function parseAddress(ByVal input As String) As Collection
    input = input.Replace(",", "")
    input = input.Replace("  ", " ")
    Dim splitString() As String = Split(input)
    Dim streetMarker() As String = New String() {"street", "st", "st.", "avenue", "ave", "ave.", "blvd", "blvd.", "highway", "hwy", "hwy.", "box", "road", "rd", "rd.", "lane", "ln", "ln.", "circle", "circ", "circ.", "court", "ct", "ct."}
    Dim address1 As String
    Dim address2 As String = ""
    Dim city As String
    Dim state As String
    Dim zip As String
    Dim streetMarkerIndex As Integer

    zip = splitString(splitString.Length - 1).ToString()
    state = splitString(splitString.Length - 2).ToString()
    streetMarkerIndex = getLastIndexOf(splitString, streetMarker) + 1
    Dim sb As New StringBuilder

    For counter As Integer = streetMarkerIndex To splitString.Length - 3
        sb.Append(splitString(counter) + " ")
    Next counter
    city = RTrim(sb.ToString())
    Dim addressIndex As Integer = 0

    For counter As Integer = 0 To streetMarkerIndex
        If IsNumeric(splitString(counter)) _
            Or splitString(counter).ToString.ToLower = "po" _
            Or splitString(counter).ToString().ToLower().Replace(".", "") = "po" Then
                addressIndex = counter
            Exit For
        End If
    Next counter

    sb = New StringBuilder
    For counter As Integer = addressIndex To streetMarkerIndex - 1
        sb.Append(splitString(counter) + " ")
    Next counter

    address1 = RTrim(sb.ToString())

    sb = New StringBuilder

    If addressIndex = 0 Then
        If splitString(splitString.Length - 2).ToString() <> splitString(streetMarkerIndex + 1) Then
            For counter As Integer = streetMarkerIndex To splitString.Length - 2
                sb.Append(splitString(counter) + " ")
            Next counter
        End If
    Else
        For counter As Integer = 0 To addressIndex - 1
            sb.Append(splitString(counter) + " ")
        Next counter
    End If
    address2 = RTrim(sb.ToString())

    Dim output As New Collection
    output.Add(address1, "Address1")
    output.Add(address2, "Address2")
    output.Add(city, "City")
    output.Add(state, "State")
    output.Add(zip, "Zip")
    Return output
End Function

Private Function getLastIndexOf(ByVal sArray As String(), ByVal checkArray As String()) As Integer
    Dim sourceIndex As Integer = 0
    Dim outputIndex As Integer = 0
    For Each item As String In checkArray
        For Each source As String In sArray
            If source.ToLower = item.ToLower Then
                outputIndex = sourceIndex
                If item.ToLower = "box" Then
                    outputIndex = outputIndex + 1
                End If
            End If
            sourceIndex = sourceIndex + 1
        Next
        sourceIndex = 0
    Next
    Return outputIndex
End Function

Przekazując parseAddress funkcję "A. P. Croll & Son 2299 Lewes-Georgetown Hwy, Georgetown, DE 19947" zwraca:

2299 Lewes-Georgetown Hwy
A. P. Croll & Son  
Georgetown
DE
19947
 12
Author: Rob Allen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-24 18:05:03

SmartyStreets ma nową funkcję, która wyodrębnia adresy z dowolnych ciągów wejściowych. (Uwaga: nie pracuję w SmartyStreets.)

Udało się wyodrębnić wszystkie adresy z przykładowych danych wejściowych podanych w powyższym pytaniu. (Nawiasem mówiąc, tylko 9 z tych 10 adresów jest ważnych.)

Oto niektóre z wyjść: Tutaj wpisz opis obrazka

A oto wyjście w formacie CSV tego samego żądania:

ID,Start,End,Segment,Verified,Candidate,Firm,FirstLine,SecondLine,LastLine,City,State,ZIPCode,County,DpvFootnotes,DeliveryPointBarcode,Active,Vacant,CMRA,MatchCode,Latitude,Longitude,Precision,RDI,RecordType,BuildingDefaultIndicator,CongressionalDistrict,Footnotes
1,32,79,"2299 Lewes-Georgetown Hwy, Georgetown, DE 19947",N,,,,,,,,,,,,,,,,,,,,,,
2,81,119,"11522 Shawnee Road, Greenwood DE 19950",Y,0,,11522 Shawnee Rd,,Greenwood DE 19950-5209,Greenwood,DE,19950,Sussex,AABB,199505209226,Y,N,N,Y,38.82865,-75.54907,Zip9,Residential,S,,AL,N#
3,121,160,"144 Kings Highway, S.W. Dover, DE 19901",Y,0,,144 Kings Hwy,,Dover DE 19901-7308,Dover,DE,19901,Kent,AABB,199017308444,Y,N,N,Y,39.16081,-75.52377,Zip9,Commercial,S,,AL,L#
4,190,232,"2 Penns Way Suite 405 New Castle, DE 19720",Y,0,,2 Penns Way Ste 405,,New Castle DE 19720-2407,New Castle,DE,19720,New Castle,AABB,197202407053,Y,N,N,Y,39.68332,-75.61043,Zip9,Commercial,H,,AL,N#
5,247,285,"33 Bridle Ridge Court, Lewes, DE 19958",Y,0,,33 Bridle Ridge Cir,,Lewes DE 19958-8961,Lewes,DE,19958,Sussex,AABB,199588961338,Y,N,N,Y,38.72749,-75.17055,Zip7,Residential,S,,AL,L#
6,306,339,"2742 Pulaski Hwy Newark, DE 19711",Y,0,,2742 Pulaski Hwy,,Newark DE 19702-3911,Newark,DE,19702,New Castle,AABB,197023911421,Y,N,N,Y,39.60328,-75.75869,Zip9,Commercial,S,,AL,A#
7,341,378,"2284 Bryn Zion Road, Smyrna, DE 19904",Y,0,,2284 Bryn Zion Rd,,Smyrna DE 19977-3895,Smyrna,DE,19977,Kent,AABB,199773895840,Y,N,N,Y,39.23937,-75.64065,Zip7,Residential,S,,AL,A#N#
8,406,450,"1500 Serpentine Road, Suite 100 Baltimore MD",Y,0,,1500 Serpentine Rd Ste 100,,Baltimore MD 21209-2034,Baltimore,MD,21209,Baltimore,AABB,212092034250,Y,N,N,Y,39.38194,-76.65856,Zip9,Commercial,H,,03,N#
9,455,495,"580 North Dupont Highway Dover, DE 19901",Y,0,,580 N DuPont Hwy,,Dover DE 19901-3961,Dover,DE,19901,Kent,AABB,199013961803,Y,N,N,Y,39.17576,-75.5241,Zip9,Commercial,S,,AL,N#
10,497,525,"P.O. Box 778 Dover, DE 19903",Y,0,,PO Box 778,,Dover DE 19903-0778,Dover,DE,19903,Kent,AABB,199030778781,Y,N,N,Y,39.20946,-75.57012,Zip5,Residential,P,,AL,

Byłem deweloperem, który pierwotnie napisał serwis. Algorytm my zaimplementowany jest nieco inny od konkretnych odpowiedzi tutaj, ale każdy wyodrębniony adres jest weryfikowany w API wyszukiwania adresów, więc możesz być pewien, czy jest poprawny, czy nie. Każdy zweryfikowany wynik jest gwarantowany, ale wiemy, że inne wyniki nie będą doskonałe, ponieważ, jak zostało uczynione {11]} w tym wątku, adresy są nieprzewidywalne, nawet dla ludzi czasami.

 9
Author: Matt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-12 21:55:00
To nie rozwiąże Twojego problemu, ale jeśli potrzebne są tylko dane lat/long dla te adresy, Google Maps API będzie analizować Nie sformatowane adresy całkiem dobrze.

Dobra sugestia, alternatywnie możesz wykonać CURL request dla każdego adresu do Google Maps i zwróci poprawnie sformatowany adres. Od tego, można regex do zawartości serca.

 8
Author: Kevin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-19 16:51:08

+ 1 na temat sugerowanego rozwiązania Jamesa A. Rosena, ponieważ działa dobrze dla mnie, jednak dla completistów ta strona jest fascynującą lekturą i najlepszą próbą, jaką widziałem w dokumentowaniu adresów na całym świecie: http://www.columbia.edu/kermit/postal.html

 7
Author: weston,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-26 21:38:10

Czy są jakieś standardy w sposobie zapisu adresów? Na przykład:

  1. Czy zawsze są przecinki lub nowe-linie oddzielające street1 od street2 od city od state od zip?
  2. Czy typy adresów (Droga, ulica, Bulwar itp.) są zawsze pisane? zawsze skracane? Niektóre z nich?
  3. Zdefiniuj "błąd".

Moja odpowiedź ogólna jest serią wyrażeń regularnych, choć złożoność tego zależy od odpowiedzi. A jeśli nie ma spójność w ogóle, to może być tylko w stanie osiągnąć częściowy sukces z Regex( czyli: filtrowanie kodu pocztowego i stanu) i będzie musiał zrobić resztę ręcznie (lub przynajmniej przejść przez resztę bardzo ostrożnie, aby upewnić się, że zauważysz błędy).

 6
Author: Yaakov Ellis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-19 15:40:18

Kolejna Prośba o przykładowe dane.

Jak już wspomniano, pracowałbym wstecz z zip.

Gdy masz zip, odpytywałbym bazę danych zip, przechowywał wyniki i usuwał je & zip z łańcucha.

To zostawi cię z bałaganem adresowym. Większość (Wszystkie?) adresy zaczną się od liczby, więc znajdź pierwsze wystąpienie liczby w pozostałym łańcuchu i chwyć wszystko od niego do (nowego) końca łańcucha. To będzie twój adres. Anything na lewo od tego numeru jest prawdopodobnie adresat.

Powinieneś mieć teraz Miasto , Stan, & Zip zapisane w tabeli i ewentualnie dwa ciągi znaków, adresat i adres. Aby uzyskać adres, sprawdź istnienie "Suite" lub " Apt."itd. i podziel to na dwie wartości(linie adresowe 1 i 2).

Dla adresata chciałbym punt i chwycić ostatnie słowo tego ciągu jako nazwisko i umieścić resztę w polu imię. Jeśli nie chcesz tego robić, musisz sprawdzić, czy pozdrawiam (Pan, Pani, dr itd.)) na początku i poczynić pewne założenia na podstawie liczby spacji co do sposobu tworzenia nazwy.

Myślę, że nie ma sposobu, aby parsować ze 100% dokładnością.

 6
Author: Chuck,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-19 16:03:28

Try www.address-parser.com. korzystamy z ich serwisu internetowego, który można przetestować online

 6
Author: We Know,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-08 14:53:10

Na podstawie przykładowych danych:

  1. Zacząłbym od końca sznurka. Parse a Zip-code (either format). Czytaj koniec do pierwszej spacji. Jeśli nie znaleziono kodu pocztowego błąd.

  2. Przycinanie końca dla spacji i znaków specjalnych (przecinków)

  3. Następnie przejdź do stanu, ponownie użyj spacji jako ogranicznika. Może użyć listy wyszukiwania, aby zweryfikować dwuliterowe kody stanu i pełne nazwy Stanów. Jeśli nie znaleziono poprawnego stanu, błąd.

  4. Miejsca przycinania i przecinki od końca.

  5. Miasto robi się trudne, w rzeczywistości użyłbym przecinka tutaj, ryzykując uzyskanie zbyt dużej ilości danych w mieście. Poszukaj przecinka lub początku linii.

  6. Jeśli nadal masz znaki w łańcuchu, wrzuć to wszystko do pola adresu.

To nie jest idealne, ale powinno być całkiem dobrym punktem wyjścia.

 5
Author: Jay Mooney,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-19 15:55:41

Jeśli są to dane wprowadzone przez człowieka, to spędzasz zbyt dużo czasu próbując kodować wyjątki.

Try:

  1. Wyrażenie regularne do wyodrębniania kodu pocztowego

  2. Wyszukiwanie kodu pocztowego (poprzez odpowiedni rząd DB), aby uzyskać poprawny adres

  3. Poproś stażystę, aby ręcznie zweryfikował nowe dane pasujące do starego

 4
Author: engtech,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-19 16:47:16

To nie rozwiąże Twojego problemu, ale jeśli potrzebujesz tylko danych lat/long dla tych adresów, Google Maps API będzie analizować niesformatowane adresy całkiem dobrze.

 3
Author: pix0r,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-19 15:40:15

RecogniContact jest obiektem COM systemu Windows, który przetwarza adresy amerykańskie i europejskie. Możesz spróbować na http://www.loquisoft.com/index.php?page=8

 3
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-12 14:07:31

Może chcesz to sprawdzić!! http://jgeocoder.sourceforge.net/parser.html Zadziałało jak urok dla mnie.

 3
Author: CoolDude,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-15 01:23:49

Tego typu problem jest trudny do rozwiązania ze względu na podstawowe niejasności w danych.

Oto rozwiązanie oparte na perlu, które definiuje rekurencyjne drzewo gramatyczne bazujące na wyrażeniach regularnych do analizy wielu poprawnych kombinacji Adresów Ulic: http://search.cpan.org / ~ kimryan / Lingua-EN-Addresparse-1.20/lib/Lingua/EN / Addresparse.pm. Obejmuje to sub właściwości w ramach adresu, takich jak: 12 1st Avenue N Suite # 2 Somewhere CA 12345 USA

Jest podobny do http://search.cpan.org/ ~ timb / Geo-StreetAddress-US-1.03/US.pm wspomniano powyżej, ale działa również dla adresów, które nie są z USA, takich jak Wielka Brytania, Australia i Kanada.

Oto wyjście dla jednego z Twoich przykładowych adresów. Zauważ, że sekcja nazwy musiałaby być usunięta najpierw z "A. P. Croll & Son 2299 Lewes-Georgetown Hwy, Georgetown, DE 19947", aby zmniejszyć ją do "2299 Lewes-Georgetown Hwy, Georgetown, DE 19947". Można to łatwo osiągnąć, usuwając wszystkie dane aż do pierwsza liczba znaleziona w łańcuchu.

Non matching part       ''
Error                   '0'
Error descriptions      ''
Case all                '2299 Lewes-Georgetown Hwy Georgetown DE 19947'
COMPONENTS              ''
country                 ''
po_box_type             ''
post_box                ''
post_code               '19947'
pre_cursor              ''
property_identifier     '2299'
property_name           ''
road_box                ''
street                  'Lewes-Georgetown'
street_direction        ''
street_type             'Hwy'
sub_property_identifier ''
subcountry              'DE'
suburb                  'Georgetown'
 3
Author: Kim Ryan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-01 12:00:54

Ponieważ istnieje szansa na błąd w programie word, pomyśl o użyciu SOUNDEX w połączeniu z algorytmem LCS do porównywania ciągów, to bardzo pomoże !

 2
Author: anand,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-22 12:49:26

Korzystanie z google API

$d=str_replace(" ", "+", $address_url);
$completeurl ="http://maps.googleapis.com/maps/api/geocode/xml?address=".$d."&sensor=true"; 
$phpobject = simplexml_load_file($completeurl);
print_r($phpobject);
 2
Author: komal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-09 09:48:49

Dla programistów ruby lub rails dostępny jest ładny klejnot o nazwie street_address . Używam tego w jednym z moich projektów i wykonuje pracę, której potrzebuję.

Jedynym problemem, jaki miałem, było to, że gdy adres jest w tym formacie P. O. Box 1410 Durham, NC 27702 zwracał Zero i dlatego musiałem zastąpić "P. O. Box "przez" i po tym było w stanie go przeanalizować.

 2
Author: Sachin Prasad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-01 21:08:45

Istnieją usługi danych, które podane Kod Pocztowy daje listę nazw ulic w tym kodzie pocztowym.

Użyj wyrażenia regularnego, aby wyodrębnić Zip lub stan miasta - Znajdź poprawny lub jeśli błąd dostanie oba. wyciągnij listę ulic ze źródła danych popraw miasto i stan, a następnie adres ulicy. Po uzyskaniu poprawnej linii adresu 1, Miasto, Stan i zip można następnie dokonać założeń na linii adresu 2..3

 1
Author: AdamSane,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-19 15:52:48

Nie wiem jak by to było wykonalne, ale nie widziałem tego wspominanego, więc pomyślałem, że zaproponuję to:

Jeśli jesteś wyłącznie w USA... uzyskaj ogromną bazę danych wszystkich kodów pocztowych, Stanów, miast i ulic. Poszukaj tego w swoich adresach. Możesz sprawdzić, czy np. znalezione miasto istnieje w takim stanie, w jakim je znalazłeś, lub sprawdzić, czy znaleziona ulica istnieje w znalezionym mieście. Jeśli nie, są szanse, że John nie jest dla John ' s street, ale to nazwisko adresata... Zasadniczo zdobądź jak najwięcej informacji i sprawdź swoje adresy. Ekstremalnym przykładem byłoby uzyskanie listy wszystkich adresów w USA A, a następnie znalezienie, który z nich ma najbardziej odpowiedni pasujący do każdego z twoich adresów...

 1
Author: Shawn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-01 02:50:01

Istnieje Port javascript Perla Geo:: StreetAddress:: US package: https://github.com/hassansin/parse-address . Jest oparty na regex i działa dość dobrze.

 1
Author: hassansin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-13 01:33:31