2012-02-27 10 views
19

私は米国私は街に侵入する必要があるアドレス、状態、郵便番号、状態などのリスト米国の住所を解析するためのライブラリはありますか?

例アドレス持っている:「16100砂キャニオンアベニュー、スイート380 アーバイン、CA 92618」

んこれを行うためのライブラリや無料のAPIを知っている人は誰ですか?グーグル/ヤフージオコーダは、商業的なプロジェクトのためのTOSで使用することが禁じられます。..

これをプリフォームのpythonライブラリを見つけることは素晴らしいだろう...

おかげ

+1

あなたは私たちのこと(正確な)形式を伝える必要がありますデータがあります。 –

答えて

16

Pyparsing機能の束を持っています住所の解析については、こちらの例を参照してください。http://pyparsing.wikispaces.com/file/view/streetAddressParser.py

+2

ありがとう、私はこれをチェックしています。 – WeaselFox

+1

このライブラリは、この回答に記載されているスクリプトに基づいています:https://github.com/pnpnpn/street-address – zengr

5

このような図書館のライブラリは非常に面白くて、さまざまな例でうまくいっているようです。そして、それは生の正規表現(これは本当にこの問題の良い解決策ではありません)の読みやすい代替手段だと思います。

このような解決策は、ある時点では有効ではないアドレスを標準化することを意味することに注意してください...有効に見えるだけです。アドレスが実際に本当かどうか(そしておそらく配送可能)がアプリケーションにとって重要であるかどうかを知るには、配送ポイント検証(DPV)を使用するUSPS認定サービスを使用している必要があります。私はSmartyStreetsの開発者であり、ちょうどそのようなサービスを提供しており、統合を容易にするSDK(here's a succinct sample)もあります。

レスポンスは、USPS Publication 28に従って標準化されて戻ってきました。このAPIは、使用頻度の低いユーザーには無料です。

+0

おそらくより良いリンクです:https://github.com/smartystreets/smartystreets-python-sdk – bogeymin

+0

良い@bogeyminを指摘する - 私は質問を更新する。 – mdwhatcott

8

はこのPythonのパッケージをチェックアウト: https://github.com/SwoopSearch/pyaddress

あなたが解析されるアドレスに関する十分な詳細を知っていれば、それはまた柔軟に行うことができます。

+1

残念ながら、そのプロジェクトは放棄されているようです。最新のコミットは2013年4月からです。 –

0

データセットを慎重にチェックして、この問題がまだ処理されていないことを確認してください。

私はかなりの時間を費やして、おそらくストリート名の終わりの分類を作成しました。正規表現の条件文を使用して、完全なアドレス文字列とすべてからストリート番号を抜き出しました。 がすでにであった。

必然的に奇妙なバリエーション(一部のパーセルアドレスは内陸のパーセル用であり、奇妙なアドレスなどがある)のために常にちょっとした仕事であるアドレス文字列を解析する前に、データセットまだあなたのためにこれをしていない!

19

これらの回答のうちのいくつかは、数年前のものです。

私が最近見た中で最も防弾ライブラリがusaddressです:https://github.com/datamade/usaddress

私たちは今、年間 https://pypi.python.org/pypi/address/0.1.1のために使用されたいはるかに正確 addressより
  • しかし
  • それはまだ、この書き込みのよう

Proの先端にコミットされているアドレス

  • に失敗参照するには:すべてのこれらのライブラリ内のアドレスをテストするとき、1を使用する)あなたのアドレスではありませんカンマ、2)マルチワード都市名は、好ましくは "St."図書館が「ストリート」と「セント」(セントルイスなど)と3)不適切なケーシングとを区別できるかどうかを調べる。このコンボは、通常、より良いパーサーが落ちるようにします。

  • +2

    これを試してみてください。それは驚くほどうまく機能します。国が住所に含まれていない場合は、カナダの住所でも機能します。 – JeromeParadis

    +1

    上記のリンクは、私が推測しているのは更新/監視のために404を返します。 http://datamade.us/blog/parsing-addresses-with-usaddress – Ryan

    +1

    https://github.com/datamade/usaddress – Justas

    1

    私はこれは古い記事です知っている誰かがそれが役に立つかもしれません: https://usaddress.readthedocs.io/en/latest/

    >>> import usaddress 
    >>> usaddress.parse('Robie House, 5757 South Woodlawn Avenue, Chicago, IL 60637') 
    [('Robie', 'BuildingName'), 
    ('House,', 'BuildingName'), 
    ('5757', 'AddressNumber'), 
    ('South', 'StreetNamePreDirectional'), 
    ('Woodlawn', 'StreetName'), 
    ('Avenue,', 'StreetNamePostType'), 
    ('Chicago,', 'PlaceName'), 
    ('IL', 'StateName'), 
    ('60637', 'ZipCode')] 
    

    または:(?文字列)

    >>> import usaddress 
    >>> usaddress.tag('Robie House, 5757 South Woodlawn Avenue, Chicago, IL 60637') 
    (OrderedDict([ 
        ('BuildingName', 'Robie House'), 
        ('AddressNumber', '5757'), 
        ('StreetNamePreDirectional', 'South'), 
        ('StreetName', 'Woodlawn'), 
        ('StreetNamePostType', 'Avenue'), 
        ('PlaceName', 'Chicago'), 
        ('StateName', 'IL'), 
        ('ZipCode', '60637')]), 
    'Street Address') 
    
    >>> usaddress.tag('State & Lake, Chicago') 
    (OrderedDict([ 
        ('StreetName', 'State'), 
        ('IntersectionSeparator', '&'), 
        ('SecondStreetName', 'Lake'), 
        ('PlaceName', 'Chicago')]), 
    'Intersection') 
    
    >>> usaddress.tag('P.O. Box 123, Chicago, IL') 
    (OrderedDict([ 
        ('USPSBoxType', 'P.O. Box'), 
        ('USPSBoxID', '123'), 
        ('PlaceName', 'Chicago'), 
        ('StateName', 'IL')]), 
    'PO Box') 
    
    関連する問題