2013-04-18 11 views
10

CountVectorizerscikit-learnのいくつかの文書にフィッティングしました。ストップワードを選択するために、すべての用語とその対応する頻度をテキストコーパスで確認したいと思います。たとえば、テキストコーパス内のオカレンスの語彙をリストアップするScikit-Learn

'and' 123 times, 'to' 100 times, 'for' 90 times, ... and so on 

このための組み込み関数はありますか?

答えて

18

cvがあなたのCountVectorizerXがベクトル化コーパスである場合には、

zip(cv.get_feature_names(), 
    np.asarray(X.sum(axis=0)).ravel()) 

CountVectorizerが抽出されたコーパス内の各個別の用語について(term, frequency)ペアのリストを返します。

(少しasarray + ravelダンスがscipy.sparseにいくつかの癖を回避するために必要とされる。)

+0

感謝を!しかし、それらは順序付けられていませんが、私はそれを行うことができました。ソートされたタプル(occ_list、key = lambda idx:idx [1]):print tuple [0] + '' + str(tuple [1])。問題は、文字が表示されないことです。私はutf8にコーディングを設定しました。 – user1506145

+0

また、get_feature_names()は、ターム - 頻度行列のインデックスに基づいてタームを並べ替えていますか?私はcv.get_feature_names()とcv.vocabulary_.keys()に同じ順序がないことを知りました。 – user1506145

+3

@ user1506145: 'dict.keys'は順序を保証しません。それはまさに 'get_feature_names'が存在する理由です。 –

0

組み込みのはありません。私はAndo Saabas's answerに基づいてそれを行うためのより高速な方法を発見した:

from sklearn.feature_extraction.text import CountVectorizer 
texts = ["Hello world", "Python makes a better world"] 
vec = CountVectorizer().fit(texts) 
bag_of_words = vec.transform(texts) 
sum_words = bag_of_words.sum(axis=0) 
words_freq = [(word, sum_words[0, idx]) for word, idx in vec.vocabulary_.items()] 
sorted(words_freq, key = lambda x: x[1], reverse=True) 

出力

[('world', 2), ('python', 1), ('hello', 1), ('better', 1), ('makes', 1)] 
関連する問題