gpt4 book ai didi

python - 在不加载所有文本的情况下构建词典

转载 作者:太空宇宙 更新时间:2023-11-04 01:23:47 26 4
gpt4 key购买 nike

我是 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) 在词典开始构建之前,文件 mycorpus.txt 是否已完全加载到内存中?本教程明确表示不:

Similarly, to construct the dictionary without loading all texts into memory

但是当我在事件监视器中监视 RAM 使用情况时,Python 进程为 3 gig 文件命中了 1 gig(我中途终止了该进程)。这很奇怪,因为我假设我的 3 gig 文本文件的字典会小得多。有人可以为我澄清这一点吗?

2) 我如何重新编码这一行,以便我可以在读取的每一行之间做一些事情?我想打印到屏幕以查看进度。这是我的尝试:

i = 1

for line in f:
if i % 1000 == 0:
print i
dictionary = corpora.Dictionary([line.lower().split()])
i += 1

这不起作用,因为正在为每一行重新初始化字典。

我意识到这些都是非常 n00b 的问题 - 感谢您的帮助和耐心。

最佳答案

1) 不,他们将一个生成器对象传递给字典构造函数,该对象一次只生成一行。除了 python 内部完成的一些缓存之外,它基本上一次只读取 1 行。

字典构建完成后,它可能会占用与原始文件几乎相同的内存量 -- 毕竟,它可能会存储所有这些信息。

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))

关于python - 在不加载所有文本的情况下构建词典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19474333/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com