【问题标题】:How to translate a Pandas Series in Python using googletrans?如何使用 googletrans 在 Python 中翻译 Pandas 系列?
【发布时间】:2018-08-03 02:23:30
【问题描述】:

我希望将 pandas 的印度尼西亚语文本列翻译成英语,并将此翻译文本添加为​​我的数据框中名为“英语”的新列。这是我的代码:

from googletrans import Translator

translator = Translator()
df['English'] = translator.translate(df['Review to Translate'], src='id', dest='en')

但是,我收到此错误:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-81-0fd41a244785> in <module>()
      2 
      3 translator = Translator()
----> 4 y['Review in English'] = translator.translate(y['Review to Translate'], src='id', dest='en')

~/anaconda3/lib/python3.6/site-packages/googletrans/client.py in translate(self, text, dest, src)
    170 
    171         origin = text
--> 172         data = self._translate(text, dest, src)
    173 
    174         # this code will be updated when the format is changed.

~/anaconda3/lib/python3.6/site-packages/googletrans/client.py in _translate(self, text, dest, src)
     73             text = text.decode('utf-8')
     74 
---> 75         token = self.token_acquirer.do(text)
     76         params = utils.build_params(query=text, src=src, dest=dest,
     77                                     token=token)

~/anaconda3/lib/python3.6/site-packages/googletrans/gtoken.py in do(self, text)
    179     def do(self, text):
    180         self._update()
--> 181         tk = self.acquire(text)
    182         return tk

~/anaconda3/lib/python3.6/site-packages/googletrans/gtoken.py in acquire(self, text)
    145         size = len(text)
    146         for i, char in enumerate(text):
--> 147             l = ord(char)
    148             # just append if l is less than 128(ascii: DEL)
    149             if l < 128:

TypeError: ord() expected a character, but string of length 516 found

有谁知道我该如何解决这个问题?我有一个相当大的熊猫 df。

【问题讨论】:

    标签: python google-translate


    【解决方案1】:

    我的猜测是您收到此错误是因为您将 pandas Series 对象传递给 translate 函数 (docs) 而不是 str (string) 对象。 尝试使用apply

    from googletrans import Translator
    translator = Translator()
    df['English'] = df['Review to Translate'].apply(translator.translate, src='id', dest='en')
    

    如果我在repl.it 运行此示例:

    from googletrans import Translator
    import pandas as pd
    translator = Translator()
    df = pd.DataFrame({'Spanish':['piso','cama']})
    df['English'] = df['Spanish'].apply(translator.translate, src='es', dest='en').apply(getattr, args=('text',))
    

    它按预期工作。

    【讨论】:

    • 我收到错误声明 JSONDecodeError: Expecting value: line 1 column 1 (char 0)
    • 查看带有工作示例的已编辑帖子。目前尚不清楚您为什么会收到该错误
    • @cosmic_inquiry:我尝试了您的代码,但出现错误“列表索引超出范围”。为什么会出现这个错误?我的专栏确实有空白,我正在尝试将西班牙语文本翻译成英文。
    • 在我的 repl.it 解释器中仍然可以正常工作......我不确定你为什么会得到那个
    • 我使用了您的代码和其他代码,但我在源语言中得到了相同的词。图书馆有问题吗?
    猜你喜欢
    • 1970-01-01
    • 2018-08-27
    • 1970-01-01
    • 1970-01-01
    • 2020-11-13
    • 2022-01-17
    • 1970-01-01
    • 2020-08-19
    • 1970-01-01
    相关资源
    最近更新 更多