2017-12-13 12 views
1

私は、1つ以上のオランダの都市名を含む文字列(文)のリストを持っています。私はまた、オランダの都市のリストとその様々なスペルを持っています。私は現在Pythonで作業していますが、別の言語のソリューションも使えます。文字列の都市名を見つける

文章に記載されている都市のリストを取得するには、どのような方法が最も効率的でしょうか。私は、現時点では何

は、文のリストをループし、そのループ内で、都市のリストをループし place_name in sentence.lower()かの1つのチェックずつ、私は持っている:

for sentence in sentences: 
    for place_name in place_names: 
     if place_name in sentence.lower(): 
      places[place_name] = places[place_name] + 1 

はこれですこれを行う最も効率的な方法は?私はまた、 "Ee"のような都市がオランダに存在し、その中に "ee"という言葉がかなり共通しているという問題にぶつかります。今のところ私はif place_name + ' ' in sentence.lower()をチェックするだけで解決しましたが、スペースで終わらないので "Huis in Amsterdam"のような文も無視するので、これは最適で醜いのですが、うまくいきません句読点付き。私は正規表現を使ってみましたが、これはもちろん遅すぎます。この特定の問題を解決するより良い方法があるのだろうか、あるいはこの問題を一般的に解決するか?私はNLPの解決策に若干傾いていますが、それは大規模な過度の過ちでもあると感じています。

答えて

3

あなたは一般的に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 
関連する問題