Использование преобразования 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])