Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
翻译大量数据,包括dataframe python_Python_Pandas_Dataframe_Google Translate_Google Translation Api - Fatal编程技术网

翻译大量数据,包括dataframe python

翻译大量数据,包括dataframe python,python,pandas,dataframe,google-translate,google-translation-api,Python,Pandas,Dataframe,Google Translate,Google Translation Api,我想翻译我的数据框架的一列文本,目标是协调数据。我有中文、英文、法文、德文、西班牙文等文本。。。我想把所有的课文都用英语写。 我尝试过几种方法:使用googletrans API 1) 天真地试着去做 from googletrans import Translator translator = Translator() df["translated"] = df.apply(lambda row :translator.translate(row['name']).text,axis = 1)

我想翻译我的数据框架的一列文本,目标是协调数据。我有中文、英文、法文、德文、西班牙文等文本。。。我想把所有的课文都用英语写。 我尝试过几种方法:使用googletrans API
1) 天真地试着去做

from googletrans import Translator
translator = Translator()
df["translated"] = df.apply(lambda row :translator.translate(row['name']).text,axis = 1)
Out:JSONDecodeError: ('Expecting value: line 1 column 1 (char 0)', 'occurred at index 1816997')

2) 通过每次重置API 使用此链接,我运行了以下代码:但仍然有一个错误

import copy
from googletrans import Translator

translatedList = []
for index, row in df.iterrows():
    # REINITIALIZE THE API
    translator = Translator()
    newrow = copy.deepcopy(row)
    try:
        # translate the 'text' column
        translated = translator.translate(row['name'], dest='en')
        newrow['translated'] = translated.text
    except Exception as e:
        print(str(e))
        continue
    translatedList.append(newrow)

Out: Expecting value: line 1 column 1 (char 0)
3) 我还试图通过改变IP来绕过GoogleAPI的限制

使用vpn进行测试:不工作

 import random

listofservers = ["South Africa", "Egypt" , "Australia", "New Zealand",  "South Korea", "Singapore", "Taiwan", "Vietnam", "Hong Kong", "Indonesia", "Thailand", "Japan", "Malaysia", "United Kingdom", "Netherlands", "Germany", "France", "Belgium", "Switzerland", "Sweden","Spain","Denmark", "Italy", "Norway", "Austria", "Romania", "Czech Republic", "Luxembourg", "Poland", "Finland", "Hungary", "Latvia", "Russia", "Iceland", "Bulgaria", "Croatia", "Moldova", "Portugal", "Albania", "Ireland", "Slovakia","Ukraine", "Cyprus", "Estonia", "Georgia", "Greece", "Serbia", "Slovenia", "Azerbaijan", "Bosnia and Herzegovina", "Macedonia","India", 'Turkey', 'Israel', 'United Arab Emirates', 'United States', 'Canada','Mexico'
,"Brazil", "Costa Rica", "Argentina", "Chile"]

def SelectServer(l):
    return random.choice(l)

def translate_text(text, dest_language="en"):  
    # Used to translate using the googletrans library
    translator = googletrans.Translator()
    try:

        translation = translator.translate(text=text, dest=dest_language)

    except json.decoder.JSONDecodeError:
        # api call restriction

        print("exception !! déconection du VPN ")
        process = subprocess.Popen(["nordvpn", "-d"], shell = True ,stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        process.wait()

        time.sleep(5)

        srv = SelectServer(listofservers)

        print("sélection du serveur  : "+ srv + " et connexion")

        process = subprocess.Popen(["nordvpn", "-c", "-g", srv ], shell = True ,stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        process.wait()
        time.sleep(60)

        return translate_text(text=text, dest_language=dest_language)

    return translation.text

Out : ConnectionError: HTTPSConnectionPool(host='translate.google.com', port=443): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x0000027016006488>: Failed to establish a new connection: [WinError 10060]
随机导入
服务器列表=[“南非”、“埃及”、“澳大利亚”、“新西兰”、“韩国”、“新加坡”、“台湾”、“越南”、“香港”、“印度尼西亚”、“泰国”、“日本”、“马来西亚”、“英国”、“荷兰”、“德国”、“法国”、“比利时”、“瑞士”、“瑞典”、“西班牙”、“丹麦”、“意大利”、“挪威”、“奥地利”、“罗马尼亚”、“捷克共和国”,“卢森堡”、“波兰”、“芬兰”、“匈牙利”、“拉脱维亚”、“俄罗斯”、“冰岛”、“保加利亚”、“克罗地亚”、“摩尔多瓦”、“葡萄牙”、“阿尔巴尼亚”、“爱尔兰”、“斯洛伐克”、“乌克兰”、“塞浦路斯”、“爱沙尼亚”、“格鲁吉亚”、“希腊”、“塞尔维亚”、“斯洛文尼亚”、“阿塞拜疆”、“波斯尼亚和黑塞哥维那”、“马其顿”、“印度”“、‘土耳其’、‘以色列’、‘阿拉伯联合酋长国’、‘美国’、‘加拿大’、‘墨西哥’
,“巴西”、“哥斯达黎加”、“阿根廷”、“智利”]
def选择服务器(l):
返回随机选择(l)
def translate_text(text,dest_language=“en”):
#用于使用Google Trans库进行翻译
translator=googletrans.translator()
尝试:
翻译=译者。翻译(文本=文本,目的地=目的地语言)
除了json.decoder.JSONDecodeError:
#api调用限制
打印(“异常!!VPN连接”)
process=subprocess.Popen([“nordvpn”,“-d”],shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
process.wait()
时间。睡眠(5)
srv=选择服务器(服务器列表)
打印(“服务选择:+srv+“et连接”)
process=subprocess.Popen([“nordvpn”、“-c”、“-g”、srv],shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
process.wait()
时间。睡眠(60)
返回translate\u text(text=text,dest\u language=dest\u language)
返回translation.text
Out:ConnectionError:HTTPSConnectionPool(host='translate.google.com',port=443):url:/(由NewConnectionError引起)(':未能建立新连接:[WinError 10060]
非常感谢您的帮助,

Chris。

我正在为translate处理XML文件,我收到了这个错误“JSONDecodeError:期望值:第1行第1列(char 0)”。当我搜索此错误时,我遇到一些特殊字符无法翻译。在这种情况下,
等。
是我的问题。如果文本中有特殊字符,请复制粘贴到google translate网站,查看是否存在错误

此错误的另一个原因可能是请求太多或字符限制太多。如果您使用的是列表而不是字符串,则列表中的每个索引都意味着一个新的翻译请求。如果请求太多,谷歌将暂时禁止您的IP

我在一个字符串变量中收集文本。我将[text number]添加到每个文本的开头,并用/n分隔它们,然后发送到translation.Like

[1]First Text\n
[2]SecondText\n
[3]Third Text\n
Google Translate可以在一个请求中翻译10000个字符,所以字符串变量的字符限制是10000。另外,我在每个请求之间添加了一个100秒的计时器,以逃避禁令。这对我来说很有效


PS:我尝试了绕过禁令的代理,但它对我不起作用。我通过hotspot连接了我的手机互联网,它起了作用。

你的问题是什么?你到底在寻找什么?我正在寻找一种方法将200万数据(字符串)从任何语言翻译成英语。@AMC