我想在python中计算文档的Tfidf值。我的基本方法如下:
from sklearn.feature_extraction.text import TfidfVectorizer
tfidf_vectorizer = TfidfVectorizer(max_df=0.5,stop_words="english")
tfidf_matrix = tfidf_vectorizer.fit_transform(clean_tweet)
tfidf_matrix=tfidf_matrix.astype('float32')
termss = tfidf_vectorizer.get_feature_names()
toarry=tfidf_matrix.todense()# this step return a Memoryerror.
工作得非常好,但不幸的是,当我尝试将稀疏矩阵转换为密集toarry=tfidf_matrix.todense()
时,python返回MemoryError
。 tfidf_matrix的维度为(6602141,320297),它是一个稀疏矩阵。此外,我有100G的内存可用。我搜索了一些解决方案,比如使用np.memmap
或HDF5Store
,但我我不确定。
那么有没有人知道如何将稀疏矩阵转换为密集而没有内存错误?
P.S。 我剩下的代码是
flattern=toarry.sum(axis=0)
#flattern= map(sum,zip(*toarry))
tfidf=np.array(flattern).reshape(-1,).tolist()
merge={'terms':termss,
'tfidf':tfidf}
tfidf_object=pd.DataFrame(merge)
#tfidf_object.index.name="termss"
#print termss[-10:],"____",tfidf[-10:]
tfidf_objects=tfidf_object.sort_index(by=["tfidf"],ascending=False)
我想将密集矩阵转换为一维矩阵,因此我可以获得前100个tfidf-words。