使用 NLP 进行地址分割

smi*_*iui 9 python nlp named-entity-recognition street-address

我目前正在开发一个项目,该项目应识别地址的每个部分,例如“str. Jack London 121, Corvallis, ARAD, ap. 1603, 973130”,输出应如下所示:

street name: Jack London; 
no: 121; city: Corvallis; 
state: ARAD; 
apartment: 1603; 
zip code: 973130
Run Code Online (Sandbox Code Playgroud)

问题是并非所有输入数据都采用相同的格式,因此某些元素可能会丢失或顺序不同,但它保证是一个地址。

我在互联网上检查了一些资源,但其中很多仅适用于美国地址 - 例如 Google API Places,问题是我将把它用于另一个国家。

正则表达式不是一个选项,因为地址可能变化太大。

我还考虑过 NLP 使用命名实体识别模型,但我不确定这是否可行。

你知道什么是一个好的开始方式,也许可以帮助我一些建议吗?

sop*_*ros 12

Data Science Stack Exchange 论坛中有一个类似的问题,只有一个答案建议使用 SpaCy。

关于使用斯坦福 NLP 检测地址的另一个问题详细介绍了检测地址及其组成部分的另一种方法。

有一个LexNLP库,具有以这种方式检测和分割地址的功能(摘自该库的TowardsDatascience 文章的片段):

from lexnlp.extract.en.addresses import addresses
for filename,text in d.items():
    print(list(lexnlp.extract.en.addresses.get_addresses(text)))
Run Code Online (Sandbox Code Playgroud)

还有一个相对较新的(2018)和“研究”代码DeepParse(和文档),用于深度学习地址解析,附带IEEE 文章(付费专区)或Semantic Sc​​holar

对于训练,您将需要使用一些大型地址语料库或使用Faker库等生成的假地址。