前端js如何根据文字识别语种?

2021-05-08 | 85浏览 | 0评论 | 标签:js识别语种 franc文档

背景

最近在写一个翻译插件,遇到这样一个问题:遇到多国语言的情况会翻译失败。原来第三方翻译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]+$/,可惜这种方法经常不准确。特别是东亚国家的文字,字符集有交叉部分。又比如HelloBonjour,一个是英语,一个是法语,用正则区分是比较困难的。

(本篇完。有疑问欢迎留言探讨, 如对你有帮助欢迎Buy me a coffee)

留言:

*

* (方便回复通知)

打赏
编辑代码 运行结果
退出