我是Python和Gensim的新手。我目前正在处理gensim
(http://radimrehurek.com/gensim/tut1.html)上的其中一个教程。关于这行代码,我有两个问题:
# collect statistics about all tokens
>>> dictionary = corpora.Dictionary(line.lower().split() for line in open('mycorpus.txt'))
1)在Dictionary开始构建之前,文件mycorpus.txt
是否已完全加载到内存中?该教程明确地说不:
Similarly, to construct the dictionary without loading all texts into memory
但是当我在我的Activity Monitor中监视RAM使用情况时,Python进程会为1 gig文件点击1 gig(我在中途杀死了该进程)。这很奇怪,因为我认为我的3演出文本文件的字典会小得多。有人可以为我澄清这一点吗?
2)我怎样才能重新编码这一行,以便我可以在每行读取之间做些什么呢?我想打印到屏幕以查看进度。这是我的尝试:
i = 1
for line in f:
if i % 1000 == 0:
print i
dictionary = corpora.Dictionary([line.lower().split()])
i += 1
这不起作用,因为字典正在为每一行重新初始化。
我意识到这些是非常难以理解的问题 - 感谢您的帮助和耐心。
答案 0 :(得分:3)
1)不,它们传递的是一个生成器对象,它一次只能生成一行到字典构造函数。除了python内部完成的一些缓存之外,它一次只读取一行。
构建字典后,它可能会占用与原始文件几乎相同的内存量 - 毕竟,它可能存储了所有这些信息。
2)就重新编码而言,你可以创建一个新的生成器,它可以完成你的操作,并像之前一样产生线条:
def generator(f)
for i, line in enumerate(f):
if i % 1000 == 0:
print i
yield line
with open('mycorpus.txt') as f:
dictionary = corpora.Dictionary(line.lower().split() for line in generator(f))