Как я могу рассчитать баллы TF-IDF корпуса, а затем использовать эти баллы для расчета TF-DF в новом документе?

#python #scikit-learn #scipy #tf-idf #tfidfvectorizer

Вопрос:

Как я могу рассчитать баллы TF-IDF корпуса, а затем использовать эти баллы для расчета TF-DF в новом документе без необходимости пересчета исходного корпуса? В идеале я также хотел бы сохранить исходные результаты корпуса, чтобы я мог рассчитать баллы tf-idf в новом документе в любое время, когда захочу.

Что следует отметить:

  • Я забочусь только о том, чтобы получить оценки TF-IDF для токенов в «новом документе», однако мне все еще требуются оценки IDF для всего корпуса, включая новый документ
  • Я использую результаты для удаления чрезмерно общих слов из каждого «нового документа» для другой задачи

Я читал, что вы, возможно, можете «подогнать» словарь, а затем «подогнать» новый документ, например:

 corpus = ['my_file.txt', 'my_file_2.txt', 'my_file_3.txt']
vectorizer = TfidfVectorizer(input='filename')
vectorizer.fit(corpus)

pickle.dump(vectorizer.vocabulary_, open("feature.pkl", "wb"))
 

Затем, позже, когда я захочу рассчитать оценки нового документа, я смогу:

 loaded_vec = TfidfVectorizer(vocabulary=pickle.load(open("feature.pkl", "rb")))
matrix = loaded_vec.fit_transform('my_new_doc.txt')
 

Однако это дает разные результаты, когда я вычисляю все документы вместе за один раз, но также отличается от того, когда я вычисляю новый документ самостоятельно.

Я думаю, что в идеале я хотел бы, чтобы результаты «новых документов» были такими, как если бы они были рассчитаны вместе с остальной частью корпуса.

Возможно ли это?