如何提升Stanford NLP标记器和NLTK的速度
有没有什么方法可以让斯坦福标注器的使用更高效一些呢?
每次调用NLTK的包装器时,都会为每个分析的字符串启动一个新的Java实例,这样非常非常慢,尤其是当使用较大的外语模型时...
http://www.nltk.org/api/nltk.tag.html#module-nltk.tag.stanford
2 个回答
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
14
找到了解决办法。可以在servlet模式下运行POS标注器,然后通过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 &
调整防火墙,只允许本地访问2020端口
iptables -A INPUT -p tcp -s localhost --dport 2020 -j ACCEPT
iptables -A INPUT -p tcp --dport 2020 -j DROP
用wget测试一下
wget http://localhost:2020/?die welt ist schön
关闭服务器
pkill -f stanford
恢复iptables设置
iptables -D INPUT -p tcp -s localhost --dport 2020 -j ACCEPT
iptables -D INPUT -p tcp --dport 2020 -j DROP