Подтвердить что ты не робот

Как увидеть верхние n записей матрицы term-document после tfidf в scikit-learn

Я новичок в scikit-learn, и я использовал TfidfVectorizer, чтобы найти значения tfidf терминов в наборе документов. Я использовал следующий код, чтобы получить то же самое.

vectorizer = TfidfVectorizer(stop_words=u'english',ngram_range=(1,5),lowercase=True)
X = vectorizer.fit_transform(lectures)

Теперь, если я печатаю X, я могу видеть все записи в матрице, но как я могу найти верхние n записей на основе оценки tfidf. В дополнение к этому есть какой-либо метод, который поможет мне найти верхние n записей на основе tfidf score за ngram, т.е. Верхние записи среди униграмм, bigram, триграмм и т.д.?

4b9b3361

Ответ 1

Начиная с версии 0.15, глобальный вес взвешивания функций, полученных с помощью TfidfVectorizer, можно получить через атрибут idf_, который вернет массив длины, равный размерности функции. Сортируйте функции с помощью этого взвешивания, чтобы получить верхние взвешенные функции:

from sklearn.feature_extraction.text import TfidfVectorizer
import numpy as np

lectures = ["this is some food", "this is some drink"]
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(lectures)
indices = np.argsort(vectorizer.idf_)[::-1]
features = vectorizer.get_feature_names()
top_n = 2
top_features = [features[i] for i in indices[:top_n]]
print top_features

Вывод:

[u'food', u'drink']

Вторая проблема получения верхних функций ngram может быть выполнена с использованием той же идеи, с некоторыми дополнительными шагами разделения функций на разные группы:

from sklearn.feature_extraction.text import TfidfVectorizer
from collections import defaultdict

lectures = ["this is some food", "this is some drink"]
vectorizer = TfidfVectorizer(ngram_range=(1,2))
X = vectorizer.fit_transform(lectures)
features_by_gram = defaultdict(list)
for f, w in zip(vectorizer.get_feature_names(), vectorizer.idf_):
    features_by_gram[len(f.split(' '))].append((f, w))
top_n = 2
for gram, features in features_by_gram.iteritems():
    top_features = sorted(features, key=lambda x: x[1], reverse=True)[:top_n]
    top_features = [f[0] for f in top_features]
    print '{}-gram top:'.format(gram), top_features

Вывод:

1-gram top: [u'drink', u'food']
2-gram top: [u'some drink', u'some food']