【发布时间】:2015-03-19 06:27:19
【问题描述】:
节目:
这是一个程序,它试图在给出一个句子的起始词列表 (seedBank) 和一个词对字典 (pairs) 后创建一个乱码语句,该字典包含来自文本文件的信息,即哪些词跟在哪个词后面.
包含“这是一只猫”的 text.txt 文件示例。他是一条狗。这意味着我们将输入以下内容:
seedBank = ['This', 'He']
pairs = { 'This':['is'],'is':['a','a'],'a':['cat','dog'],'He':['is'] }
因此,该函数使用这些输入来创建一个随机生成的句子,该句子具有模糊的意义,因为它遵循半语法正确的格式。
def gibberish_sentence(seedBank, pairs):
gibSentence = []
gibSentence.append(random.choice(seedBank)) #random seed
x = gibSentence[0]
while(pairs.get(x)is not None): #Loop while value x is a key in the dictionairy
y = random.choice(pairs.get(x)) #random value of key x
gibSentence.append(y) #random value is added to main string
x = y #key x is reset to y
return ' '.join(gibSentence) #String
问题:
这个程序可以很好地传递像上面这样带有一组定义的 random.seed(value) 的小句子,但是当给定一组非常大的输入(seedBank 和对)时,它会失败并返回内存错误。因此,我的问题是这个程序的哪些问题可能会导致它在处理更大的参数时出现问题?
请注意,这些参数实际上并不大,我没有文本文档,但它不会太大,例如没有足够的 RAM。
错误代码:
非常感谢。
已解决:谢谢!问题已解决,实际上是导致问题的 while 条件,这是它循环遍历整个文本,而不是仅在到达带有句号或问号等的单词时结束。本质上,这导致它过载记忆,但感谢大家的帮助!
【问题讨论】:
-
文本文件有多大?在 KB 的顺序上?兆?国标?另外,我认为我们需要查看调用代码——我敢打赌,你不小心复制了占用大量内存的东西。
-
不幸的是,这是一个自动化测试系统,但我已通过电子邮件向提供测试的人发送电子邮件,以便我可以手动检查它,我认为问题可能与下面提到的无限循环有关,但我会考虑到这一点。文本文件只有 9.5KB,所以出了点问题!
-
谢谢!问题已解决,实际上是导致问题的 while 条件,这是它循环遍历整个文本,而不是仅在到达带有句号或问号等的单词时结束。本质上,这导致它过载记忆,但感谢大家的帮助!