2017-12-13 6 views
1

하나 이상의 네덜란드 도시 이름을 포함 할 수있는 문자열 목록 (문장)이 있습니다. 또한 네덜란드 도시 목록과 다양한 철자법이 있습니다. 현재 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 

이인가 이 작업을 수행하는 가장 효율적인 방법은 무엇입니까? 나는 또한 "Ee"와 같은 도시가 네덜란드에 존재하며 그 안에 "ee"가있는 단어가 상당히 공통적이라는 문제에 부딪친 다. 지금 당장은 if place_name + ' ' in sentence.lower()을 검사하여이 문제를 해결했지만, 이것은 물론 우주에서 끝나지 않아 "암스테르담의 Huis"와 같은 문장을 무시하기 때문에 가장 선명하고 추악합니다. 또한 잘 작동하지 않습니다. 문장 부호와 함께. 내가 정규식을 사용하여 시도했지만 이것은 물론 너무 느립니다. 이 특정한 문제를 해결하거나이 문제를 일반적으로 해결할 더 좋은 방법이 있을까요? 나는 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