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 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
然而,一般来说,从列中创建一个文本块来翻译一次,然后将其拆分回来会更快:
# 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']
})