【问题标题】:How to improve speed with Stanford NLP Tagger and NLTK如何使用 Stanford NLP Tagger 和 NLTK 提高速度
【发布时间】:2014-06-12 21:54:05
【问题描述】:

有什么方法可以更高效地使用 Standford Tagger?

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

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

【问题讨论】:

    标签: python nltk stanford-nlp


    【解决方案1】:

    找到了解决办法。可以在 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 &
    

    调整防火墙以限制仅从本地主机访问端口 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
    

    恢复 iptable 设置

    iptables -D INPUT -p tcp -s localhost --dport 2020 -j ACCEPT
    iptables -D INPUT -p tcp --dport 2020 -j DROP
    

    【讨论】:

    • 你能添加你用来连接这个/使用这个来自 NLTK 的 python 代码吗?我对这个问题很感兴趣,但现在我正在使用以前的解决方案,因为如果您将句子排队等待处理,它可以解决问题。
    • @Jabb 嗨,你能帮忙看看 wget 命令吗,当我尝试的时候,这是我得到的错误,请看继续评论--2020-11-24 17:28:00-- http://localhost:2020/?die Resolving localhost (localhost)... 127.0.0.1 Connecting to localhost (localhost)|127.0.0.1|:2020... connected. HTTP request sent, awaiting response... 200 No headers, assuming HTTP/0.9 Length: unspecified Saving to: ‘index.html?die’ index.html?die [ <=>
    • ‘index.html?die’ saved [47] http://welt/ Resolving welt (welt)... failed: Name or service not known. wget: unable to resolve host address ‘welt’ - http://ist/ Resolving ist (ist)... failed: No address associated with hostname. wget: unable to resolve host address ‘ist’ --2020-11-24 17:28:04-- http://xn--schn-7qa/ Resolving xn--schn-7qa (xn--schn-7qa)... failed: Name or service not known. wget: unable to resolve host address ‘xn--schn-7qa’ FINISHED --2020-11-24 17:28:06-- Total wall clock time: 5.6s Downloaded: 1 files, 47 in 0s (5.47 MB/s)
    【解决方案2】:

    使用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

    【讨论】:

    • 这个效果很好,只需将句子排队处理,然后使用taggedlist = batch_tag[sent for sent in queue].
    • 这是最近才消失的吗?我点击了链接,在那里找不到 batch_tag 方法。
    • @bahmait,我已经更新了最新版本的函数名称。 batch_tag 已重构为 tag_sents
    • 升级到 NLTK v3.1,开发者已经解决了自 3.0 以来的很多错误,当然还有自 2.0 以来的更多。如果不去 stanford 的 corenlp 代码。
    • 冷静下来。先把 NLTK 更新到 v3.1,然后看看moin.delph-in.net/ZhongPreprocessing 看看能不能用。如果失败,请记下您为进行 NLTK 更新所采取的所有步骤,并为您的问题添加更多详细信息。然后我们可以尝试看看我们是否可以帮助您解决问题。
    猜你喜欢
    • 1970-01-01
    • 2017-11-05
    • 2016-07-10
    • 1970-01-01
    • 2015-01-26
    • 1970-01-01
    • 1970-01-01
    • 2016-02-18
    • 1970-01-01
    相关资源
    最近更新 更多