Guarde y reutilice TfidfVectorizer en scikit learn
Estoy usando TfidfVectorizer en scikit learn para crear una matriz a partir de datos de texto. Ahora necesito guardar este objeto para reutilizarlo más tarde. Intenté usar pickle, pero me dio el siguiente error.
loc=open('vectorizer.obj','w')
pickle.dump(self.vectorizer,loc)
*** TypeError: can't pickle instancemethod objects
Intenté usar joblib en sklearn.externals, que nuevamente dio un error similar. ¿Hay alguna forma de guardar este objeto para poder reutilizarlo más tarde?
Aquí está mi objeto completo:
class changeToMatrix(object):
def __init__(self,ngram_range=(1,1),tokenizer=StemTokenizer()):
from sklearn.feature_extraction.text import TfidfVectorizer
self.vectorizer = TfidfVectorizer(ngram_range=ngram_range,analyzer='word',lowercase=True,\
token_pattern='[a-zA-Z0-9]+',strip_accents='unicode',tokenizer=tokenizer)
def load_ref_text(self,text_file):
textfile = open(text_file,'r')
lines=textfile.readlines()
textfile.close()
lines = ' '.join(lines)
sent_tokenizer = nltk.data.load('tokenizers/punkt/english.pickle')
sentences = [ sent_tokenizer.tokenize(lines.strip()) ]
sentences1 = [item.strip().strip('.') for sublist in sentences for item in sublist]
chk2=pd.DataFrame(self.vectorizer.fit_transform(sentences1).toarray()) #vectorizer is transformed in this step
return sentences1,[chk2]
def get_processed_data(self,data_loc):
ref_sentences,ref_dataframes=self.load_ref_text(data_loc)
loc=open("indexedData/vectorizer.obj","w")
pickle.dump(self.vectorizer,loc) #getting error here
loc.close()
return ref_sentences,ref_dataframes