9

我想基于无法放入内存的语料库构建 tf-idf 模型。我阅读了教程,但似乎立即加载了语料库:

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

我想知道我是否可以将文档一个一个地加载到内存中,而不是全部加载。

4

1 回答 1

13

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

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)
于 2013-05-09T06:39:56.893 回答