如题,我遇到了一下情况,需要将大量wiki百科的中文文本翻译成英文

面对这个问题,有以下几点困难

  • google 翻译的API 已经开始收费了。不在提供免费的API服务。
  • 纯手工在google翻译的网页上翻译,对程序猿来说,你是认真的吗?
  • 在使用github上的开源项目时,发现即使通过web脚本调用google网页翻译的免费服务时,依然存在着字符串长度限制,已经会发生长度超出,翻译失败。

在我解决了这个问题之后,我想还是在这里和大家分享一下吧。

首先,先介绍下使用的开源项目:googletrans
具体如下下载就请参考项目的介绍文档。

假如你就是简单翻译几句短文本,
查看 样例 就完全可以了。

>>> from googletrans import Translator
>>> translator = Translator()
>>> translator.translate('안녕하세요.')
# <Translated src=ko dest=en text=Good evening. pronunciation=Good evening.>
>>> translator.translate('안녕하세요.', dest='ja')
# <Translated src=ko dest=ja text=こんにちは。 pronunciation=Kon'nichiwa.>
>>> translator.translate('veritas lux mea', src='la')
# <Translated src=la dest=en text=The truth is my light pronunciation=The truth is my light>

如果你和我一样需要翻译大量的文本,那么请看下面?

(以下代码处理几百个文件依然没有被禁IP,请自己酌情改小sleep时间,以加快翻译速度)

