如何获得带有scikit和熊猫频率的Ngrams排名列表



我正在尝试使用 scikit 完成这个简单的任务,但我在使用稀疏矩阵时遇到问题。 为此,我不关心文档频率。

这是我到目前为止所拥有的:

vectorizer = CountVectorizer(ngram_range=(1,3))
n_grams = vectorizer.fit_transform(df.column_with_text)

在这一点上,我知道我被支持做一些涉及n_gramsinverse_transform的事情,但我不确定是什么。我想要一个按频率排名的[n_gram,频率]列表,如下所示:

"apple banana", 100
"this is fun", 100
"cool pandas", 99
...

谢谢。

您可以使用 vocabulary_ 从矢量化器中获取词汇表; 这些值是对应于键的矢量化输出的列:

vectorizer.vocabulary_
{'apple': 0,
 'apple banana': 1,
 'apple banana this': 2,

频率将是n_grams列的总和,要计算这些,最简单的方法是先用toarray()将稀疏矩阵转换为numpy数组,然后将它们匹配的一种方法是使用列表推导:

vocab = vectorizer.vocabulary_
count_values = n_grams.toarray().sum(axis=0)
counts = sorted([(count_values[i],k) for k,i in vocab.items()], reverse=True)
counts
[(4, 'pandas'),
 (4, 'cool pandas'),
 (4, 'cool'),
 (2, 'this is fun'),
 (2, 'this is'),

相关内容

  • 没有找到相关文章

最新更新