我创建了一个创建链式翻译的类(例如,日语翻译成英语,然后返回到日语,然后返回到英语)。
一些关切事项:
代码:
from googletrans import Translator
word_list = []
class Translate:
def __init__(self, word, target_language='en'):
translator = Translator()
self.target_language = target_language
self.original_language = translator.detect(word).lang
self.chained_translation = self.repeat_translation(word, target_language)
def __getitem__(self, item):
return self.chained_translation[item]
def __len__(self):
return len(self.chained_translation)
def repeat_translation(self, word, target, count=0):
translator = Translator()
translated_text = translator.translate(word, dest=target).text
word_list.append(translated_text)
count += 1
# When recursive count is odd.
if count % 2 == 1:
return self.repeat_translation(translated_text, self.original_language, count)
# When recursive count is even and under 10.
if count < 10:
return self.repeat_translation(translated_text, self.target_language, count)
# When recursive ends.
else:
return word_list
示例用法:
test = Translate('は忙しい。彼は多忙な人間だ。勉強をしたい')
print(test.chained_translation)
print(test[9])
print(test[8])
print(len(test))
['I am busy. He is a busy man. I want to learn', '私は忙しいです。彼は忙しい人だ。学びたい', 'I am busy. He is a busy man. I want to learn', '私は忙しいです。彼は忙しい人だ。学びたい', 'I am busy. He is a busy man. I want to learn', '私は忙しいです。彼は忙しい人だ。学びたい', 'I am busy. He is a busy man. I want to learn', '私は忙しいです。彼は忙しい人だ。学びたい', 'I am busy. He is a busy man. I want to learn', '私は忙しいです。彼は忙しい人だ。学びたい']
私は忙しいです。彼は忙しい人だ。学びたい
I am busy. He is a busy man. I want to learn
10
发布于 2019-02-19 21:58:54
我认为,在Translate
构造函数和调用translator.translate()
时,您应该更加明确地了解源语言,而不是完全依赖于自动检测。在大多数情况下,日语很容易被明确地发现。然而,其他语言的短语可以很容易地被解释为几种可能的语言。
递归很少是Python中最惯用的解决方案。相反,发电机通常是一个更好的主意。这里有一个生成器,它可以根据需要在两种语言之间来回翻译一遍:
from googletrans import Translator
def chained_translations(phrase, target_language='en', source_language=None):
translator = Translator()
source_language = source_language or translator.detect(phrase).lang
while True:
phrase = translator.translate(phrase, src=source_language, dest=target_language).text
yield phrase
source_language, target_language = target_language, source_language
这个解决方案要简单得多,因为状态保持在生成器代码本身的执行流程中。
示例用法:
>>> test = chained_translations('は忙しい。彼は多忙な人間だ。勉強をしたい')
>>> print(next(test))
'I am busy. He is a busy man. I want to learn'
>>> print(next(test))
'私は忙しいです。彼は忙しい人だ。学びたい'
>>> from itertools import islice
>>> print(list(islice(test, 3)))
['I am busy. He is a busy man. I want to learn', '私は忙しいです。彼は忙しい人だ。学びたい', 'I am busy. He is a busy man. I want to learn']
https://codereview.stackexchange.com/questions/213831
复制相似问题