我正在使用NLTK在Web请求中标记推文.如您所知,Django为每个请求实例化请求处理程序.
我注意到了这一点:对于一个请求(约200条推文),第一条推文需要大约18秒来标记,而所有后续推文需要大约120毫秒来标记.我该怎么做才能加快这个过程?
我可以执行"预热请求",以便为每个请求加载模块数据吗?
class MyRequestHandler(BaseHandler):
def read(self, request): #this runs for a GET request
#...in a loop:
tokens = nltk.word_tokenize( tweet)
tagged = nltk.pos_tag( tokens)
Run Code Online (Sandbox Code Playgroud) 有没有办法以更高效的方式使用Standford Tagger?
每次调用NLTK的包装器都会为每个分析的字符串启动一个新的java实例,这非常非常慢,特别是当使用更大的外语模型时......
http://www.nltk.org/api/nltk.tag.html#module-nltk.tag.stanford
注意:我使用Python 2.7作为Anaconda发行版的一部分.我希望这不是nltk 3.1的问题.
我正在尝试使用nltk作为NER
import nltk
from nltk.tag.stanford import StanfordNERTagger
#st = StanfordNERTagger('stanford-ner/all.3class.distsim.crf.ser.gz', 'stanford-ner/stanford-ner.jar')
st = StanfordNERTagger('english.all.3class.distsim.crf.ser.gz')
print st.tag(str)
Run Code Online (Sandbox Code Playgroud)
但我明白了
Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
at edu.stanford.nlp.io.IOUtils.<clinit>(IOUtils.java:41)
at edu.stanford.nlp.ie.AbstractSequenceClassifier.classifyAndWriteAnswers(AbstractSequenceClassifier.java:1117)
at edu.stanford.nlp.ie.AbstractSequenceClassifier.classifyAndWriteAnswers(AbstractSequenceClassifier.java:1076)
at edu.stanford.nlp.ie.AbstractSequenceClassifier.classifyAndWriteAnswers(AbstractSequenceClassifier.java:1057)
at edu.stanford.nlp.ie.crf.CRFClassifier.main(CRFClassifier.java:3088)
Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 5 more
Traceback (most recent call last):
File "X:\jnk.py", line 47, in <module>
print st.tag(str)
File "X:\Anaconda2\lib\site-packages\nltk\tag\stanford.py", line 66, in tag
return sum(self.tag_sents([tokens]), [])
File "X:\Anaconda2\lib\site-packages\nltk\tag\stanford.py", line 89, in tag_sents
stdout=PIPE, …Run Code Online (Sandbox Code Playgroud)