【问题标题】:Error using google trans api in python translate() missing 1 required positional argument: 'text'在 python translate() 中使用 google trans api 时出错,缺少 1 个必需的位置参数:'text'
【发布时间】:2021-12-07 11:37:32
【问题描述】:

我有一个数据集

        English Test|

0   Biggest

1   Compare 3 digit numbers

2   Compare fractions

3   Counting numbers up to 10

4   Division

5   Even or odd

6   Identify 2-dimensional shapes

7   Mixed Operations

我想将这些测试翻译成马来西亚语、西班牙语、俄语,所以我使用“googletrans”我尝试了两种方法得到了这个错误

import googletrans
from googletrans import Translator
import pandas as pd
translator = Translator()
df['Malaysian Text'] = df['English Text'].apply(translator.translate(lang_src='en', lang_tgt='ms')).apply(getattr, args=('text'))

错误:translate() 缺少 1 个必需的位置参数:'text'

df['Malaysian Text'] = translator.translate(df['English Text'], lang_src='en', lang_tgt='ms')

错误:“NoneType”对象没有属性“组”

【问题讨论】:

    标签: python pandas google-translate google-translation-api


    【解决方案1】:

    googletrans 存在一个已知问题。将版本修改为工作版本,请参阅:googletrans stopped working with error 'NoneType' object has no attribute 'group'

    升级

    pip install googletrans==4.0.0-rc1
    

    应该解决 googletrans 的具体问题。


    那么从pandas的角度来看,我们需要传递实际的列值来翻译:

    def translate(text, lang_src, lang_tgt):
        return translator.translate(text, src=lang_src, dest=lang_tgt).text
    
    
    df['Malaysian Text'] = df['English Text'].apply(
        translate, lang_src='en', lang_tgt='ms'
    )
    

    *注 1 这涉及到多个翻译的单独文本查找,这是一个缓慢的过程。在许多用例中,逐行处理此文本可能不是最有效的。

    *注 2 translate 采用 kwargs srcdest 而不是 lang_srclang_tgt。不过,我们可以定义自己的函数来使用这些术语。

    df:

                        English Text                Malaysian Text
    0                        Biggest             Yang paling besar
    1        Compare 3 digit numbers     Bandingkan nombor 3 digit
    2              Compare fractions             Bandingkan Fraksi
    3      Counting numbers up to 10    Mengira nombor sehingga 10
    4                       Division                      Bahagian
    5                    Even or odd             Genap atau ganjil
    6  Identify 2-dimensional shapes  Kenal pasti bentuk 2-dimensi
    7               Mixed Operations             Operasi bercampur
    

    如果我们想做几种语言,我们可以循环执行:

    def translate(text, lang_src, lang_tgt):
        return translator.translate(text, src=lang_src, dest=lang_tgt).text
    
    
    for label, tgt in [('Malaysian', 'ms'),
                       ('Russian', 'ru'),
                       ('Spanish', 'es')]:
        df[f'{label} Text'] = df['English Text'].apply(
            translate, lang_src='en', lang_tgt=tgt
        )
    

    df

                        English Text                Malaysian Text               Russian Text                         Spanish Text
    0                        Biggest             Yang paling besar              Самый большой                           Más grande
    1        Compare 3 digit numbers     Bandingkan nombor 3 digit           Сравните 3 цифры        Comparar números de 3 dígitos
    2              Compare fractions             Bandingkan Fraksi           Сравнить фракции                  Comparar fracciones
    3      Counting numbers up to 10    Mengira nombor sehingga 10      Подсчет номеров до 10            Contando números hasta 10
    4                       Division                      Bahagian                 Разделение                             División
    5                    Even or odd             Genap atau ganjil        Четным или нечетным                          Par o impar
    6  Identify 2-dimensional shapes  Kenal pasti bentuk 2-dimensi  Определить 2-мерные формы  Identificar formas 2-dimensionales.
    7               Mixed Operations             Operasi bercampur         Смешанные операции                   Operaciones mixtas
    

    然而,一般来说,从列中创建一个文本块来翻译一次,然后将其拆分回来会更快:

    # Collapse Column into string with new lines
    text = '\n'.join(df['English Text'].fillna(''))
    for label, tgt in [('Malaysian', 'ms'),
                       ('Russian', 'ru'),
                       ('Spanish', 'es')]:
        df[f'{label} Text'] = translator.translate(
            text, src='en', dest=tgt
        ).text.split('\n')  # separate translation by new lines
    

    *产生与上面相同的输出。


    使用的设置和导入:

    import pandas as pd
    from googletrans import Translator
    
    translator = Translator()
    
    df = pd.DataFrame({
        'English Text': ['Biggest', 'Compare 3 digit numbers', 'Compare fractions',
                         'Counting numbers up to 10', 'Division', 'Even or odd',
                         'Identify 2-dimensional shapes', 'Mixed Operations']
    })
    

    【讨论】:

      猜你喜欢
      • 2022-07-21
      • 1970-01-01
      • 1970-01-01
      • 2017-10-20
      • 2020-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多