使用 NLP 进行地址拆分

Address Splitting with NLP

我目前正在做一个项目,该项目应该识别地址的每个部分,例如从“str. Jack London 121, Corvallis, ARAD, ap. 1603, 973130”输出应该是这样的:

street name: Jack London; 
no: 121; city: Corvallis; 
state: ARAD; 
apartment: 1603; 
zip code: 973130

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

我在 Internet 上查看了一些资源,但其中很多仅适用于美国地址 - 例如 Google API 地方,问题是我会将其用于其他国家/地区。

Regex 不是一个选项,因为地址可能变化太大。

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

你知道什么是开始的好方法吗?也许可以帮我一些提示?

Data Science Stack Exchange 论坛中有一个 similar question,只有一个答案建议使用 SpaCy。

关于 detecting addresses using Stanford NLP 的另一个问题详细介绍了另一种检测地址及其成分的方法。

图书馆有一个LexNLP library that has a feature to detect and split addresses this way (snippet borrowed from 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 (and documentation) for deep learning address parsing accompanying an IEEE article (paywall) or Semantic Scholar

对于培训,您将需要使用一些大型地址语料库或使用生成的假地址,例如Faker图书馆。