4

在实习项目的背景下,我必须对大量文件(~18000)进行 tfidf 分析。我正在尝试使用 sklearn 中的 TFIDF 矢量化器,但我面临以下问题:如何避免一次将所有文件加载到内存中?根据我在其他帖子上阅读的内容,使用可迭代对象似乎是可行的,但如果我使用例如 [open(file) for file in os.listdir(path)] 作为 fit_transform() 函数的raw_documents输入,我收到“打开的文件太多”错误。提前感谢您的建议!干杯!保罗

4

1 回答 1

3

您是否尝试input='filename'过 TfidfVectorizer 中的参数?像这样的东西:

raw_docs_filepaths = [#List containing the filepaths of all the files]

tfidf_vectorizer =  TfidfVectorizer(`input='filename'`)
tfidf_data = tfidf_vectorizer.fit_transform(raw_docs_filepaths)

这应该可以工作,因为在这种情况下,矢量化器将在处理该文件时一次打开一个文件。这可以通过在这里交叉检查源代码来确认

def decode(self, doc):
...
...
    if self.input == 'filename':
        with open(doc, 'rb') as fh:
            doc = fh.read()
...
...
于 2018-07-20T10:25:42.590 回答