1. ホーム
  2. string

[解決済み] 文字列から使える番地、市区町村、郵便番号の解析【非公開

2022-06-24 11:43:18

質問

問題:AccessデータベースからSQL Server 2005に変換された住所フィールドがあります。このフィールドには、1 つのフィールドにすべてが含まれています。私は、住所の個々のセクションを解析して、正規化されたテーブルの適切なフィールドにする必要があります。私はこれを約 4,000 のレコードに対して行う必要があり、それは反復可能である必要があります。

仮定。

  1. 米国内の住所を想定(現時点では)

  2. 入力文字列は時々、addressee (宛先となる人物) および/または2番目のストリートアドレス (例: Suite B) を含むと仮定します。

  3. 状態は省略されることがあります。

  4. 郵便番号は標準的な5桁またはzip+4桁です。

  5. 誤字がある場合があります

UPDATE: 投げかけられた質問に対して、標準は普遍的に守られていませんでした。私は、ジオコードとエラーだけでなく、個々の値を格納する必要があり、タイプミスを意味します(上で訂正しました)

サンプル データです。

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

  • 11522ショーニーロード、グリーンウッドDE 19950

  • 144 キングスハイウェイ、S.W. ドーヴァ、DE 19901

  • Intergrated Const. サービス 2 ペンズ・ウェイ・スイート 405 ニューキャッスル、デラウェア州 19720

  • ヒュームス・リアルティ 33 Bridle Ridge Court, Lewes, DE 19958

  • ニコルズエクスカベーション 2742 Pulaski Hwy Newark, DE 19711

  • 2284 ブリンジオンロード、スマイナ、DE 19904

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

  • 580 ノース デュポン ハイウェイ ドーヴァー、DE 19901

  • 私書箱 778号 ドーヴァー、DE 19903

どのように解決するのですか?

私はこの種の構文解析について多くの作業を行ってきました。エラーがあるため、100%の精度は得られませんが、大体のことはできるようになり、その後、目視でBSテストをすることができます。これが一般的な方法です。書くのはかなりアカデミックなので、コードではありません、変なところはなく、文字列の処理が多いだけです。

(サンプルデータを載せていただいたので、少し修正しました)

  1. 逆向きに作業します。郵便番号から始めます。郵便番号は最後の方にあり、2 つの既知の形式のうちの 1 つです。XXXXX または XXXXX-XXXX です。これが表示されない場合は、以下の「都市、州」の部分にいると考えてください。
  2. 次に、郵便番号の前にあるのが州で、2 文字の形式か、単語で表示されます。これも50個しかないので、どうなるかはわかりますよね。また、スペルミスを補うために、単語を音訳することもできます。
  3. の前にあるのは都市で、それは おそらく で、州と同じ行にあります。を使うことができます。 郵便番号データベース を使って、郵便番号に基づいて都市と州をチェックするか、少なくとも BS 検出器として使用することができます。
  4. ストリート アドレスは通常、1 行または 2 行になります。2 行目は通常、スイート番号がある場合はその番号になりますが、私書箱である場合もあります。
  5. 1 行目または 2 行目で名前を検出するのはほぼ不可能でしょうが、番号が前に付いていない場合 (または "attn:" や "attention to:" が前に付いている場合は、名前か住所かのヒントになるかもしれません)。

多少なりともお役に立てれば幸いです。