【发布时间】:2019-11-10 10:31:33
【问题描述】:
我正在尝试在 python3(64 位)中实现 symspell,我有一个 20 MB 的 txt 文件,其中包含有频率的单词。我可以成功地将这些数据加载到名为 originalDictionary 的字典中。作为字典中每个单词的下一步,我应该一次删除一个字符,并将修改后的单词添加到另一个名为 editDictionary 的字典中。但是我遇到了内存错误。
我在具有 16gb RAM 的 Windows10(x64) 上运行它。
我能做些什么来解决这个问题?
for word in originalDictionary:
for i in range(len(word)):
edit1 = word[0:i] + word[i + 1:]
if edit1 not in editedDictionary:
editedDictionary[edit1] = [word]
else:
editedDictionary[edit1].append(word)
以下是错误:
Traceback (most recent call last):
File "C:\Program Files\JetBrains\PyCharm 2018.3.2\helpers\pydev\pydevd.py", line 1741, in <module>
main()
File "C:\Program Files\JetBrains\PyCharm 2018.3.2\helpers\pydev\pydevd.py", line 1735, in main
globals = debugger.run(setup['file'], None, None, is_module)
File "C:\Program Files\JetBrains\PyCharm 2018.3.2\helpers\pydev\pydevd.py", line 1135, in run
pydev_imports.execfile(file, globals, locals) # execute the script
File "C:\Program Files\JetBrains\PyCharm 2018.3.2\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile
exec(compile(contents+"\n", file, 'exec'), glob, loc)
File "C:/Users/ee/PycharmProjects/SymSpell/spellCorrector.py", line 98, in <module>
createDictionaries()
File "C:/Users/ee/PycharmProjects/SymSpell/spellCorrector.py", line 40, in createDictionaries
editedDictionary[edit1] = [word]
MemoryError
【问题讨论】:
-
请显示完整的错误信息以及它发生在哪一行。
-
一些统计数据可能会有所帮助。就像字典中的条目数,在出现内存错误之前它经过了多少次迭代,以及总体虚拟内存使用量是多少。我发现这样做是为了后者。
import psutil&print(psutil.virtual_memory())虽然需要用 pip 安装。 -
你正在研究的规模相当大。原始字典的大小乘以超过每个单词的平均长度。
标签: python-3.x memory out-of-memory