gpt4 book ai didi

python - 按出现次数排序 Bigram NLTK

转载 作者:行者123 更新时间:2023-11-28 22:33:22 26 4
gpt4 key购买 nike

我目前正在运行此代码以在我的整个文本处理过程中搜索二元语法。

变量 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 和文本处理还很陌生,所以我的解释不会那么清楚。

最佳答案

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

有了列表后,您可以简单地使用 sort()key= 参数方法,它指定我们要排序的对象:

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

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

或者,您可以将 lambda 替换为 operator.itemgetter模块,做同样的事情:

ngram.sort(key=operator.itemgetter(-1), reverse=True)

关于python - 按出现次数排序 Bigram NLTK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39994312/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com