2017-05-03 2 views
1

, 나는 이미 통해 찾아 여기에서 제안을 내 코드 가속화했습니다 Slow performance of POS tagging. Can I do some kind of pre-warming?느린 POS 태깅 속도를 높이려면 어떻게해야합니까? 내가 POS 태그를 가속화에 대한 몇 가지 질문이 알고 있기 때문에 다른 유래 페이지로 저를 리디렉션하기 전에

내가 파이썬을 사용하고 있습니다를 3.6. nltk를 사용하여 토큰 화 된 ~ 100,000 단어를 포함하는 목록이 있습니다. 이것들은 꽤 큰 목록입니다. 그래서 나는이 모든 단어에 본질적으로 약간의 시간이 걸릴 것이라는 것을 알고 있습니다. 다음과 같이 나는, 외부 술래를로드 한 :

def tag_wordList(tokenizedWordList):  
    from nltk.tag.perceptron import PerceptronTagger 
    tagger=PerceptronTagger() # load outside 

    for words in tokenizedWordList: 
     taggedList = tagger.tag(tokenizedWordList) # add POS to words 

    return taggedList 

이 단계는 상당한 양의 물건을 질주했지만, 10 만 개 단어를 통해, 여전히 1.5 시간 이상을 복용 얻을 (그리고 여전히 실행중인) 촬영. 이 코드는 더 작은 데이터 집합에서 잘 작동합니다. 별로 좋은 개선을 위해 다시 시도 할 것이지만 나는 그다지 개선하지 않고 어느 시점에서 그 목록을 세트로 바꾸려고 노력했다고 믿는다. 효율성 향상을위한 다른 팁이 있습니까?

+0

나는 spacy를 강력히 권장합니다. 그것은 NLTK만큼 빠르고 정확합니다 : https://spacy.io/docs/api/ – mbatchkarov

+1

기다리십시오. 어쨌든'tagger.tag'에 전체 목록을 전달하면 for 루프가 생기는 이유는 무엇입니까? – entrophy

+0

@entrophy 좋은 캐치! 나는 지금까지 알아 차리지 못했고 그것을 고쳤다. 감사! –

답변

0

실제로 이것이 태그 코드 인 경우 다음 문장으로 이동하기 전에 각 10 단어 문장에 10 번 태그를 붙입니다. 너무 느리다는 불평을하기 전에 도구가 어떻게 작동하는지 이해하십시오.

단어 토큰 화 문장의 전체 목록을 각 문장마다 별도로 실행하지 않고 pos_tag_sents()을 호출하여 속도를 향상시킬 수 있습니다 (단 한번만).

tagged_sents = nltk.pos_tag_sents(tokenized_sentences) 
+0

그냥 내 코드에서 그 오류를 실현. 팁을 감사하십시오. –

관련 문제