我正在使用NLTK在web请求中对大量tweets进行POS标记。如您所知,Django为每个请求实例化一个请求处理程序。
我注意到:对于一个请求(~200条tweets),第一条tweet需要~18秒来标记,而随后的所有tweets需要~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)
nltk的POS标记非常慢:
对我来说,我可以在243秒内发13739条微博:
见http://honnibal.wordpress.com/2013/09/11/a-good-part-of-speechpos-tagger-in-about-200-lines-of-python/ 但总结一下:
前18秒是POS标记器被从磁盘取出放入RAM。如果您想绕过这个问题,可以在请求函数之外自己加载标记器。
然后用
tagger.tag
替换nltk.pos_tag
。 权衡的结果是,应用程序启动现在需要+18秒。如前所述,每次使用标准pos_标记方法时,NLTK都会取消勾选。对于NLTK 3.1,假设您对NLTK的默认标记器(PerceptronTagger)满意,那么下面的方法对我有效:
首先加载标记:
然后,每次需要标记一点文本时:
这基本上绕过了主要方法。为我加速了上百次。我假设同样的方法适用于任何标记器。
相关问题 更多 >
编程相关推荐