我正在尝试使用 scikit 完成这个简单的任务,但我在使用稀疏矩阵时遇到问题。 为此,我不关心文档频率。
这是我到目前为止所拥有的:
vectorizer = CountVectorizer(ngram_range=(1,3))
n_grams = vectorizer.fit_transform(df.column_with_text)
在这一点上,我知道我被支持做一些涉及n_grams
和inverse_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'),