我正在尝试将从网站上抓取的文字从波兰语翻译为英语,并将其转换为pandas数据框中的新列。
我正在使用mtranslate来使用Google Translate API。我知道Google翻译每100秒有100,000个字符限制;我要翻译的专栏总共有近300万个字符。
如果在100秒内翻译了100,000个字符,并且尝试在101-102秒之间的任何时间进行转换,我一直试图暂停循环,直到所有行都被翻译为止(而且我知道以这种速度,循环会迭代一个多小时)。
但是我的循环失败,并显示错误HTTP Error 413: Request Entity Too Large
,这意味着该循环没有足够快地暂停,并且我正在超过100秒的时间跨过API的限制。
我也很难将结果附加到数据框的空列中;这就是为什么我求助于将结果附加到一个单独的列表中的原因,一旦所有结果都翻译完,我计划将其加入数据框。我更希望将结果直接附加到指定数据框的列中:data ['postEn']。
from IPython.display import clear_output
import numpy as np
from time import sleep
from mtranslate import translate
translation = [] # Append translations into a separate list
data['postEn'] = '' # Append into an empty column, which is my intended target
for postPl in range(0,7286): # there are 7387 rows total
if data.post.str.len()[postPl] > 100000:
sleep(randint(101,102))
else:
clear_output(wait=True)
trans = mtranslate(data.post[postPl],'en','pl')
translation.append(trans)
print("Current progress: ", np.round(postPl/len(data)*100,2),"%")
%time
通过手动调整行的范围并将所有输出附加到转换为数据框的列表中,我获得了成功,然后我必须将其连接到我的主数据框(并且经过广泛清理,这样翻译后的记录才能匹配)。如您所料,那是费力的工作,更糟糕的是,我丢失了数据集。因此,我希望这次提供一个程序化解决方案,以避免造成更多麻烦。