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

Использование преобразования Sklearn TfidfVectorizer

Я пытаюсь получить вектор tf-idf для одного документа, используя объект Sklearn TfidfVectorizer. Я создаю словарь на основе некоторых учебных документов и использую 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 - размер моей строки документа. Я хочу, чтобы он возвращал только один вектор, представляющий tf-idf для всей строки. Как это сделать, чтобы увидеть строку как отдельный документ, а не каждый символ, являющийся документом? Кроме того, я очень новичок в разработке текста, поэтому, если я делаю что-то неправильно концептуально, это было бы замечательно. Любая помощь приветствуется.

4b9b3361

Ответ 1

Если вы хотите вычислить tf-idf только для данного словаря, используйте аргумент vocabulary для конструктора 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, то есть итерируемым документами, используйте fit:

vect.fit(corpus)

Метод fit_transform является сокращением для

vect.fit(corpus)
corpus_tf_idf = vect.transform(corpus) 

В последнем случае метод transform принимает корпус, поэтому для одного документа вы должны передать его как список или обрабатывать как итерабельность символов, причем каждый символ является документом.

doc_tfidf = vect.transform([doc])