【问题标题】:How to translate words in NTLK swadesh corpus regardless of case - python无论大小写如何,如何在 NTLK swadesh 语料库中翻译单词 - python
【发布时间】:2014-06-22 04:39:19
【问题描述】:

我是 python 和自然语言处理的新手,我正在尝试使用 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))`

我看到的一个问题是,当你将狗的德语单词(hund)翻译成英语时,它只采用大写形式: translate['Hund'] 返回'dog',而translate['hund'] 返回KeyError: 'hund'

有没有办法让翻译者不分大小写地翻译单词?我一直在玩它,比如做translate.update(dict(de2en.lower)) 什么都无济于事。我觉得我错过了一些明显的东西。谁能帮帮我?

谢谢!

【问题讨论】:

    标签: python dictionary nlp nltk translate


    【解决方案1】:

    啊,德语中臭名昭著的名词大写(见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'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-21
      • 2013-05-14
      • 2019-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-23
      相关资源
      最近更新 更多