如何获得具有scikit和pandas频率的Ngrams排名列表?

时间:2016-03-16 21:50:09

标签: python pandas nlp scikit-learn

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

这是我到目前为止所做的:

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

此时我知道我被要求做一些涉及n_gramsinverse_transform的事情,但我不确定是什么。我想要一个按频率排列的[n_gram,frequency]列表,如下所示:

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

感谢。

1 个答案:

答案 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'),