问题描述
我目前正在开展一个项目,该项目应识别地址的每个部分,例如来自“str. Jack London 121,Corvallis,araD,ap. 1603,973130”,输出应如下所示:
street name: Jack London;
no: 121; city: Corvallis;
state: araD;
apartment: 1603;
zip code: 973130
问题在于并非所有输入数据的格式都相同,因此某些元素可能会丢失或顺序不同,但保证是地址。
我在互联网上查看了一些资源,但其中很多仅适用于美国地址 - 就像 Google Api Places,问题是我会将其用于其他国家/地区。
Regex 不是一个选项,因为地址可能变化太多。
我也考虑过 NLP 使用命名实体识别模型,但我不确定这是否可行。
解决方法
Data Science Stack Exchange 论坛中有一个 similar question,只有一个答案建议使用 SpaCy。
关于 detecting addresses using Stanford NLP 的另一个问题详细介绍了检测地址及其组成部分的另一种方法。
有一个 LexNLP 库,它具有以这种方式检测和拆分地址的功能(从库上的 TowardsDatascience article 借用的片段):
from lexnlp.extract.en.addresses import address_features
for filename,text in d.items():
print(list(lexnlp.extract.en.addresses.address_features.get_word_features(text)))
还有一个相对较新(2018 年)和“研究性”代码 DeepParse(和 documentation)用于深度学习地址解析伴随 IEEE article(付费专区)或 {{3} }.
对于训练,您将需要使用一些大型地址语料库或使用生成的假地址,例如Semantic Scholar 图书馆。