Analyser l'adresse de rue Utilisable, la ville, L'État, le Zip à partir d'une chaîne [fermé]

Problème: j'ai un champ d'adresse d'une base de données Access qui a été converti en Sql Server 2005. Ce champ a tout dans un seul champ. J'ai besoin d'analyser les différentes sections de l'adresse dans leurs champs dans une table normalisée. Je dois le faire pour environ 4 000 enregistrements et il doit être reproductible.

Hypothèses:

  1. Supposons une adresse aux états-unis (pour l'instant)

  2. Supposons que la chaîne d'entrée parfois contenir un destinataire (la personne qui s'adresse) et/ou une deuxième adresse (c.-À-D. Suite B)

  3. Les États peuvent être abrégées

  4. Code Postal pourrait être de série à 5 chiffres ou zip+4

  5. Il y a des fautes de frappe, dans certains cas,

Mise à jour: en réponse aux questions posées, les normes n'ont pas été universellement suivies, j'ai besoin de stocker les valeurs individuelles, pas seulement le géocode et les erreurs signifient la faute de frappe (corrigée ci-dessus)

Échantillon Données:

  • A. P. Croll & Fils 2299 Lewes-Georgetown Autoroute, Georgetown, DE 19947

  • 11522 il S'agit de L'un des plus grands centres urbains de France.]}

  • 144 Route des Rois, s.-o. de Dover, DE 19901

  • Const. Services 2 Penns Way Suite 405 New Castle, de 19720

  • Il S'agit de la première version de la série.]}

  • Nichols Excavation 2742 Pulaski l'Autoroute Newark, DE 19711

  • 2284 Bryn Sion De La Route, Smyrne, de 19904

  • VEI Douvres Carrefour, LLC 1500 Serpentine Road, Suite 100 Baltimore MD 21

  • 580 North Dupont Highway Dover, de 19901

  • P. O. Box 778 Dover, de 19903

124
demandé sur Matt 2008-08-19 19:34:41

24 réponses

J'ai fait beaucoup de travail sur ce type d'analyse. Parce qu'il y a des erreurs, vous n'obtiendrez pas 100% de précision, mais il y a quelques choses que vous pouvez faire pour obtenir la plupart du chemin, puis faire un test visuel BS. Voici la façon générale de s'y prendre. Ce n'est pas du code, parce que c'est assez académique de l'écrire, il n'y a pas d'étrangeté, juste beaucoup de manipulation de chaînes.

