利用Google进行无长度限制的文本翻译(无需API,无需Money)
2012-08-11 21:42
645 查看
背景介绍
前段时间在做一个类似于“一键翻译”的小功能,需要对长文本进行多语种的翻译,本以为很简单,不过在网上找来找去,居然发现没有一个完美的方法来解决,我只好从网上搜来了各种各样的翻译API,并揣摩了其使用方法,不过都不尽完美,其各方面的缺陷大致有:微软API:利用WCF方式进行翻译,每次翻译英文字数最大为一万两千多个,中文字符的话最多为六七千个,最大200M字符/月的限制,超过限制后要付费。对HTML翻译支持完美,翻译结果也不错,但考虑到免费字符数限制,需做账号轮巡,账号注册的步骤那叫一个繁琐啊……(此方式可做为首选翻译方式,轮巡的翻译功能已实现,有时间了把源码贴上来。 ——qfzhang于2013-05-30更新)
YoudaoAPI:语言支持不够多,只有英文、日文、中文几个之间的互相翻译,且每次请求最多翻译的字符数不能超过200,还有访问频率限制。
GoogleAPI:Google翻译的API,优势明显,翻译结果十分准确,尤其是针对HTML,能够准确跳过HTML标签部分,只翻译文本,但它是付费使用的(v1版为免费版,但接口已关闭),其价格为100万字符/20美金,其价格自然不言而喻。且在使用过程中发现,其标称每次最大翻译字符数不能超过2k,但实际使用时超过1.5k就会报异常。
BaiduAPI:有访问频率限制和长度限制,且翻译结果不理想。
在这四大翻译巨头的各种限制之下,不得不另寻出路……
转机
鉴于Google翻译的准确性,还是果断选择了Google作为目标,但其价格实在昂贵,只好从其翻译页面上做文章。在测试时发现,其GET请求中加上一些参数可以实现翻译功能,于是乎第一个GET版本的翻译功能出炉了,其步骤大约分为以下两步:
构造查询字符串,向翻译页面发送请求
获取返回的HTML,并从中过滤出所需要的结果。(小弟不才,因为这个东西,好好地把正则表达式训练了一把^_^)
然而,GET方式跟API有同样的问题,超出固定长度后就会报请求异常。于是只能再想其它方法。
后来小弟尝试了构造POST请求去访问它,没想到……居然成功了……一时高兴,代码不敢独享,在此贴出来,希望大家有遇到此类问题的,一起分享一下。
源代码:
1.代码部分
1). 翻译者接口,为以后扩展使用View Code
using System; /// <summary> /// 网站翻译器[Google提供,整页翻译器] /// ZhangQingFeng 2012-7-27 add /// 说明: /// 如果需要在页面上使用google语言翻译,需要做以下两步: /// 1.将本类中的GoogleTranslateMeta内容放入Head中,如:Response.Write(SiteTranslator.GoogleTranslateMeta); /// 2.将本类中的GoogleTranslateControl内容放入页面中需要显示“选择语言”的地方 /// </summary> public class SiteTranslator { public SiteTranslator() { } /// <summary> /// Google整页翻译Meta标签,放入Head部位 /// </summary> public const string GoogleTranslateMeta = @"<meta name=""google-translate-customization"" content=""d83361947aca6bed-626a88e71258e3a8-g3d7ae31013d34b9c-e""></meta>"; /// <summary> /// Google整页翻译控件,放入需要显示“选择语言”框的地方 /// </summary> public const string GoogleTranslateControl = @"<div id=""google_translate_element""></div><script type=""text/javascript"">function googleTranslateElementInit() { new google.translate.TranslateElement({pageLanguage: 'zh-CN', layout: google.translate.TranslateElement.InlineLayout.SIMPLE, autoDisplay: false}, 'google_translate_element');}</script><script type=""text/javascript"" src=""//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit""></script>"; }
2). 使用示例,只要将那两个变量分别加在HTML页面的Head中和想出现“选择语言”框的地方即可。
PS:这是小弟第一次写博,园子里很多大鸟,在各位面前献丑了,写出来只是希望大家碰到此类的问题的时候不用再去重复造轮子了,把小弟的轮子改改,或许比那些API更好用。更关键的是:无限制,免费,你懂的。^_^
如果代码对大家有用,还希望大家支持一下。另外,不知道在园子里怎么上传压缩包附件,只能发外链地址了,希望各位老鸟指点一下啊。
代码打包下载地址:http://www.kuaipan.cn/file/id_18864681775007923.htm
相关文章推荐
- 利用Google进行无长度限制的文本翻译(无需API,无需Money)
- 利用Google API进行无长度限制的文本翻译
- asp.net利用google的api做翻译
- asp.net利用google的api做翻译
- 利用有道API进行翻译
- Google翻译post提交无长度限制的在线翻译例子
- 利用Google公开的API做在线翻译
- RH413-利用PAM对Linux下的用户密码长度以及复杂度进行限制
- 利用python制作点读翻译软件(基于google api)
- JAVA利用RSA加密算法的长度限制问题解决方案注意: RSA加密明文最大长度117字节,解密要求密文最大长度为128字节,所以在加密和解密的过程中需要分块进行。 RSA加密对明文的长度是有限制的,如
- 使用 Google API 进行翻译的 Python 小工具
- 使用 Google API 进行翻译的 Python 小工具
- ASP利用Google实现在线翻译功能
- 如何利用深度学习写诗歌(使用Python进行文本生成)
- Google 地图 API V3 针对移动设备进行开发
- iOS(Swift) TextField限制输入文本的长度(不是字数)
- Python3--批量爬取数据之调金山词霸api进行翻译
- C# Asp.net中的AOP框架 Microsoft.CCI, Mono.Cecil, Typemock Open-AOP API, PostSharp -摘自网络 (可以利用反射 Attribute 进行面向切面编程 可以用在记录整个方法的Log方面)
- 微信公众帐号开发教程第5篇-文本消息的内容长度限制揭秘
- 利用python调用elasticsearch-api来分析数据并作图进行日报邮件发送