web-dev-qa-db-ja.com

PythonでNLTKを使用して生のテキストからアドレスを抽出するにはどうすればよいですか?

私はこのテキストを持っています

'' 'こんにちは、サムD.リチャーズさんはここに住んでいます44 West 22nd Street、New York、NY 12345。今すぐ彼に連絡できますか?ヘルプが必要な場合は、12345678 '' 'までお電話ください。

。 NLTKを使用して上記のテキストからアドレス部分を抽出するにはどうすればよいですか?私が試してみました Stanford NER Tagger、それは私にNew York場所として。これを解決する方法は?

11
ngrj

間違いなく正規表現:)

何かのようなもの

_import re

txt = ...
regexp = "[0-9]{1,3} .+, .+, [A-Z]{2} [0-9]{5}"
address = re.findall(regexp, txt)

# address = ['44 West 22nd Street, New York, NY 12345']
_

説明:

_[0-9]{1,3}_:1〜3桁、アドレス番号

_(space)_:番号と通りの名前の間のスペース

_.+_:通りの名前、任意の数の出現の任意の文字

_,_:都市の前のコンマとスペース

_.+_:都市、任意の数の出現の任意の文字

_,_:状態の前のコンマとスペース

_[A-Z]{2}_:AからZまでの正確に2つの大文字

_[0-9]{5}_:5桁

re.findall(expr, string)は、見つかったすべてのオカレンスを含む配列を返します。

8
Alex

チェックアウト libpostal 、アドレス抽出専用のライブラリ

3
jujule

Pyapは、この特定の例だけでなく、テキストに含まれる他のアドレスに対しても最適に機能します。

text = ...
addresses = pyap.parse(text, country='US')
3
Bhio