2017-05-03 6 views
1

あなたが別のstackoverflowのページに私をリダイレクトする前に、私はPOSタグ付けを高速化に関するいくつかの質問があります知っているので、私はすでにを通じて閲覧、ここで提案して私のコードをスピードアップしました:Slow performance of POS tagging. Can I do some kind of pre-warming?遅いPOSタグ付けを高速化するには?

私は、Pythonを使用しています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を強くお勧めします。とにかく 'tagger.tag'に完全なリストを渡しているのなら、なぜforループを持っていますか?https://spacy.io/docs/api/ – mbatchkarov

+1

これはNLTKほど高速です。 – entrophy

+0

@entrophy良いキャッチ!私は今まで気付かずにそれを修正しました。ありがとう! –

答えて

0

これが本当にあなたのタグ付けコードであれば、次の単語に行く前に10語の文章を10回ずつタグ付けしています。あまりにも遅いと不平を言う前にツールがどのように機能するかを理解する。

文章ごとに別々に起動するのではなく、単語トークン化された文章の完全リストに対してpos_tag_sents()を呼び出すことで、さらに高速化することができます。

tagged_sents = nltk.pos_tag_sents(tokenized_sentences) 
+0

私のコードでそのエラーを実現しました。先端を感謝する –

関連する問題