2013-04-18 9 views

Odpowiedz

18

Jeśli cv to CountVectorizer i X jest wektorowy korpusu, a następnie

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

zwraca listę (term, frequency) pary dla każdego odrębnego terminu w korpusie, że CountVectorizer ekstrahowano.

(konieczna jest Mała asarray + ravel taniec obejść niektórych dziwactw w scipy.sparse.)

+0

Dzięki! Ale nie są one zamówione, ale udało mi się to zrobić: dla sortowania krotki (occ_list, key = lambda idx: idx [1]): print tuple [0] + '' + str (tuple [1]). Problem polega na tym, że postacie åäö nie są drukowane. Ustawiłem kodowanie na utf8. – user1506145

+0

Jesteś również pewien, że get_feature_names() będzie miał terminy uporządkowane według ich indeksu w macierzy częstotliwość-częstotliwość? Dowiedziałem się, że cv.get_feature_names() i cv.vocabulary_.keys() nie ma tej samej kolejności. – user1506145

+3

@ user1506145: 'dict.keys' nie gwarantuje żadnego zamówienia; właśnie dlatego istnieje "get_feature_names". –

0

Nie ma wbudowanej. Znalazłem szybszy sposób to zrobić w oparciu o 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) 

wyjście

[('world', 2), ('python', 1), ('hello', 1), ('better', 1), ('makes', 1)] 
Powiązane problemy