Stanford nlp 如何在Python中加速Stanford NLP?

Stanford nlp 如何在Python中加速Stanford NLP?,stanford-nlp,Stanford Nlp,初始化上述代码后,Stanford NLP以下代码需要10秒钟来标记文本,如下所示。如何加速 import numpy as np from nltk.tag import StanfordNERTagger from nltk.tokenize import word_tokenize #english.all.3class.distsim.crf.ser.gz st = StanfordNERTagger('/media/sf_codebase/modules/stanford-ne

初始化上述代码后,Stanford NLP以下代码需要10秒钟来标记文本,如下所示。如何加速

import numpy as np
from nltk.tag import StanfordNERTagger
from nltk.tokenize import word_tokenize
    #english.all.3class.distsim.crf.ser.gz
st = StanfordNERTagger('/media/sf_codebase/modules/stanford-ner-2018-10-16/classifiers/english.all.3class.distsim.crf.ser.gz',
                           '/media/sf_codebase/modules/stanford-ner-2018-10-16/stanford-ner.jar',
                           encoding='utf-8')
输出

%%time
text="My name is John Doe"
tokenized_text = word_tokenize(text)
classified_text = st.tag(tokenized_text)
print (classified_text)
找到了答案

在后台斯坦福NLP解压文件夹中启动斯坦福NLP服务器

[('My', 'O'), ('name', 'O'), ('is', 'O'), ('John', 'PERSON'), ('Doe', 'PERSON')]
CPU times: user 4 ms, sys: 20 ms, total: 24 ms
Wall time: 10.9 s
然后使用sner库在Python中启动Stanford NLP服务器标记器

java -Djava.ext.dirs=./lib -cp stanford-ner.jar edu.stanford.nlp.ie.NERServer -port 9199 -loadClassifier ./classifiers/english.all.3class.distsim.crf.ser.gz
然后运行标记器

from sner import Ner
tagger = Ner(host='localhost',port=9199)
输出:

%%time
classified_text=tagger.get_entities(text)
print (classified_text)

就时间而言,性能提高了近300倍!哇

NLTK中的另一个解决方案是不使用旧的NLTK.tag.StanfordNERTagger,而是使用新的NLTK.parse.CoreNLPParser。参见,例如


更一般地说,良好性能的秘诀实际上是在Java端使用服务器,您可以重复调用服务器,而无需为处理的每个句子启动新的子进程。如果您只需要NER,您可以使用NERServer,也可以使用StanfordCoreNLPServer来实现所有CoreNLP功能。它有许多Python接口,请参见:

非常感谢Christopher Manning先生。老实说,看到你回答这个问题,我感到惊讶和谦卑。从您的教学和出版物中学习了很多关于深入学习NLP的知识。再次感谢!
    [('My', 'O'), ('name', 'O'), ('is', 'O'), ('John', 'PERSON'), ('Doe', 'PERSON')]
CPU times: user 4 ms, sys: 0 ns, total: 4 ms
Wall time: 18.2 ms