在 python translate() 中使用谷歌转式 API 时出错,缺少 1 个必需的位置参数:"文本"



我有一个数据集

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'对象没有'group'属性

有一个已知的googletrans问题。修改版本到一个工作版本,见:googletrans停止工作与错误'NoneType'对象没有属性'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是指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

但是,一般来说,从列中创建一个文本blob来翻译一次,然后将其分开会快得多:

# 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']
})

相关内容

  • 没有找到相关文章

最新更新