如何在 python 中使用 NLTK 从原始文本中提取地址?
How can I extract address from raw text using NLTK in python?
我有这段文字
'''Hi, Mr. Sam D. Richards lives here, 44 West 22nd Street, New
York, NY 12345. Can you contact him now? If you need any help, call
me on 12345678'''
。如何使用 NLTK 从上述文本中提取地址部分?我试过 Stanford NER Tagger
,它只给我 New York
作为位置。如何解决?
肯定是正则表达式:)
类似
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)
: 在号码和街道名称之间space
.+
:街道名称,任意字符出现任意次数
,
: 城市
前一个逗号和一个space
.+
:城市,任意字符出现任意次数
,
:state
前一个逗号和一个space
[A-Z]{2}
: 从 A 到 Z 恰好 2 个大写字符
[0-9]{5}
: 5 位数
re.findall(expr, string)
将 return 一个包含所有匹配项的数组。
Pyap 不仅适用于这个特定示例,而且适用于文本中包含的其他地址。
text = ...
addresses = pyap.parse(text, country='US')
Checkoutlibpostal,一个专门用于地址提取的库
它无法从原始文本中提取地址,但可能有助于完成相关任务
我有这段文字
'''Hi, Mr. Sam D. Richards lives here, 44 West 22nd Street, New York, NY 12345. Can you contact him now? If you need any help, call me on 12345678'''
。如何使用 NLTK 从上述文本中提取地址部分?我试过 Stanford NER Tagger
,它只给我 New York
作为位置。如何解决?
肯定是正则表达式:)
类似
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)
: 在号码和街道名称之间space
.+
:街道名称,任意字符出现任意次数
,
: 城市
.+
:城市,任意字符出现任意次数
,
:state
[A-Z]{2}
: 从 A 到 Z 恰好 2 个大写字符
[0-9]{5}
: 5 位数
re.findall(expr, string)
将 return 一个包含所有匹配项的数组。
Pyap 不仅适用于这个特定示例,而且适用于文本中包含的其他地址。
text = ...
addresses = pyap.parse(text, country='US')
Checkoutlibpostal,一个专门用于地址提取的库
它无法从原始文本中提取地址,但可能有助于完成相关任务