我有一个数据集
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
是指src
和dest
,而不是lang_src
和lang_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']
})