2013-05-09 34 views
5

我想根据不适合内存的语料库构建tf-idf模型。我读的教程,但胼似乎一下子被加载:TfidfVectorizer适用于不适合内存的语料库

from sklearn.feature_extraction.text import TfidfVectorizer 
corpus = ["doc1", "doc2", "doc3"] 
vectorizer = TfidfVectorizer(min_df=1) 
vectorizer.fit(corpus) 

我不知道如果我可以通过一个文件加载到内存中的一个而不是加载所有的人。

+0

当处理大型语料库时,使用最近的开发版本而不是稳定版本可能是一个好主意,因为对TfidfVectorizer进行了大修以减少内存使用量并提高了速度。 – 2013-05-09 20:20:49

回答

11

是的,你可以让你的语料库成为迭代器。例如,如果您的文档驻留在光盘上,则可以定义一个迭代器,该文件将文件名列表作为参数,并逐个返回文档,而无需将所有内容一次性加载到内存中。

from sklearn.feature_extraction.text import TfidfVectorizer 

def make_corpus(doc_files): 
    for doc in doc_files: 
     yield load_doc_from_file(doc) #load_doc_from_file is a custom function for loading a doc from file 

file_list = ... # list of files you want to load 
corpus = make_corpus(file_list) 
vectorizer = TfidfVectorizer(min_df=1) 
vectorizer.fit(corpus) 
+0

我要测试一下。可以不经变换而工作? – 2013-08-23 13:12:28

+0

任何解决方案,即使Tfidf向量表示不能适应内存? – mchangun 2013-10-23 12:04:03

相关问题