【问题标题】:Reading a big language corpus without Memory Error in 16GB RAM computer在 16GB RAM 计算机中读取大语言语料库而不会出现内存错误
【发布时间】:2018-09-08 06:42:51
【问题描述】:

我发现 Google NMT 使用编解码器来读取输入数据文件。

import codecs
import tensorflow as tf
with codecs.getreader("utf-8")(tf.gfile.GFile(input_file, mode="rb")) as f:
    return f.read().splitlines()

我有两个问题。

  1. 以上是否支持在使用tf.gfile.GFile 的16GB RAM 的个人计算机中读取size more than 5 GB 左右的巨大数据集而不会出现内存错误?我真的很感激能帮助我阅读大量语言语料库的解决方案

没有出现内存错误

。 2. 我在代码中导入了编解码器,为什么会出现这个错误"NameError: name 'codecs' is not defined"?

编辑 1:

对于2.获取

 OutOfRangeError                           Traceback (most recent call last)
    <ipython-input-7-e78786c1f151> in <module>()
          6 input_file = os.path.join(source_path)
          7 with codecs.getreader("utf-8")(tf.gfile.GFile(input_file, mode="rb")) as f:
    ----> 8     source_text = f.read().splitlines()

当操作迭代超过有效输入范围时引发OutOfRangeError。我怎样才能解决这个问题 ?

【问题讨论】:

  • 你能输入你的导入行吗
  • 已在问题中更新!!
  • 你想对文件做什么?由于这似乎是一个基于行的文本文件,因此您可以只阅读它而不会在内存中超过一行。另外,当您只想读取文件时,为什么在这里使用tensorflow.gfile.GFile?为什么不来自 Python 标准库的io.open
  • 你用的是什么版本的 Python,我刚刚测试了一个简单的两行代码 Type "help", "copyright", "credits" or "license" for more information. &gt;&gt;&gt; import codecs &gt;&gt;&gt; codecs.open("Sample.csv") &lt;_io.TextIOWrapper name='Sample.csv' mode='r' encoding='cp1252'&gt; &gt;&gt;&gt; 它工作正常
  • 编解码器导入工作。那应该是我的错。您对我的问题 1 和问题 2 的最新更新有答案吗?非常感谢您的帮助

标签: python-3.x tensorflow nlp bigdata machine-translation


【解决方案1】:

如果文件非常大,建议逐行处理。 下面的代码可以解决问题:

with open("input_file") as infile:
    for line in infile:
        do_something_with(line)

【讨论】:

  • 这似乎有效,但内核自动死亡。这可以改善吗?
  • 哦,但是这段代码一次只能读取一行。当您阅读下一个以前的内容时,会收集垃圾,因此不应该存在内存问题,对我来说很好。
猜你喜欢
  • 1970-01-01
  • 2022-01-18
  • 2014-09-05
  • 1970-01-01
  • 1970-01-01
  • 2014-04-21
  • 1970-01-01
  • 2020-12-03
  • 2020-06-15
相关资源
最近更新 更多