2017-05-03 44 views
1

之前您重定向我到另一个计算器页面,因为我知道有关于加快词性标注了几个问题,我已经通过浏览并加快了我的代码这里的建议:Slow performance of POS tagging. Can I do some kind of pre-warming?如何加快慢POS标记?

我使用Python 3.6。我有包含约100,000个词的列表已经使用nltk进行了标记。这些都是非常重要的名单,所以我知道标记所有这些单词本质上需要一定的时间。我外装打标签,如下所示:

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 

采取这一步骤已经加快东西了显著量,但要打通100,000的话,它仍然以超过15小时(和它仍然运行)。该代码可以在较小的一组数据上正常工作。我相信我尝试将列表转换为一个没有太大改进的集合,尽管我会再次尝试以获得更好的效果。任何人有任何提高效率的其他技巧?

+0

我强烈推荐spacy。它会和NLTK一样精确,速度也更快:https://spacy.io/docs/api/ – mbatchkarov

+1

等待,如果你将完整列表传递给'tagger.tag',为什么还要有for循环? – entrophy

+0

@entrophy好赶上!我直到现在才注意到并修复了它。谢谢! –

回答

0

如果这实际上是您的标记代码,那么在您转到下一个标记之前,您将标记每个十个单词的句子十次。在抱怨他们太慢之前,了解你的工具是如何工作的。

您可以通过调用pos_tag_sents()关于单词标记句子的完整列表来获得进一步的加速,而不是单独为每个句子(即使只是一次)启动它。

tagged_sents = nltk.pos_tag_sents(tokenized_sentences) 
+0

刚刚意识到我的代码中有错误。欣赏提示 –