【问题标题】:TfidfVectorizer for corpus that cannot fit in memory无法放入内存的语料库的 TfidfVectorizer
【发布时间】:2013-05-03 11:04:28
【问题描述】:

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

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

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

【问题讨论】:

  • 处理大型语料库时,使用最新的开发版本而不是稳定版本可能是个好主意,因为TfidfVectorizer 已经过大修以减少内存使用并提高速度。

标签: scikit-learn


【解决方案1】:

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

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)

【讨论】:

  • 如果 Tfidf 向量表示无法放入内存,有什么解决办法吗?
  • load_doc_from_file 到底是什么?我没有得到这个
猜你喜欢
  • 2018-11-17
  • 1970-01-01
  • 2018-12-04
  • 2016-10-26
  • 2021-08-21
  • 2021-05-13
  • 1970-01-01
  • 2018-05-25
  • 2018-10-31
相关资源
最近更新 更多