133 votes

Analyse utilisable Street Address, City, State, Zip à partir d’une chaîne

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

Hypothèses:

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

  2. supposons que la chaîne d'entrée contient parfois un destinataire (la personne traitée) et/ou une deuxième adresse de la rue (c'est à dire de la 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 suivie, j'ai besoin de besoin de stocker les valeurs individuelles, et pas seulement de géocodage et d'erreurs moyen de faute de frappe (corrigé ci-dessus)

Les Données De L'Échantillon:

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

  • 11522 Shawnee Route, Greenwood DE 19950

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

  • Intégré Const. Services 2 Penns Façon Suite 405 New Castle, DE 19720

  • Humes Realty 33 Bride de la Crête de la Cour, Lewes, DE 19958

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

  • 2284 Bryn Sion de la Route, de Smyrne, DE 19904

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

  • 580 Nord Dupont Highway Dover, DE 19901

  • P. O. Box 778 Dover, DE 19903

119voto

Tim Sullivan Points 10677

J'ai fait beaucoup de travail sur ce type d'analyse. Parce qu'il y a des erreurs, vous ne pourrez pas obtenir une précision de 100%, mais il ya quelques choses que vous pouvez faire pour obtenir plus de chemin, et puis faire un visual BS test. Voici le chemin pour aller à ce sujet. Ce n'est pas le code, parce qu'il est assez académique à l'écrire, il n'y a pas quelque chose d'étrange, juste beaucoup de manipulation des chaînes.

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

  1. Travailler à reculons. Démarrer à partir du code postal, qui sera près de la fin, et dans un des deux formats connus: XXXXX ou XXXXX-XXXX. Si cela n'apparaît pas, vous pouvez supposer que vous êtes dans la ville, l'état partie, ci-dessous.
  2. La prochaine chose, avant de le zip, va être à l'état, et il sera soit dans un deux-format lettre, ou que les mots. Vous savez ce qu'ils seront, aussi, il y a seulement 50 d'entre eux. Aussi, vous pouvez soundex les mots pour aider à compenser les erreurs d'orthographe.
  3. avant que la ville, et c'est probablement sur la même ligne que l'état. Vous pouvez utiliser un code postal de la base de données pour vérifier la ville et de l'état basé sur le zip, ou au moins de l'utiliser comme un BS détecteur.
  4. L'adresse de la rue sera généralement 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. Ça va être quasi impossible de détecter un nom sur la première ou la deuxième ligne, mais si elle n'est pas précédée par un nombre (ou s'il est précédé d'un "attn:" ou "attention:" 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.

92voto

James A. Rosen Points 25774

Je pense que le problème d’impartition est le meilleur pari : envoyez-le 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 un riche l’analyse de l’adresse, avec des champs remplis que vous n’envoyez (y compris ZIP +4 et comté).

Par exemple, les rendements de l’analyse « 1600 Amphitheatre Parkway, Mountain View, CA »

Maintenant c’est analysable !

25voto

Nicholas Piasecki Points 13681

L'affiche originale a probablement longtemps déplacé, mais j'ai pris un coup de couteau au portage de Perl Geo::StreetAddress: module utilisé par geocoder.nous C#, sous-évaluées sur CodePlex, et pense que les gens tombent sur cette question dans l'avenir peut être utile:

NOUS Analyseur Adresse

Sur le projet de la page d'accueil, j'ai essayé de parler de sa (très vrai) limitations. Car il n'est pas soutenu par l'USPS base de données valide l'adresse municipale, l'analyse peut être ambiguë et il ne peut pas confirmer ni infirmer la validité d'une adresse donnée. Il peut juste essayer de tirer des données de la chaîne.

Il est destiné pour le cas où vous avez besoin pour obtenir un ensemble de données principalement dans le droit des champs, ou que vous souhaitez fournir un raccourci à l'entrée de données (permettant aux utilisateurs de coller une adresse dans une zone de texte plutôt que de tabulation entre plusieurs champs). Il est pas censé pour vérifier la disponibilité d'une adresse.

Il ne cherche pas à analyser tout au-dessus de la rue, mais on pourrait sans doute diddle avec les regex pour obtenir quelque chose d'assez proche--je serais probablement casser juste à le numéro de la maison.

17voto

Christopher Mahan Points 4275

Je l'ai fait dans le passé.

Soit le faire manuellement, (construire une belle interface qui permet à l'utilisateur de le faire rapidement) ou automatisé et vérifier l'encontre d'un récent adresse de la base de données (vous devez acheter qu') manuellement et de gérer les erreurs.

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

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

Obtenez une copie de la poste et de l'Adressage des Normes (USPS) à http://pe.usps.gov/cpim/ftp/pubs/Pub28/pub28.pdf et remarquez qu'il est de 130 pages de long. Regexes à mettre en œuvre qui serait de noix.

Pour des adresses internationales, tous les paris sont éteints. Basée aux etats-unis les travailleurs ne seront pas en mesure de valider.

Vous pouvez également utiliser un service de données. J'ai, cependant, pas de recommandations.

En outre: lorsque vous ne envoyer des trucs par la poste (qu'est ce que c'est, non?) assurez-vous de mettre "correction de l'adresse demandée" sur l'enveloppe (au bon endroit) et mise à jour de la base de données. (Nous avons fait une simple interface graphique pour la réception personne pour le faire; la personne qui trie le courrier)

Enfin, lorsque vous avez nettoyée de données, rechercher les doublons.

13voto

Nicholas Trandem Points 1556

J'ai travaillé dans l'adresse de traitement de domaine depuis environ 5 ans maintenant, et il est vraiment pas la panacée. La bonne solution va dépendre de la valeur des données. Si ce n'est pas très utile, le lancer à travers un analyseur comme d'autres réponses suggèrent. Si c'est encore un peu précieux, vous aurez certainement besoin d'avoir un homme évaluer et de corriger les résultats de l'analyseur. Si vous êtes à la recherche d'un entièrement automatisée et reproductible de la solution, vous voulez probablement parler à une correction de l'adresse du fournisseur comme Groupe1 ou Trillium.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X