首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python类,它在两种语言之间来回链接Google翻译。

Python类,它在两种语言之间来回链接Google翻译。
EN

Code Review用户
提问于 2019-02-19 18:56:49
回答 1查看 57关注 0票数 3

我创建了一个创建链式翻译的类(例如,日语翻译成英语,然后返回到日语,然后返回到英语)。

一些关切事项:

  • 我的递归用法好吗?
  • 这门课是琵琶吗?还有什么能让它更像琵琶吗?
  • 我在代码中使用了两次实例化翻译。有办法只用一次吗?

代码:

代码语言:javascript
运行
复制
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

示例用法:

代码语言:javascript
运行
复制
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
EN

回答 1

Code Review用户

回答已采纳

发布于 2019-02-19 21:58:54

我认为,在Translate构造函数和调用translator.translate()时,您应该更加明确地了解源语言,而不是完全依赖于自动检测。在大多数情况下,日语很容易被明确地发现。然而,其他语言的短语可以很容易地被解释为几种可能的语言。

递归很少是Python中最惯用的解决方案。相反,发电机通常是一个更好的主意。这里有一个生成器,它可以根据需要在两种语言之间来回翻译一遍:

代码语言:javascript
运行
复制
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

这个解决方案要简单得多,因为状态保持在生成器代码本身的执行流程中。

示例用法:

代码语言:javascript
运行
复制
>>> 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']
票数 3
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/213831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档