如何提升Stanford NLP标记器和NLTK的速度

12 投票
2 回答
5779 浏览
提问于 2025-04-18 04:27

有没有什么方法可以让斯坦福标注器的使用更高效一些呢?

每次调用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

撰写回答