我是蟒蛇和自然语言处理的新手,我正在尝试学习使用nltk书籍。我在第2章结束时进行了练习,并且有一个问题我会坚持下去。 "在比较单词列表的讨论中,我们创建了一个名为translate的对象,您可以使用德语和意大利语单词查找,以获得相应的英语单词。这种方法可能会出现什么问题?你能建议一种避免这个问题的方法吗?"
这本书让我使用swadesh语料库来创建一个翻译者,如下所示:
`from nltk.corpus import swadesh
fr2en = swadesh.entries(['fr', 'en'])
de2en = swadesh.entries(['de', 'en'])
es2en = swadesh.entries(['es', 'en'])
translate = dict(fr2en)
translate.update(dict(de2en))
translate.update(dict(es2en))`
我看到的一个问题是,当您将德语单词dog(hund)翻译为英语时,它只采用大写形式:
translate['Hund']
返回'dog'
,而translate['hund']
返回KeyError: 'hund'
有没有办法让翻译人员无论如何翻译单词?我一直在玩它,就像做translate.update(dict(de2en.lower))
一样,什么都没有用。我觉得我错过了一些明显的东西。有谁可以帮助我?
谢谢!
答案 0 :(得分:3)
啊,名词在德语中臭名昭着(见http://german.about.com/library/weekly/aa020919a.htm)
您可以尝试列表推导并降低swadesh语料库中的每个标记:
>>> from nltk.corpus import swadesh
>>> de2en = [(i.lower(),j.lower()) for i,j in swadesh.entries(['de','en'])]
>>> translate = dict(de2en)
>>> translate['hund']
u'dog'
>>> translate['Hund']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'Hund'
但是你会失去钥匙的大写字母。因此,要解决此问题,您可以使用原始swadesh条目再次更新translate
字典:
>>> from nltk.corpus import swadesh
>>> de2en = [(i.lower(),j.lower()) for i,j in swadesh.entries(['de','en'])]
>>> translate = dict(de2en)
>>> translate.update(swadesh.entries(['de','en']))
>>> translate['hund']
u'dog'
>>> translate['Hund']
u'dog'