Добавление нового текста в Sklearn TFIDIF Vectorizer (Python)

Есть ли функция для добавления к существующему корпусу? Я уже сгенерировал свою матрицу, я хочу периодически добавлять в таблицу без повторного хруста всего ша-банга

например;

articleList = ['here is some text blah blah','another text object', 'more foo for your bar right now'] tfidf_vectorizer = TfidfVectorizer( max_df=.8, max_features=2000, min_df=.05, preprocessor=prep_text, use_idf=True, tokenizer=tokenize_text ) tfidf_matrix = tfidf_vectorizer.fit_transform(articleList) #### ADDING A NEW ARTICLE TO EXISTING SET? bigger_tfidf_matrix = tfidf_vectorizer.fit_transform(['the last article I wanted to add']) 

Вы можете напрямую получить доступ к атрибуту vocabulary_ вашего вектора, и вы можете получить доступ к вектору _tfidf._idf_diag через _tfidf._idf_diag , так что можно было бы обезьян-патч что-то вроде этого:

 import re from scipy.sparse.dia import dia_matrix def partial_fit(self, X): max_idx = max(self.vocabulary_.values()) for a in X: #update vocabulary_ if self.lowercase: a = a.lower() tokens = re.findall(self.token_pattern, a) for w in tokens: if w not in self.vocabulary_: max_idx += 1 self.vocabulary_[w] = max_idx #update idf_ df = (self.n_docs + self.smooth_idf)/np.exp(self.idf_ - 1) - self.smooth_idf self.n_docs += 1 df.resize(len(self.vocabulary_)) for w in tokens: df[self.vocabulary_[w]] += 1 idf = np.log((self.n_docs + self.smooth_idf)/(df + self.smooth_idf)) + 1 self._tfidf._idf_diag = dia_matrix((idf, 0), shape=(len(idf), len(idf))) self._tfidf._idf_diag print((len(idf), len(idf))) print(vec._tfidf._idf_diag.shape) TfidfVectorizer.partial_fit = partial_fit vec = TfidfVectorizer() vec.fit(articleList) vec.n_docs = len(articleList) vec.partial_fit(['the last text I wanted to add']) vec.transform(['the last text I wanted to add']).toarray() # array([[ 0. , 0. , 0. , 0. , 0. , # 0. , 0. , 0. , 0. , 0. , # 0. , 0. , 0.27448674, 0. , 0.43003652, # 0.43003652, 0.43003652, 0.43003652, 0.43003652]])