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」言語の単語と他の言語のこの単語に相当する単語との間のレーベンシュタイン文字列編集距離を測定する必要があります。また、距離は括弧内の各単語の後に表示されます。たとえば、次のようになります。

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

それを測定するための最良のアイデアとして何を提案しますか? 私は辞書を作成することを考えていました:

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

そして、どういうわけか編集距離を計算しますが、これを実行できません。特に言語の 1 つであることに注意してください。ロシア語はスクリプトが異なるため、翻訳を使用する必要があります (間違っている場合は訂正してください。これはオンラインで見つけたものです)。それについて行く方法のヒントはありますか?私はプログラミングに慣れていないので、あなたにとっては簡単な質問かもしれませんが、nltk のすべてを回避する方法をまだ見つけようとしています。前もって感謝します!

4

1 に答える 1

0

まず、googletransGoogle 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 に答える