Использование преобразования Tfidfvectorizer Sklearn
Я пытаюсь получить вектор TF-idf для одного документа, используя объект Tfidfvectorizer Sklearn. Я создаю словарь на основе некоторых учебных документов и использую fit_transform для обучения TfidfVectorizer. Затем я хочу найти векторы TF-idf для любого данного документа тестирования.
from sklearn.feature_extraction.text import TfidfVectorizer
self.vocabulary = "a list of words I want to look for in the documents".split()
self.vect = TfidfVectorizer(sublinear_tf=True, max_df=0.5, analyzer='word',
stop_words='english')
self.vect.fit_transform(self.vocabulary)
...
doc = "some string I want to get tf-idf vector for"
tfidf = self.vect.transform(doc)
проблема в том, что это возвращает матрицу с n строками, где n-размер моей строки doc. Я хочу, чтобы он возвращал только один вектор, представляющий TF-idf для всей строки. Как я могу заставить это видеть строку как один документ, а не каждый символ, являющийся документом? Кроме того, я очень новичок в текстовом майнинге, поэтому, если я делаю что-то неправильно концептуально, было бы здорово знать. Любая помощь приветствуется.
1 ответов
если вы хотите вычислить TF-idf только для данного словаря, используйте до TfidfVectorizer
строитель,
vocabulary = "a list of words I want to look for in the documents".split()
vect = TfidfVectorizer(sublinear_tf=True, max_df=0.5, analyzer='word',
stop_words='english', vocabulary=vocabulary)
затем, чтобы соответствовать, т. е. вычислять количество, с заданным corpus
, т. е. iterable документов, используйте fit
:
vect.fit(corpus)
метод fit_transform
- это сокращение для
vect.fit(corpus)
corpus_tf_idf = vect.transform(corpus)
последние, transform
метод принимает корпус, поэтому за один документ, вы должны пройти его как список, или это лечится как повторяемое символов, каждый символ документ.
doc_tfidf = vect.transform([doc])