【发布时间】:2017-02-21 00:03:19
【问题描述】:
我目前正在运行此代码以搜索二元组以进行整个文本处理。
变量 alltext 是非常长的文本(超过 100 万字)
我运行这段代码来提取二元组
from nltk.tokenize import RegexpTokenizer
from nltk.corpus import stopwords
import re
tokenizer = RegexpTokenizer(r'([A-za-z]{2,})')
tokens = tokenizer.tokenize(alltext)
stopwords_list = stopwords.words('english')
tokens = [word for word in tokens if word not in stopwords.words('english')]
finder = BigramCollocationFinder.from_words(tokens, window_size = 2)
bigram_measures = nltk.collocations.BigramAssocMeasures()
for k,v in finder.ngram_fd.items():
print k,v
上面的代码搜索可能出现的二元组的频率。
代码向我打印了很多二元组及其出现次数。
输出与此类似。
(('upper', 'front'), 1)
(('pad', 'Teething'), 1)
(('shoulder', 'strap'), 1)
(('outer', 'breathable'), 1)
(('memory', 'foam'), 1)
(('shields', 'inner'), 1)
(('The', 'garment'), 2)
......
type(finder.ngram_fd.items()) is a list.
如何将频率从最高到最低的发生次数排序。我想要的结果是。
(('The', 'garment'), 2)
(('upper', 'front'), 1)
(('pad', 'Teething'), 1)
(('shoulder', 'strap'), 1)
(('outer', 'breathable'), 1)
(('memory', 'foam'), 1)
(('shields', 'inner'), 1)
非常感谢,我对 nltk 和文本处理还很陌生,所以我的解释不太清楚。
【问题讨论】:
-
使用
for k,v in sorted(finder.ngram_fd.items(), key=lambda t:t[-1], reverse=True)