(maintenant que vous avez posté des exemples de données, j'ai apporté quelques modifications mineures)

  1. travailler en arrière. Commencez à partir du code postal, qui sera près de la fin, et dans l'un des deux formats connus: XXXXX ou XXXXX-XXXX. Si cela n'apparaît pas, vous pouvez supposer que vous êtes dans la partie ville, état, ci-dessous.
  2. La prochaine chose, avant le zip, va être l'état, et ce sera soit dans un format de deux lettres, soit sous forme de mots. Vous savez ce que ce sera, aussi -- il n'y en a que 50. Aussi, vous pouvez soundex les mots pour aider à compenser les erreurs d'orthographe.
  3. avant que la ville, et c'est probablement sur l' même ligne que l'état. Vous pouvez utiliser une base de données Code postal pour vérifier la ville et l'état en fonction du zip, ou au moins l'utiliser comme un détecteur BS.
  4. l'adresse municipale sera généralement d'une ou deux lignes. La deuxième ligne sera généralement le numéro de série s'il en est, mais il pourrait aussi être une boîte POSTALE.
  5. il sera presque impossible de détecter un nom sur la première ou la deuxième ligne, mais s'il n'est pas préfixé par un nombre (ou s'il est préfixé par un "attn:" ou " attention pour:" il pourrait vous donner un indice quant à savoir si c'est un nom ou une adresse de ligne.

J'espère que cela aide un peu.

113
répondu Tim Sullivan 2008-08-19 15:52:05

Je pense que l'externalisation du problème est le meilleur pari: l'envoyer au géocodeur Google (ou Yahoo). Le géocodeur renvoie non seulement le lat / long (qui ne sont pas d'intérêt ici), mais aussi une analyse riche de l'adresse, avec des champs remplis que vous n'avez pas envoyés (y compris ZIP+4 et county).

Par exemple, l'analyse de "1600 Amphitheatre Parkway, Mountain View, CA" donne

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

Maintenant c'est analysable!

92
répondu James A. Rosen 2008-08-19 20:30:52

L'affiche originale a probablement longtemps évolué, mais j'ai pris un coup de poignard pour porter le module Perl Geo:: StreetAddress: US utilisé par geocoder.us à C#, l'a jeté sur CodePlex, et pense que les gens qui trébuchent sur cette question à l'avenir pourraient le trouver utile:

Analyseur D'adresses US

Sur la page d'accueil du projet, j'essaie de parler de ses limites (très réelles). Comme il n'est pas soutenu par la base de données USPS des adresses de rue valides, l'analyse peut être ambigu et il ne peut pas confirmer ni nier la validité d'une adresse donnée. Il peut simplement essayer de retirer des données de la chaîne.

Il est destiné au cas où vous devez obtenir un ensemble de données principalement dans les bons champs, ou souhaitez fournir un raccourci vers la saisie de données (permettant aux utilisateurs de coller une adresse dans une zone de texte plutôt que de tabuler entre plusieurs champs). Il est Pas destiné à vérifier la délivrabilité d'une adresse.

Il ne tente pas d'analyser quoi que ce soit au-dessus du ligne de rue, mais on pourrait probablement faire avec l'expression rationnelle pour obtenir quelque chose de raisonnablement proche-je le casserais probablement au numéro de la maison.

25
répondu Nicholas Piasecki 2011-12-24 21:38:50

Je l'ai fait dans le passé.

Soit le faire manuellement, (construire une belle interface graphique qui aide l'utilisateur à le faire rapidement) ou l'automatiser et vérifier par rapport à une base de données d'adresses récente (vous devez l'acheter) et gérer manuellement les erreurs.

La manipulation manuelle prendra environ 10 secondes chacune, ce qui signifie que vous pouvez faire 3600/10 = 360 par heure, donc 4000 devrait vous prendre environ 11-12 heures. Cela vous donnera un taux élevé de précision.

Pour l'automatisation, vous avez besoin d'un base de données d'adresses, et modifier vos règles contre cela. Je suggère de ne pas aller de fantaisie sur la regex (difficile à maintenir à long terme, tant d'exceptions). Aller pour 90% match contre la base de données, faire le reste manuellement.

Obtenez une copie des normes D'adressage Postal (USPS) à http://pe.usps.gov/cpim/ftp/pubs/Pub28/pub28.pdf {[12] } et remarquez qu'il fait plus de 130 pages. Regex pour implémenter ce serait nuts.

Pour les adresses internationales, tous les paris sont désactivés. Les travailleurs basés aux États-Unis ne seraient pas en mesure valider.

Vous pouvez également utiliser un service de données. Je n'ai cependant aucune recommandation.

En outre: quand vous envoyez les choses dans le courrier (c'est à ça que ça sert, non?) assurez-vous de mettre "correction d'adresse demandée" sur l'enveloppe (au bon endroit) et mettre à jour La base de données. (Nous avons fait une interface graphique simple pour la personne de la réception pour le faire; la personne qui trie réellement par la poste)

Enfin, lorsque vous avez des données épurées, recherchez dupliquer.

16
répondu Christopher Mahan 2008-08-19 16:31:12

Je travaille dans le domaine du traitement des adresses depuis environ 5 ans maintenant, et il n'y a vraiment pas de solution miracle. La bonne solution va dépendre de la valeur des données. Si ce n'est pas très précieux, lancez-le dans un analyseur comme le suggèrent les autres réponses. Si c'est même un peu précieux, vous aurez certainement besoin d'un humain pour évaluer / corriger tous les résultats de l'analyseur. Si vous êtes à la recherche d'une solution entièrement automatisée et reproductible, vous voudrez probablement parler à une correction d'adresse fournisseur comme Group1 ou Trillium.

13
répondu Nicholas Trandem 2008-08-19 17:08:25

Après le Conseil ici, j'ai conçu la fonction suivante dans VB qui crée passable, mais pas toujours parfait (si un nom d'entreprise et une ligne de suite sont donnés, il combine la suite et la ville) données utilisables. N'hésitez pas à commenter / refactor/me crier dessus pour avoir enfreint l'une de mes propres règles, etc.:

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

En passant la fonction parseAddress "A. P. Croll & Son 2299 Lewes-Georgetown Hwy, Georgetown, de 19947" renvoie:

2299 Lewes-Georgetown Hwy
A. P. Croll & Son  
Georgetown
DE
19947
12
répondu Rob Allen 2013-09-24 18:05:03

SmartyStreets a une nouvelle fonctionnalité qui extrait les adresses de chaînes d'entrée arbitraires. (Note: Je ne travaille pas chez SmartyStreets.)

Il a réussi à extraire toutes les adresses de l'exemple d'entrée donné dans la question ci-dessus. (En passant, seulement 9 de ces 10 adresses sont valides.)

Voici une partie de la sortie:entrez la description de l'image ici

Et voici la sortie au format CSV de cette même requête:

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,

J'étais le développeur qui a écrit le service à l'origine. L'algorithme que nous avons implémenté est un peu différent de toutes les réponses spécifiques ici, mais chaque adresse extraite est vérifiée par rapport à l'API de recherche d'adresse, vous pouvez donc être sûr qu'elle est valide ou non. Chaque résultat Vérifié est garanti, mais nous savons que les autres résultats ne seront pas parfaits parce que, comme cela a été fait très clairement dans ce fil, les adresses sont imprévisibles, même pour les humains parfois.

9
répondu Matt 2015-06-12 21:55:00

Cela ne résoudra pas votre problème, mais si vous avez seulement besoin de données lat / long pour ces adresses, L'API Google Maps analysera les adresses non formatées plutôt bien.

Bonne suggestion, sinon vous pouvez exécuter une requête CURL pour chaque adresse à Google Maps et il retournera l'adresse correctement formatée. De cela, vous pouvez regex au contenu de votre cœur.

8
répondu Kevin 2008-08-19 16:51:08

+ 1 sur la solution suggérée par James A. Rosen car elle a bien fonctionné pour moi, cependant pour les completists, ce site est une lecture fascinante et la meilleure tentative que j'ai vue dans la Documentation des adresses dans le monde entier: http://www.columbia.edu/kermit/postal.html

7
répondu weston 2011-07-26 21:38:10

Y a-t-il des normes dans la façon dont les adresses sont enregistrées? Par exemple:

  1. y a-t-il toujours des virgules ou de nouvelles lignes séparant street1 de street2 de la ville de l'état de zip?
  2. les types d'adresses (route, rue, boulevard, etc.) sont-ils toujours indiqués? toujours en abrégé? Un peu de chaque?
  3. Définir "erreur".

Ma réponse générale est une série d'Expressions régulières, bien que la complexité de cela dépend de la réponse. Et si il n'y a pas de cohérence du tout, alors vous ne pouvez être en mesure d'atteindre un succès partiel avec une expression rationnelle (c'est-à-dire: filtrer le code postal et l'état) et devra faire le reste à la main (ou au moins passer par le reste très soigneusement pour vous assurer de repérer les erreurs).

6
répondu Yaakov Ellis 2008-08-19 15:40:18

Une autre demande d'exemple de données.

Comme cela a été mentionné, je travaillerais en arrière à partir du zip.

Une fois que vous avez un zip, j'interrogerais une base de données zip, stockerais les résultats et les supprimerais et le zip de la chaîne.

Cela vous laissera avec le désordre d'adresse. La PLUPART (Toutes?) les adresses commenceront par un nombre afin de trouver la première occurrence d'un nombre dans la chaîne restante et de saisir tout à partir de la (nouvelle) fin de la chaîne. Qui sera votre adresse. Quoi à gauche de ce numéro se trouve probablement un destinataire.

Vous devriez maintenant avoir la ville, L'état et le Zip stockés dans une table et éventuellement deux chaînes, destinataire et adresse. Pour l'adresse, vérifiez l'existence de "Suite" ou " Apt." etc. et divisez cela en deux valeurs (lignes d'adresse 1 et 2).

Pour le destinataire, je voudrais lancer et saisir le dernier mot de cette chaîne comme nom de famille et mettre le reste dans le champ Prénom. Si vous ne voulez pas faire cela, vous devrez vérifier titre (M., Mme, Dr, etc.) au début et faire quelques hypothèses basées sur le nombre d'espaces quant à la façon dont le nom est composé.

Je ne pense pas qu'il y ait un moyen d'analyser avec une précision de 100%.

6
répondu Chuck 2008-08-19 16:03:28

Essayez www.address-parser.com . nous utilisons leur service web, que vous pouvez tester en ligne

6
répondu We Know 2010-02-08 14:53:10

Basé sur les données de l'échantillon:

  1. Je commencerais à la fin de la chaîne. Analyser un code postal (dans les deux formats). Lire fin au premier espace. Si Aucun Code Postal N'a été trouvé erreur.

  2. Couper la fin puis pour les espaces et les caractères spéciaux (virgules)

  3. Ensuite, passez à L'État, utilisez à nouveau l'espace comme délimiteur. Peut-être utiliser une liste de recherche pour valider les codes d'état de 2 Lettres et les noms d'état complets. Si aucun état valide trouvé, erreur.

  4. Garniture des espaces et des virgules de la fin à nouveau.

  5. La ville devient délicate, j'utiliserais une virgule ici, au risque d'obtenir trop de données dans la ville. Recherchez la virgule, ou le début de la ligne.

  6. Si vous avez encore des caractères dans la chaîne, insérez tout cela dans un champ d'adresse.

Ce n'est pas parfait, mais cela devrait être un très bon point de départ.

5
répondu Jay Mooney 2008-08-19 15:55:41

S'il s'agit de données saisies par des humains, vous passerez trop de temps à essayer de coder les exceptions.

Essayez:

  1. Expression régulière pour extraire le code postal

  2. Recherche de code postal (via la base de données gouvernementale appropriée) pour obtenir l'adresse correcte

  3. Obtenir un stagiaire pour vérifier manuellement les nouvelles données correspond à l'ancien

4
répondu engtech 2008-08-19 16:47:16

Cela ne résoudra pas votre problème, mais si vous n'avez besoin que de données lat/long pour ces adresses, L'API Google Maps analysera assez bien les adresses non formatées.

3
répondu pix0r 2008-08-19 15:40:15

RecogniContact est un objet COM Windows qui analyse les adresses américaines et européennes. Vous pouvez l'essayer sur la droite http://www.loquisoft.com/index.php?page=8

3
répondu 2009-05-12 14:07:31

Vous pourriez vouloir vérifier cela!! http://jgeocoder.sourceforge.net/parser.html Ça a marché comme un charme pour moi.

3
répondu CoolDude 2011-10-15 01:23:49

Ce type de problème est difficile à résoudre en raison des ambiguïtés sous-jacentes dans les données.

Voici une solution basée sur Perl qui définit une arborescence de grammaire de descente récursive basée sur des expressions régulières pour analyser de nombreuses combinaisons valides d'adresses de rue: http://search.cpan.org / ~ kimryan / Lingua-FR-AddressParse-1.20/lib/Lingua/FR / AddressParse.pm . Cela inclut des sous Propriétés dans une adresse telles que: 12 1st Avenue N Suite # 2 Somewhere CA 12345 États-Unis

Il est similaire à http://search.cpan.org/ ~ timb/Geo-StreetAddress-US-1.03 / US.pm mentionné ci-dessus, mais fonctionne également pour les adresses qui ne sont pas des États-Unis, tels que le Royaume-Uni, L'Australie et le Canada.

Voici la sortie pour l'une de vos adresses d'échantillon. Notez que la section nom devrait d'abord être supprimée de " A. P. Croll & Son 2299 Lewes-Georgetown Hwy, Georgetown, de 19947 "pour la réduire à" 2299 Lewes-Georgetown Hwy, Georgetown, de 19947". Ceci est facilement réalisé en supprimant toutes les données jusqu'à la premier numéro trouvé dans la chaîne.

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
répondu Kim Ryan 2014-10-01 12:00:54

Comme il y a un risque d'erreur dans word, pensez à utiliser SOUNDEX combiné avec l'algorithme LCS pour comparer les chaînes, cela aidera beaucoup !

2
répondu anand 2011-01-22 12:49:26

Utilisation de l'API google

$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
répondu komal 2012-10-09 09:48:49

Pour les développeurs ruby ou rails, il existe une belle gemme appelée street_address . J'ai utilisé ceci sur un de mes projets et il fait le travail dont j'ai besoin.

Le seul problème que j'ai eu était chaque fois qu'une adresse est dans ce format P. O. Box 1410 Durham, NC 27702 Il est retourné nil et donc j'ai dû remplacer "P. O. Box" par " et après cela, il a pu l'analyser.

2
répondu Sachin Prasad 2013-11-01 21:08:45

Il existe des services de données qui donnent un code postal vous donnera la liste des noms de rue dans ce code postal.

Utilisez une expression rationnelle pour extraire Zip ou City State - trouvez le bon ou si une erreur obtient les deux. tirez la liste des rues à partir d'une source de données corrigez la ville et l'état, puis l'adresse de la rue. Une fois que vous obtenez une ligne d'adresse valide 1, Ville, État et zip, vous pouvez alors faire des hypothèses sur la ligne d'adresse 2..3

1
répondu AdamSane 2008-08-19 15:52:48

Je ne sais pas à quel point cela serait faisable, mais je n'ai pas vu cela mentionné, alors j'ai pensé que j'irais de l'avant et suggérerais ceci:

Si vous êtes strictement aux États-Unis... obtenez une énorme base de données de tous les codes postaux, États, villes et rues. Maintenant, regardez dans vos adresses. Vous pouvez valider ce que vous trouvez en testant si, par exemple, la ville que vous avez trouvée existe dans l'état que vous avez trouvé, ou en vérifiant si la rue que vous avez trouvée existe dans la ville que vous avez trouvée. Sinon, il y a des chances que John ne soit pas pour John's street, mais le nom du destinataire... Fondamentalement, obtenir le plus d'informations que vous pouvez et vérifier vos adresses contre elle. Un exemple extrême serait d'obtenir une liste de toutes les adresses aux États-Unis de A, puis de trouver celle qui correspond le plus à chacune de vos adresses...

1
répondu Shawn 2010-10-01 02:50:01

Il y a un port javascript de perl Geo:: StreetAddress:: nous Paquet: https://github.com/hassansin/parse-address . Il est basé sur regex et fonctionne assez bien.

1
répondu hassansin 2014-12-13 01:33:31