如何使用Stanford NLP Tagger和NLTK提高速度

Jab*_*abb 12 python nltk stanford-nlp

有没有办法以更高效的方式使用Standford Tagger?

每次调用NLTK的包装器都会为每个分析的字符串启动一个新的java实例,这非常非常慢,特别是当使用更大的外语模型时......

http://www.nltk.org/api/nltk.tag.html#module-nltk.tag.stanford

Jab*_*abb 14

找到了解决方案.可以在servlet模式下运行POS Tagger,然后通过HTTP连接到它.完善.

http://nlp.stanford.edu/software/pos-tagger-faq.shtml#d

在后台启动服务器

nohup java -mx1000m -cp /var/stanford-postagger-full-2014-01-04/stanford-postagger.jar edu.stanford.nlp.tagger.maxent.MaxentTaggerServer -model /var/stanford-postagger-full-2014-01-04/models/german-dewac.tagger -port 2020 >& /dev/null &
Run Code Online (Sandbox Code Playgroud)

调整防火墙以限制仅从localhost访问端口2020

iptables -A INPUT -p tcp -s localhost --dport 2020 -j ACCEPT
iptables -A INPUT -p tcp --dport 2020 -j DROP
Run Code Online (Sandbox Code Playgroud)

用wget测试它

wget http://localhost:2020/?die welt ist schön
Run Code Online (Sandbox Code Playgroud)

关机服务器

pkill -f stanford
Run Code Online (Sandbox Code Playgroud)

恢复iptable设置

iptables -D INPUT -p tcp -s localhost --dport 2020 -j ACCEPT
iptables -D INPUT -p tcp --dport 2020 -j DROP
Run Code Online (Sandbox Code Playgroud)

  • 你可以添加你用来连接它的python代码/从NLTK使用它吗?我对这个问题很感兴趣,但是现在我正在使用之前的解决方案,因为它解决了问题,如果你排队处理句子. (2认同)

alv*_*vas 7

使用nltk.tag.stanford.POSTagger.tag_sents()用于标记多个句子.

tag_sents已经取代了旧的batch_tag功能,请参阅https://github.com/nltk/nltk/blob/develop/nltk/tag/stanford.py#L61


弃用:

使用batch_tag而不是标记句子tag,请参阅http://www.nltk.org/_modules/nltk/tag/stanford.html#StanfordTagger.batch_tag