CountVectorizer
をscikit-learn
のいくつかの文書にフィッティングしました。ストップワードを選択するために、すべての用語とその対応する頻度をテキストコーパスで確認したいと思います。たとえば、テキストコーパス内のオカレンスの語彙をリストアップするScikit-Learn
'and' 123 times, 'to' 100 times, 'for' 90 times, ... and so on
このための組み込み関数はありますか?
CountVectorizer
をscikit-learn
のいくつかの文書にフィッティングしました。ストップワードを選択するために、すべての用語とその対応する頻度をテキストコーパスで確認したいと思います。たとえば、テキストコーパス内のオカレンスの語彙をリストアップするScikit-Learn
'and' 123 times, 'to' 100 times, 'for' 90 times, ... and so on
このための組み込み関数はありますか?
cv
があなたのCountVectorizer
とX
がベクトル化コーパスである場合には、
zip(cv.get_feature_names(),
np.asarray(X.sum(axis=0)).ravel())
はCountVectorizer
が抽出されたコーパス内の各個別の用語について(term, frequency)
ペアのリストを返します。
(少しasarray
+ ravel
ダンスがscipy.sparse
にいくつかの癖を回避するために必要とされる。)
組み込みのはありません。私は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)]
感謝を!しかし、それらは順序付けられていませんが、私はそれを行うことができました。ソートされたタプル(occ_list、key = lambda idx:idx [1]):print tuple [0] + '' + str(tuple [1])。問題は、文字が表示されないことです。私はutf8にコーディングを設定しました。 – user1506145
また、get_feature_names()は、ターム - 頻度行列のインデックスに基づいてタームを並べ替えていますか?私はcv.get_feature_names()とcv.vocabulary_.keys()に同じ順序がないことを知りました。 – user1506145
@ user1506145: 'dict.keys'は順序を保証しません。それはまさに 'get_feature_names'が存在する理由です。 –