【发布时间】:2019-05-23 23:07:13
【问题描述】:
按照Gödel, Escher, Bach 提供的图表,我已经构建了一个 Python 脚本来使用来自普林斯顿英语 Wordnet 的数据随机创建句子。调用python GEB.py 会生成一个无意义的英语句子列表,例如:
复苏的非审美成本。 苔藓植物的指甲。 厌恶第四十桃。 星光之皮。 翻译袍子的面粉拿了_a_dare一拳打穿了重新请求分封的applewood。 金枪鱼旁边的叶状货船。
并将它们保存到 gibberish.txt。该脚本运行良好。
另一个脚本 (translator.py) 使用 gibberish.txt,并通过 py-googletrans Python 模块尝试将这些随机句子翻译成葡萄牙语:
from googletrans import Translator
import json
tradutor = Translator()
with open('data.json') as dataFile:
data = json.load(dataFile)
def buscaLocal(keyword):
if keyword in data:
print(keyword + data[keyword])
else:
buscaAPI(keyword)
def buscaAPI(keyword):
result = tradutor.translate(keyword, dest="pt")
data.update({keyword: result.text})
with open('data.json', 'w') as fp:
json.dump(data, fp)
print(keyword + result.text)
keyword = open('/home/user/gibberish.txt', 'r').readline()
buscaLocal(keyword)
目前第二个脚本只输出 gibberish.txt 中第一句的翻译。比如:
复苏的非审美成本。 aumento de custos inestético。
我尝试使用readlines() 代替readline(),但出现以下错误:
Traceback (most recent call last):
File "main.py", line 28, in <module>
buscaLocal(keyword)
File "main.py", line 11, in buscaLocal
if keyword in data:
TypeError: unhashable type: 'list'
我在这里阅读过有关此错误的类似问题,但我不清楚应该使用什么来阅读 gibberish.txt 中包含的整个句子列表(新句子以新行开头)。
如何阅读 gibberish.txt 中包含的完整句子列表?我应该如何调整translator.py 中的代码以实现这一目标?如果问题有点混乱,我很抱歉,如有必要,我可以编辑,我是 Python 新手,如果有人可以帮助我,我将不胜感激。
【问题讨论】:
-
请提供完整的错误消息,包括堆栈跟踪。我怀疑是
readlines导致了这个错误。相反,readlines返回一个 list 行,您可能试图将该列表放入dict但您不能,因为列表对象不可散列。一般情况下,您需要提供minimal reproducible example -
特别是这里:
data.update({keyword: result.text}) -
刚刚编辑了完整的错误信息,很抱歉。
-
好的,正如我所解释的,
readlines返回一个list对象,该对象不可散列,因此,它不能用作dict对象的键 -
我明白了,所以 readlines() 根本不适合这里吗?感谢您的帮助。因此,使用代码 sn-p 中提供的 readline() 会输出句子列表中第一行的翻译。我应该改用什么来输出 .txt 中所有句子的翻译?
标签: python translation readline wordnet readlines