当前位置: 首页 > 后端技术 > Python

如何用Python一次性翻译10万条数据

时间:2023-03-25 22:26:57 Python

前段时间想翻译一个大文档。经过一番研究,我终于不得不走上写代码的道路了。我不需要高质量的翻译,机器翻译就可以了,毫无疑问谷歌的翻译质量是最好的,还是我最满意的。于是找了一个(Python)的翻译库,操作了一番还是不满意。其中一个比较流行,但是按照套路(Documentation)去安装,调用直接报错,我知道这个可以解决,可能会有一些小问题,毕竟用的人多,而且它后面好像版本不对,需要稍微指定一下版本。我没有去尝试,直到现在我也没有使用它,因为我写了一个Python翻译库pygtrans。我为什么选择这个名字?因为我想到的很多名字都被占用了。含义:PythonGoogleTranslate,PythonGoogleTranslate基本功能获取LanguageSupportList自动检测语言,支持批量文本/HTML翻译,支持批量支持TTSGithub开源地址:pygtrans文档地址:文档安装pipinstallpygtrans或pipinstallpygtrans-ihttps://pypi.org/simple必要时可以加一个--upgrade参数来全面掌握快速入门frompygtransimportTranslateclient=Translate()#detectlanguagetext=client.detect('Answerthequestion.')asserttext。language=='en'#translatesentencetext=client.translate('看这些图片并回答问题。')asserttext.translatedText=='看这些图片并回答问题。')asserttext.translatedText=='看这些图片并回答问题。'#Batchtranslationtexts=client.translate(['早上好,有什么可以为您效劳的吗?','大声朗读并划出关于预订航班的句子。','可以告诉我您的姓名和电话号码吗?'])assert[text.translatedTextfortextintexts]==['早上好。我能为你做什么?','大声朗读有关预订航班的句子并在下面划线。','可以告诉我你的名字和电话号码吗?']#TranslatetoJapanesetext=client.translate('Pleaseadvice',target='ja')asserttext.translatedText=='お知らせ下さい'#TranslatetoKoreantext=client.translate('Pleaseadvice',target='ko')asserttext.translatedText=='????????'#文字转语音tts=client.tts('やめテ',target='ja')open('やめテ.mp3','wb').write(tts)pygtrans一共有6个模块Translate:翻译模块ApiKeyTranslate:使用谷歌翻译APIKEY进行翻译的模块TranslateResponse:翻译响应模块LanguageResponse:获取语言支持列表响应的模块DetectResponse:语言检测responsemoduleNull:表示一个Failed对象,因为有时候它们可能会失败。具体可以查看源码或者文档。一些限制。翻译:暂时还没有发现限制,但这不是官网提供的标准方法,不能保证。ApiKeyTranslate:限制批量翻译次数在128条以内,即一次只能翻译128句。在代码中,这个限制已经是容错的了,所以不需要再考虑了。翻译的整体内容大小限制为102400字节,即一次只能翻译100KB的内容。在使用pygtrans的过程中,只需要注意,不要让单个句子可以超过这个100KB的限制。这两个翻译模块不需要爬楼梯,但是ApiKeyTranslate可能需要钱,虽然官方提供了试用。并且由于自身的局限性,在接受了这篇文章的题目任务后【如何用Python一次性翻译10万句】,虽然亲测能胜任,但还是不如Translate刺激,所以本文不做介绍ApiKey翻译。具体用法见ApiKeyTranslate文档如何判断一个请求(翻译/调用方式)是否成功frompygtransimportTranslate,Nullclient=Translate()text=client.translate('Hello')ifisinstance(text,Null):print("Translationfailed")#失败信息(原因)print(text.msg)else:print("translationsuccessful")一般不判断,直接使用Translate#导入包指南模块frompygtransimportTranslate#创建翻译对象""":paramtarget:str:(optional)targetlanguage,default:``zh-CN``,:doc:`seethefulllist`:paramsource:str:(可选)源语言,默认:``auto``(自动检测),:doc:`seefulllist`:param_format:str:(可选)文本格式,``text``|``html``,default:``html``:paramuser_agent:str:(optional)useragent,这个参数很重要,如果不是很容易触发**429TooManyRequests设置或错误设置**错误,默认:``GoogleTranslate/6.18.0.06.376053713(Linux;U;Android11;GM1900)``,用户无需提供。默认``User-Agent``很稳定,还没发现``429错误``,如果出现``429``,建议**i模仿默认构造**,或者给`feedback`_最新版本,已改为random.:paramdomain:str:(optional)domainname``google.com``及其可用的平行域名(例如:``google.cn``),默认:``google.cn``:paramproxies:(可选)eg:proxies={'http':'http://localhost:10809','https':'http://localhost:10809'}"""client=Translate()支持翻译单个句子的语言列表"""翻译文本,支持批处理,支持html:paramq:str:string或listofstrings:paramtarget:str:(可选)目标语言,默认:``self.target``,:doc:`查看支持列表`:paramsource:str:(可选)源语言,默认:``self.source``,:doc:`查看支持列表`:param_format:str:(可选)文本格式,``text``|``html``,默认值:``self.format``:返回:成功::class:`pygtrans.TranslateResponse.TranslateResponse`对象,或:class:`pygtrans.TranslateResponse.TranslateResponse`对象列表,取决于`parameter:q`是字符串还是字符串列表。失败返回:class:`pygtrans.Null.Null`object"""text=client.translate("google")asserttext.translatedText=='Google'detectlanguage"""语言检测:paramq:待检测的内容,不支持批量,需要批量的请参考::func:`translate_and_detect`.:return:如果成功,返回:class:`pygtrans.DetectResponse.DetectResponse`对象,如果失败,返回:class:`pygtrans.Null.Null`object"""text=client.detect('Hello')asserttext.language=='zh-CN'没有批量检测方法,只有批量检测和翻译方法"""检测和翻译同:class:`translate`,不同的是``TranslateResponse``对象的``detectedSourceLanguage``属性可用"""text=client.翻译和检测('谷歌翻译')asserttext.detectedSourceLanguage=='zh-CN'texts=client.translate_and_detect(['Google','Translate'])asserttexts[0].detectedSourceLanguage=='zh-CN'asserttexts[1].detectedSourceLanguage=='en'translatesfromChinesetoEnglishtext=client.translate('China',target='en')asserttext.translatedText=='China'translatesintextformat#默认是html翻译format是的,要以文本格式翻译,请将_format='txt'指定为text=client.translate("""""",_format='txt')print(text)#TranslateResponse(translatedText='\n\n\n',detectedSourceLanguage=None,model=None)#我们注意到不该翻译的也翻译了。如果用html格式翻译,就可以解决这个问题。以html格式翻译#默认以html格式翻译,需要使用文本格式翻译,指定`_format='txt'`为text=client.translate("""""")打印(文本)#TranslateResponse(translatedText='\n\n\n',detectedSourceLanguage=None,model=None)#现在正常了回到我们的主题如何用Python一次翻译10万句?如何用Python一次翻译10万句?如何用Python一次翻译10万句?使用PythonTranslate100,000sentencesatonetime?假设stringlistwords,len(words)>100000texts=client.translate(words)#等待20s左右,执行完成后len(texts)==len(words)foriinrange(10):print(words[i][:20],texts[i][:10])不知道能不能做其他的,反正我觉得这个很牛逼,毕竟,经常有句话说5000是有上限的,到底我第一次翻译这么多的时候,还以为是会被逆转。没想到一切都很顺利。现在可以使用了。我测试了很多次,没有发现问题,但以后就不知道了。以后如果不行,请大家帮忙,请不要骂我,先谢谢了??其他的谷歌翻译库(方法)可能会涉及到tk参数的问题。这样比较麻烦,可能需要经常维护。但是pygtrans避免了这个问题,出现了问题。求反馈不错,求个小star。如果您有什么好的想法或者建议,欢迎随时在2021/07/2514:17:54过来。对了,还有一个TTS(文字转语音)功能tts=client.tts("""醒醒吧,我的小鱼,你还知道早晨吗?昨晚你说,愿夜晚永不是你的泪水还是我的泪水从你的脸颊上轻轻滑落?初吻和再见的季节你不是已经哭了吗?我的指尖还记得你慌张的心跳。柔和的体香中,一缕长发飘扬。""")open('我的小鱼儿,你醒了.mp3','wb').write(tts)这里没有视频可以播放,你可以在这里看