按出现次数对Bigram排序NLTK

2024-09-30 10:38:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在运行这段代码,用于搜索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和文本处理还很陌生,所以我的解释就不那么清楚了。在


Tags: 代码infromimport次数wordwords文本处理
1条回答
网友
1楼 · 发布于 2024-09-30 10:38:09

看起来finder.ngram_fd是一本字典。在这种情况下,在python3中,items()方法不返回列表,因此必须将其转换为一个列表。在

一旦有了一个列表,就可以简单地使用^{}方法的key=参数,该参数指定了我们排序的依据:

ngram = list(finder.ngram_fd.items())
ngram.sort(key=lambda item: item[-1], reverse=True)

您必须添加reverse=True,否则结果将按升序排列。注意,这将对列表进行适当排序。这是最好的时候,你想避免复制。如果您希望获得一个新列表,只需使用具有相同参数的sorted()内置函数。在

或者,您可以用^{}模块替换lambda,它执行相同的操作:

^{pr2}$

相关问题 更多 >

    热门问题