我有这个文字
''嗨,Sam D. Richards先生住在这里,新西44街22号 约克,纽约州12345 。你现在可以联系他吗?如果您需要任何帮助,请致电 我在12345678'''
。如何使用NLTK从上面的文本中提取地址部分?我尝试了Stanford NER Tagger
,它只给我New York
作为位置。怎么解决这个问题?
答案 0 :(得分:8)
绝对正则表达式:)
像
这样的东西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)
:号码和街道名称之间的空格
.+
:街道名称,任意出现次数的任何字符
,
:城市前的逗号和空格
.+
:city,任意次数的任何字符
,
:状态前的逗号和空格
[A-Z]{2}
:从A到Z正好有2个大写字符
[0-9]{5}
:5位
re.findall(expr, string)
将返回一个包含所有匹配项的数组。
答案 1 :(得分:2)
Pyap不仅适用于此特定示例,而且也适用于文本中包含的其他地址。
text = ...
addresses = pyap.parse(text, country='US')
答案 2 :(得分:1)
结帐libpostal,专用于地址提取的库