在字符串中查找城市名称

kon*_*wka 1 python string nlp

我有一个字符串(句子)列表,其中可能包含一个或多个荷兰城市名称。我还有一份荷兰城市列表及其各种拼写。我目前正在使用 Python 工作,但使用其他语言的解决方案也可以。

检索句子中提到的城市列表的最佳和最有效的方法是什么?

我现在所做的是循环遍历句子列表,然后在该循​​环中循环遍历城市列表并一一检查 if place_name in sentence.lower(),所以我有:

for sentence in sentences:
    for place_name in place_names:
        if place_name in sentence.lower():
            places[place_name] = places[place_name] + 1
Run Code Online (Sandbox Code Playgroud)

这是最有效的方法吗?我还遇到一个问题,像“Ee”这样的城市在荷兰存在,并且其中带有“ee”的单词很常见。现在我通过检查解决了这个问题if place_name + ' ' in sentence.lower(),但这当然是次优且丑陋的,因为它也会忽略像“Huis in Amsterdam”这样的句子,因为它不以空格结尾,并且它也不能很好地与标点。我尝试使用正则表达式,但这当然太慢了。是否有更好的方法来解决这个特定问题,或者解决这个一般问题?我在某种程度上倾向于 NLP 解决方案,但我也觉得这太过分了。

ale*_*cxe 5

您可以一般性地研究命名实体识别解决方案。这也可以在Spacy中完成,nltk但这是 Spacy 中的一个示例- 城市将标有标签(代表“地缘政治实体”,如国家、州、城市等):GPEGPE

import spacy

nlp = spacy.load('en_core_web_lg')

doc = nlp(u'Some company is looking at buying an Amsterdam startup for $1 billion')

for ent in doc.ents:
    print(ent.text, ent.label_)
Run Code Online (Sandbox Code Playgroud)

印刷:

Amsterdam GPE
$1 billion MONEY
Run Code Online (Sandbox Code Playgroud)