Twitter “如何加速”;POS标签";和斯坦福德一起?
我不想在推特上使用任何短语,代码如下。问题是,它一次只能处理300条推文,只需要5分钟,如何加速 顺便说一下,有些代码是根据文本块编辑的 我使用gate-EN-twitter()的数据集和NLTK接口对斯坦福POS标记器进行标记Twitter “如何加速”;POS标签";和斯坦福德一起?,twitter,nltk,stanford-nlp,pos-tagger,Twitter,Nltk,Stanford Nlp,Pos Tagger,我不想在推特上使用任何短语,代码如下。问题是,它一次只能处理300条推文,只需要5分钟,如何加速 顺便说一下,有些代码是根据文本块编辑的 我使用gate-EN-twitter()的数据集和NLTK接口对斯坦福POS标记器进行标记 from nltk.tag import StanfordPOSTagger from nltk.tokenize import word_tokenize import time,nltk start_time = time.time() CFG = {
from nltk.tag import StanfordPOSTagger
from nltk.tokenize import word_tokenize
import time,nltk
start_time = time.time()
CFG = {
('NNP', 'NNP'): 'NNP',
('NN', 'NN'): 'NNI',
('NNI', 'NN'): 'NNI',
('JJ', 'JJ'): 'JJ',
('JJ', 'NN'): 'NNI',
}
st = StanfordPOSTagger('/models/gate-EN-twitter.model','/twitie_tagger/twitie_tag.jar', encoding='utf-8')
def _normalize_tags(chunk):
'''Normalize the corpus tags.
("NN", "NN-PL", "NNS") -> "NN"
'''
ret = []
for word, tag in chunk:
if tag == 'NP-TL' or tag == 'NP':
ret.append((word, 'NNP'))
continue
if tag.endswith('-TL'):
ret.append((word, tag[:-3]))
continue
if tag.endswith('S'):
ret.append((word, tag[:-1]))
continue
ret.append((word, tag))
return ret
def noun_phrase_count(text):
matches1=[]
print('len(text)',len(text))
for i in range(len(text)//1000):
tokenized_text = word_tokenize(text[i*1000:i*10000+1000])
classified_text = st.tag(tokenized_text)
tags = _normalize_tags(classified_text)
merge = True
while merge:
merge = False
for x in range(0, len(tags) - 1):
t1 = tags[x]
t2 = tags[x + 1]
key = t1[1], t2[1]
value = CFG.get(key, '')
if value:
merge = True
tags.pop(x)
tags.pop(x)
match = '%s %s' % (t1[0], t2[0])
pos = value
tags.insert(x, (match, pos))
break
matches = [t[0] for t in tags if t[1] in ['NNP', 'NNI']]
matches1+=matches
print("--- %s seconds ---" % (time.time() - start_time))
fdist = nltk.FreqDist(matches1)
return [(tag,num) for (tag, num) in fdist.most_common()]
noun_phrase_count(tweets)
看起来像的副本,因此您可以在那里找到更多信息
此外;如果有可能偶然遇到相同的输入(twitts)两次(或更多),你可以考虑一个带有tWET(简单STR)的字典作为关键字,并标记为值,这样当你遇到一条推特时,你首先检查它是否在你的DICT中。如果没有,标记它并将其放在那里(如果此路径可行,为什么不pickle/unpickle该字典,以便调试/后续代码运行也更快)