Перечислите слова в словаре в соответствии с появлением в текстовом корпусе Scikit-Learn
Я установил CountVectorizer
для некоторых документов в scikit-learn
. Я хотел бы видеть все термины и их соответствующую частоту в текстовом корпусе, чтобы выбрать стоп-слова. Например
'and' 123 times, 'to' 100 times, 'for' 90 times, ... and so on
Есть ли встроенная функция для этого?
Ответы
Ответ 1
Если cv
является вашим CountVectorizer
, а X
является векторизованным корпусом, то
zip(cv.get_feature_names(),
np.asarray(X.sum(axis=0)).ravel())
возвращает список пар (term, frequency)
для каждого отдельного члена в корпусе, который извлечен CountVectorizer
.
(Маленький танец asarray
+ ravel
необходим, чтобы обойти некоторые причуды в scipy.sparse
.)
Ответ 2
Нет встроенного. Я нашел более быстрый способ сделать это на основе Андо Саабаса:
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)]