我正在使用scikit尝试这个简单的任务,但我在使用稀疏矩阵时遇到了麻烦。为此,我不关心文档频率。
这是我到目前为止所做的:
vectorizer = CountVectorizer(ngram_range=(1,3))
n_grams = vectorizer.fit_transform(df.column_with_text)
此时我知道我被要求做一些涉及n_grams
和inverse_transform
的事情,但我不确定是什么。我想要一个按频率排列的[n_gram,frequency]列表,如下所示:
"apple banana", 100
"this is fun", 100
"cool pandas", 99
...
感谢。
答案 0 :(得分:2)
您使用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'),