Python Gensim在不将所有文本加载到内存的情况下构建词典Gensim

Python Gensim在不将所有文本加载到内存的情况下构建词典Gensim,python,bigdata,gensim,Python,Bigdata,Gensim,与其从一个文档('mycorpus.txt')构建词典,我如何从多个文档(每个文档的文件大小为25 MB,包含10000个文件)构建词典,请注意,我正在尝试通过gensim“构建词典,而不将所有文本加载到内存中” >>> from gensim import corpora >>> from six import iteritems >>> dictionary = corpora.Dictionary(line.lower().split(

与其从一个文档('mycorpus.txt')构建词典,我如何从多个文档(每个文档的文件大小为25 MB,包含10000个文件)构建词典,请注意,我正在尝试通过gensim“构建词典,而不将所有文本加载到内存中”

>>> from gensim import corpora
>>> from six import iteritems
>>> dictionary = corpora.Dictionary(line.lower().split() for line in open('mycorpus.txt'))
>>> stop_ids = [dictionary.token2id[stopword] for stopword in stoplist
>>>             if stopword in dictionary.token2id]
>>> once_ids = [tokenid for tokenid, docfreq in iteritems(dictionary.dfs) if docfreq == 1]
>>> dictionary.filter_tokens(stop_ids + once_ids)  # remove stop words and words that appear only once
>>> dictionary.compactify()  # remove gaps in id sequence after words that were removed
>>> print(dictionary)

为此,您需要一个
迭代器。
摘自:

句子
是一个
迭代器
,它将在需要时打开每个文件,使用它然后销毁实例。所以在任何时候,内存中只有一个文件

网址:

如果我们的输入分散在磁盘上的多个文件中,每行一句话,那么我们可以逐行处理输入文件,而不是将所有内容加载到内存列表中

要在您的案例中使用它,只需将您的
字典
行替换为:

dictionary = corpora.Dictionary(line for line in sentences)
其中,
语句
是我们前面定义的变量,它被赋予了包含多个
.txt
文件的文件夹路径


要了解有关迭代器、Iterables和生成器的更多信息,请查看。

为此,您需要一个
迭代器。
摘自:

句子
是一个
迭代器
,它将在需要时打开每个文件,使用它然后销毁实例。所以在任何时候,内存中只有一个文件

网址:

如果我们的输入分散在磁盘上的多个文件中,每行一句话,那么我们可以逐行处理输入文件,而不是将所有内容加载到内存列表中

要在您的案例中使用它,只需将您的
字典
行替换为:

dictionary = corpora.Dictionary(line for line in sentences)
其中,
语句
是我们前面定义的变量,它被赋予了包含多个
.txt
文件的文件夹路径

要了解有关迭代器、Iterables和生成器的更多信息,请查看