我目前正在运行这段代码,用于搜索bigram以进行整个文本处理。在
变量alltext是非常长的文本(超过100万个单词)
我运行这个代码来提取bigram
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
上面的代码搜索可能出现的双元组的频率。在
这段代码打印了大量的bigram和它的出现次数。在
输出与此类似。在
^{pr2}$我如何从最高发生次数到最低发生次数对频率进行排序。我的愿望是。在
(('The', 'garment'), 2)
(('upper', 'front'), 1)
(('pad', 'Teething'), 1)
(('shoulder', 'strap'), 1)
(('outer', 'breathable'), 1)
(('memory', 'foam'), 1)
(('shields', 'inner'), 1)
非常感谢,我对nltk和文本处理还很陌生,所以我的解释就不那么清楚了。在
看起来
finder.ngram_fd
是一本字典。在这种情况下,在python3中,items()
方法不返回列表,因此必须将其转换为一个列表。在一旦有了一个列表,就可以简单地使用^{} 方法的
key=
参数,该参数指定了我们排序的依据:您必须添加
reverse=True
,否则结果将按升序排列。注意,这将对列表进行适当排序。这是最好的时候,你想避免复制。如果您希望获得一个新列表,只需使用具有相同参数的sorted()
内置函数。在或者,您可以用^{} 模块替换lambda,它执行相同的操作:
^{pr2}$相关问题 更多 >
编程相关推荐