我正在使用NLTK在Web请求中对twitter的杂文进行POS标签。如您所知,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)
最初的18秒是POS标记器从磁盘上解开到RAM中。如果要解决此问题,请在请求函数之外自行加载标记器。
import nltk.data, nltk.tag tagger = nltk.data.load(nltk.tag._POS_TAGGER)
然后替换nltk.pos_tag为tagger.tag。代价是应用程序启动现在将花费+18秒。
nltk.pos_tag
tagger.tag