在字符串中查找城市名称

时间:2017-12-13 12:52:30

标签: python string nlp

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

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

我现在所做的是循环遍历句子列表,然后在该循​​环内循环遍历城市列表并逐一检查是否 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

这是最有效的方法吗?我也遇到了像#E;" Ee"存在于荷兰,而且这些词语带有" ee"在他们中很常见。现在我只是通过检查if place_name + ' ' in sentence.lower()来解决这个问题,但这当然是次优和丑陋的,因为它也会忽略像阿姆斯特丹和#34; Huis这样的句子,因为它并没有结束一个空间,它也不会很好地与标点符号一起使用。我尝试使用正则表达式,但这当然太慢了。是否有更好的方法来解决这个特定问题,或者解决这个问题?我有点倾向于NLP解决方案,但我也觉得这将是一个巨大的矫枉过正。

1 个答案:

答案 0 :(得分:4)

您可以查看Named Entity Recognition解决方案。这也可以在nltk中完成,但此处是Spacy中的示例 - 城市将标有GPE个标签(GPE代表“地缘政治实体”,如国家/地区,州,城市等):

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_)

打印:

Amsterdam GPE
$1 billion MONEY