#首先导入需要的包
from googletrans import Translator
from tqdm import tqdm
import os
import random
import time
import re#声明源文件目录 和 生成文件的放置目录
home = os.environ['HOME']
path = home + "/study/project/chineseSegment/artifical/test"
dest = home + "/study/project/chineseSegment/artifical/en"
files = os.listdir(path)
s = []# 把长文本切分成短文本,当时google担心会检查文本长度,所以随机了长度,应该没这么严格,想写成固定的也可以
def getText(string):list = []randline = random.random() * 500 while len(string) > 1500:index = string.find("\n",int(randline)+1000)if index is not None:list.append(string[0:index])string = string[index:]list.append(string)return list
#保存翻译完后的文件
def save2file(title,result):with open(dest+"/"+title,'w') as d:for en in result:d.write(en)d.close
# 在文本中无法识别的表情包会使得翻译产生错误,对文本过滤
emoji_pattern = re.compile(u"(\ud83d[\ude00-\ude4f])|"  # emoticonsu"(\ud83c[\udf00-\uffff])|"  # symbols & pictographs (1 of 2)u"(\ud83d[\u0000-\uddff])|"  # symbols & pictographs (2 of 2)u"(\ud83d[\ude80-\udeff])|"  # transport & map symbolsu"(\ud83c[\udde0-\uddff])|"  # flags (iOS)u"((-{0,1}[{}]-{0,1}))|"     # 我的项目逻辑需要,可删除u"([R efn]|)"              # 我的项目逻辑需要,可删除"+", flags=re.UNICODE)def remove_emoji(text):return emoji_pattern.sub(r'', text)# 打印单个文本分段后的翻译进度
def printProcess(cnt,txt_len,tatal_size,error):content = "file completed "+str(cnt)+"/"+str(txt_len)print(content,end="\r")# 在短文本翻译出错后,用二分法找到错误地方,并舍去无法翻译的句子
def binarySearch(text):mid = (int) (len(text) *1.0/2)result = []splitIndex = text.find("。",mid)if splitIndex == -1 or splitIndex == 0:return resultpre = text[0:splitIndex]after = text[splitIndex+1:]try:result = result+append(pre)except:result = result+binarySearch(pre)try:result = result+append(after)except:result = result+binarySearch(after)return result # 翻译文本
def getTranslateTextList(txt):result = []time.sleep(1)cnt = 0txtsize = 0for text in txt:try:cnt += 1text = remove_emoji(text)txtsize += len(text)translate = Translator()en = translate.translate(text=text, dest='en').text result.append(en)printProcess(cnt,len(txt),txtsize,error)slptimes = random.random()  #我可能想太多,怕固定的sleep还是会被google检查出来,所以随机了一个时间time.sleep(1.2 + slptimes) except Exception as e:result = result + binarySearch(text)return result## 正式开始 mian()
for file in tqdm(files):if not os.path.isdir(file):title = Translator().translate(text=file, dest='en').text try:with open(path+"/"+file,'r') as f:string = f.read()f.close()txt = getText(string)print("analysis:"+title)result = getTranslateTextList(txt)save2file(title,result)except Exception as e:print(str(e))continuetime.sleep(30) #为了保证不被google屏蔽IP,不得已设置了一个超长时间的sleep,可以按情况改小

如果 在这过程中遇到问题,可以去github的项目issue中找一下,我记得我当时运行这个项目的时候遇到了问题,通过issue的方法解决了,但是这会儿想不起来当时的问题是什么了。

google翻译 中文文本大量翻译成英文相关推荐

  1. 把中文目录名称修改成英文首字母大写或中文拼音目录

    把中文目录名称修改成英文首字母大写或英文目录 <dependency><groupId>cn.hutool</groupId><artifactId>h ...

  2. Windows怎么把系统用户中文文件夹改成英文

    Windows怎么把系统用户中文文件夹改成英文 1.用有Administrator权限的账户登录,可以直接开启Administrator账户登录,或者重新注册一个有最高权限的账户,用那个账户登录 2. ...

  3. Windows 10的中文用户名怎么改成英文

    第一步:快速启用Administrator账户 以管理员模式启动命令提示符(Win+X组合键后就能看到),输入net user administrator /active:yes启用Administr ...

  4. 中文日期格式转成英文日期格式

    /*将中文日期格式转换成英文格式*/ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); Date sale ...

  5. python替换把写错的中文符号都替换成英文方法

    python替换把写错的中文符号都替换成英文方法 利用函数: def str_replace(self,data):""" 把写错的中文符号都替换成英文 "&q ...

  6. java中文逗号替换成英文逗号_织梦中文逗号自动替换成英文逗号的方法

    织梦中文逗号自动替换成英文逗号的方法 发布时间:2020-08-18 15:00:18 来源:亿速云 阅读:102 作者:小新 小编给大家分享一下织梦中文逗号自动替换成英文逗号的方法,相信大部分人都还 ...

  7. Windows 10的中文用户名怎么改成英文?

    今天有小伙伴询问Windows 10的中文用户名怎么改成英文?其实改名字很简单(开始--控制面板--用户账户--更改用户账户),难就难在后续把中文名称下的文件夹和用户数据也顺利统一到新名称下.鉴于肯定 ...

  8. maya2018英文翻译_maya2018mac版如何改成英文?

    回答: 您好,(一)字母类 1 .对象特性 1.1 ADC, *ADCENTER(设计中心"Ctrl+2") 1.2 PO, *POINT(点) 1.3 CH, MO *PROPE ...

  9. Qt Solidworks零件中文特征名转换成英文

    用Qt实现遍历Solidworks零件特征,将中文特征名改为中文. config.csv为中文转英文翻译文件,格式为: 中文,english 中文,english ...,... Widget::Wi ...

最新文章

  1. 如何查看oracle trace 文件
  2. python观察日志(part6)--不可变的元祖
  3. socket 端口和地址复用
  4. 利用Splatting提交参数(Hash,哈希)
  5. python中prompt的意思_PROMPT命令格式是什么意思?
  6. 数据库备份还原,日志清理代码
  7. 国内各类有用搜索网站汇总
  8. 无源贴片晶振四角引脚_有源晶振四个脚是如何定义的
  9. Open OnDemand部署安装使用手册
  10. 章鱼网络应用链|为什么 DEIP 会选择章鱼网络?
  11. 【历史上的今天】7 月 12 日:世界上第一台商用数字计算机;Python 之父卸任 BDFL;Wacom 成立
  12. Bitvise SSH Client下载
  13. 25 Three.js的点光源THREE.PointLight
  14. 银河麒麟中的录屏软件
  15. Unity灯光烘焙设置详解
  16. 如何解决工业缺陷检测小样本问题
  17. 实用的ipad财务管理软件-----财务管理和会计师的超级学习软件
  18. linux下查看cpu核数以及内存大小
  19. BitDefender发布了超级工厂病毒Stuxnet的专杀工具
  20. 关于触发类通知短信,你需要了解哪些东西

热门文章

  1. 用c语言写出1 22 333 4444 55555 55555 4444 333 22 1
  2. 关于使用js复制到剪切板的兼容性写法
  3. SecureCRT and SecureFX 8.5 安装破解版(附注册机+破解教程) 64位
  4. 查看网络适配器的名称
  5. 做个火车余票查询接口,余票来源12306,图是百度地图
  6. 基于javaEE的校园兼职平台系统的设计与实现
  7. 图片裁剪(压缩,裁剪图片)
  8. not exists(not in) ;exists(in)
  9. 二维数组九宫格的翻转
  10. Party at Hali-Bula--树形dp