2

edit_distance()在下面的例子中使用我有一点问题。我需要在 5 列中打印语言列表中提到的语言中的单词,这不是问题。我已经这样做了:

from nltk.corpus import swadesh
from nltk.metrics import *
from transliterate import translit
languages = ['be', 'bg', 'bs', 'ru', 'cs']

for lang in languages:
    print('{:10}'.format(lang),end='')
print()
for i in range(len(swadesh.words('be'))):
    for lang in languages:
        print('{:10}'.format(swadesh.words(lang)[i].split(',')[0]),end='')
    print()

这部分按预期工作。现在我需要测量来自“be”语言的单词与其他语言中该单词的等价词之间的 Levensthein 字符串编辑距离。并且距离应该出现在括号中的每个单词之后。所以它应该看起来像,例如:

tamto(0) acela(5) oni(5) то(3)

你认为衡量它的最佳方法是什么?我在考虑装箱字典:

for i in languages:
    words = swadesh.words(i)
    d[i] = words
print(d)

然后以某种方式计算编辑距离,但我无法执行此操作。特别是因为其中一种语言 - 俄语有不同的脚本,这意味着我必须使用translit(如果我错了,请纠正我,这是我在网上找到的)。你有什么建议吗?我是编程新手,所以这对你来说可能是一个简单的问题,但我仍在努力找出解决 nltk 中所有问题的方法。先感谢您!

4

1 回答 1

0

首先,我真的建议使用googletrans使用 Google Translate API 的模块。您pip只需运行以下命令即可安装它:

pip install googletrans

现在,让我们进入实际上非常简单的代码:

import nltk
from nltk.corpus import swadesh
from googletrans import Translator


translator = Translator()
languages = ['be', 'bg', 'bs', 'ru', 'cs']

for word in swadesh.words('be'):
    for lang in languages[1:]:
        translated = translator.translate(word, src="be", dest=lang).text
        lev_dist = nltk.edit_distance(word, translated)
        print(f"Language: {lang}, Word: {word}, Translation: {translated}, Distance: {lev_dist}")

#Language: bg, Word: я, Translation: аз, Distance: 2
#Language: bs, Word: я, Translation: ja, Distance: 2
#Language: ru, Word: я, Translation: я, Distance: 0
#Language: cs, Word: я, Translation: já, Distance: 2
#...
#...

于 2020-06-08T16:03:05.697 回答