背景
最近在写一个翻译插件,遇到这样一个问题:遇到多国语言的情况会翻译失败。原来第三方翻译api不能批量自动识别文本的语种,(比如百度翻译api,即使设置成auto模式,遇到混合语种的文本就不行了)。有没有办法对翻译的文本语种进行分类呢?经过搜索和实践,有了以下几种办法。
方法一:franc库 (推荐)
关于javascript实现语言识别的文章,在百度和谷歌上很少,在gitHub上搜索“language detection”,找到这个star数3.5k的franc
。测试一番后,最能满足我项目需要。
franc
自称支持的语种比任何库都多,它分为三个版本:franc-min
, franc
, franc-all
,分别支持82, 187, 406种语言,你可以根据需要引用。 详情说明请阅读官方gitHub地址
// 安装
npm install franc //或 yarn add franc
// 引入
var franc = require('franc')
// 调用
franc('This build supports the following languages') // => 'eng'
// 配置参数{}
minLength: 最短字符,默认10,如设置不合理可能返回'und'
only: 指定语种范围, 如:['eng','kor']
ignore: 排除的语种, 如:['jpn']
// 参数使用示例
franc('Very good', {minLength: 3}) // => 'eng'
优点:纯javascript本地实现、语种丰富、免费。
缺点:打包体积(franc-min实际测试105kb)、识别样本过短可能识别有误(建议文本大于10个字符)。
方法二:第三方api
第三方我没使用过,帮大家搜了一下国内几个大厂的语种识别api:
1.阿里:
特点:单次限长5000字符,QPS=50;每月100万字符免费,超过后70元/百万字符
地址:https://help.aliyun.com/document_detail/164512.html
2.华为:
特点:单次限长2000字符; 支持15国语言
地址:https://support.huaweicloud.com/api-nlp/nlp_03_0055.html
3.腾讯:
特点:单次限长2000字符,QPS=5; 支持15国语言
地址:https://cloud.tencent.com/document/product/551/15620
4.百度:
特点:QPS=3; 暂时免费;支持7国语言
地址:http://api.fanyi.baidu.com/product/141
方法三:正则
用几行简单的正则表达式来识别国家语种,是最美好的愿望,通常想到的是用字符集的范围来判断。比如平时用来判断汉字的正则为:/^[\u4E00-\u9FA5A]+$/
,可惜这种方法经常不准确。特别是东亚国家的文字,字符集有交叉部分。又比如Hello
和Bonjour
,一个是英语,一个是法语,用正则区分是比较困难的。
热门文章
- 微信小程序“拍照识图”上线(63,758)
- YouTube评论翻译插件《油管评论翻译机》上线了(60,290)
- 基金助手--chrome浏览器插件(45,193)
- 拍照识别彩票结果在线工具(31,944)
- vue+tabs动态组件方案漫谈(26,477)
- 《油管评论翻译机》使用说明书(25,340)
- 网页打印插件Print.js(23,978)
- 自用YouTube抓取评论+翻译工具(23,381)
- YouTube评论导出免费在线工具(18,055)
- px转rem/vw方法小结(17,566)