HTML5 汉字转化为拼音,带读声,穷举多音字
1,没别的,像这种没有规则的转化,我们首先需要一个字典文件,字典文件的完整度,决定了转化的成功率与精确度
2,笔者收集了较为完整的字典文件,已上传到博客园,欢迎补充 => https://blog-static.cnblogs.com/files/lovling/pinyin.dict.js
这个地址可以直接用 script 标签引入,但是博客园经常抽风,是不是的访问不到,推荐使用时还是在浏览器打开,拷贝到本地在引入使用
3,借助字典,编写程序进行匹配转化,代码如下,注释写的不是很详细,不过相信都能看懂
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>汉字转化为拼音</title>
<!--<script src="https://blog-static.cnblogs.com/files/lovling/pinyin.dict.js"></script>-->
<script src="./pinyin.dict.js"></script>
<script src="https://cdn.bootcss.com/jquery/3.3.0/jquery.min.js"></script>
</head>
<style type="text/css">
#word, #butt {
width: 360px;
height: 44px;
margin: 0;
padding: 0;
box-sizing: border-box;
font-size: 14px;
}
#text1, #text2, #text3 {
height: 44px;
}
</style>
<body>
<input id="word" type="text" />
<input id="butt" type="button" value="转化" />
<div id="text1"></div>
<div id="text2"></div>
<div id="text3"></div>
</body>
<script type="text/javascript">
/**
* 封装汉字转化为拼音的方法,该方法具有以下特点
* 1, 多音字只是识别成多种拼音组合, 不能精准识别
* 2, 不开启多音字, 汉字识别返回使用频率高的拼音
* @param {String} str: 汉字字符串
* @param {Boolean} isTone: 是否进行声调识别 默认 false
* @param {Boolean} isMultitone: 是否穷举多音字 默认 false
* @return: 如果开启多音字识别, 返回的是数组, 否则返回字符串
*/
var chineseCharToPinyin = (function () {
// 注意这里的变量 pinyinDict 来自于字典文件,需要先引入字典文件,且该变量不要在程序中被覆盖
var temp = pinyinDict.split(','), withtone = {};
// 循环遍历字典,以汉字字符为 key,对应的拼音为 value,形成一个超大的 JSON 对象
for(var i = 0; i < temp.length; i++) {
withtone[String.fromCharCode(i + 19968)] = temp[i];
}
var toneMap = {
"ā": "a1", "á": "a2", "ǎ": "a3", "à": "a4", "ō": "o1", "ó": "o2", "ǒ": "o3",
"ò": "o4", "ē": "e1", "é": "e2", "ě": "e3", "è": "e4", "ī": "i1", "í": "i2",
"ǐ": "i3", "ì": "i4", "ū": "u1", "ú": "u2", "ǔ": "u3", "ù": "u4", "ü": "v0",
"ǖ": "v1", "ǘ": "v2", "ǚ": "v3", "ǜ": "v4", "ń": "n2", "ň": "n3", "": "m2"
};
// 未开启声调识别的时候,将带声调的字符切换成不带声调的字母
var removeTone = function(pinyin) {
return pinyin.replace(/[āáǎàōóǒòēéěèīíǐìūúǔùüǖǘǚǜńň]/g, function(m) {
return toneMap[m][0];
});
};
// 过滤掉多音字穷举产生的相同结果
var simpleUnique = function(array) {
var result = [], hash = {};
for(var i = 0; i < array.length; i++) {
var key = (typeof array[i]) + array[i];
if(!hash[key]) {
result.push(array[i]);
hash[key] = true;
}
}
return result;
};
// 多音字穷举
var handlePolyphone = function(array, joinChar) {
var result = [''], temp = [];
for(var i = 0; i < array.length; i++) {
temp = [];
var t = array[i].split(' ');
for(var j = 0; j < t.length; j++) {
for(var k = 0; k < result.length; k++)
temp.push(result[k] + (result[k] ? joinChar : '') + t[j]);
}
result = temp;
}
return simpleUnique(result);
};
// 对外返回一个转化的方法
return function (str, isTone = false, isMultitone = false) {
var result = [], pinyin;
for(var i = 0; i < str.length; i++) {
pinyin = withtone[str[i]];
if(!isTone && pinyin) pinyin = removeTone(pinyin);
if(!isMultitone && pinyin) pinyin = pinyin.replace(/ .*$/g, '');
result.push(pinyin || str[i]);
}
if(!isMultitone) return result.join(" ");
return handlePolyphone(result, " ");
}
})(); /**
* 写一个输入框测试一下
*/
$('#butt').on("click", function (ev) {
var str = $("#word").val().trim(); // 最简单的使用
$("#text1").text(chineseCharToPinyin(str)); // 带读声识别的使用
$("#text2").text(chineseCharToPinyin(str, true)); // 穷举多音字的使用
$("#text3").text(chineseCharToPinyin(str, true, true)) });
</script>
</html>
4,效果如下,还是不错的吗

5,唯一遗憾的是,我们发现,开启多音字识别的时候,并不能准确的识别出我们想要的,而是返回了所有可能的组合
6,我们有办法实现准确的识别码?理论上是可行的,只要我们拥有一个强大的词典,
7,注意是词典,不是字典,指每个汉字的所有可能词组,包括各种不同语境,某些地区的使用习惯,某些群体的使用习惯等等
7,这已经涉及到大数据和人工智能的(个人看法),由于组合实在太多,想要收集十分困难,就算收集完成,计算量也非常庞大,一般设备也不一定带的动
HTML5 汉字转化为拼音,带读声,穷举多音字的更多相关文章
- C# 将汉字转化成拼音
本文来自http://www.cnblogs.com/yazdao/archive/2011/06/04/2072488.html 首先下载Visual Studio International Pa ...
- c#把汉字转化成全拼音函数(全拼)
/// <summary> /// 把汉字转换成拼音(全拼) /// </summary> /// <param name=&q ...
- 利用python将表格中的汉字转化为拼音
缺少包时用pip install 进行安装,例如: pip install xlsxwriter 完成代码如下: #!/usr/bin/python #-*-coding:utf-8-*- #fr ...
- react下将输入的汉字转化为拼音
1.首先需要一个简单的拼音和汉字对应的字典文件: /** * 收录常用汉字6763个,不支持声调,支持多音字,并按照汉字使用频率由低到高排序 */ var pinyin_dict_notone = { ...
- 将汉字转化为拼音的js插件
/*---------------------------------------------------------------- // 文件名:chinese2pinyin.js // 文件功能描 ...
- 将汉字转化为拼音,正则表达式和得到汉字的Unicode编码
一:上图,不清楚的看代码注解,很详细了 二:具体代码 窗体代码 using System; using System.Collections.Generic; using System.Compone ...
- js如何将汉字转化为拼音
github地址,上面有封装好的转换工具:https://github.com/sxei/pinyinjs 里面有几个库,根据功能,库的文件大小也不一样,可以根据需求去引入使用. 里面封装好了方法: ...
- sql标量值函数,将汉字转化为拼音,无音标
USE [db_Test]GO SET ANSI_NULLS ONGO SET QUOTED_IDENTIFIER ONGO create function [dbo].[fn_GetPinyin]( ...
- 通过类库ChineseChar实现将汉字转化为拼音
//封装dllusing Microsoft.International.Converters.PinYinConverter;using System.Text;namespace Utils{ p ...
随机推荐
- 采用CAS算法 实现高性能的Disruptor 完成多线程下并发、等待、先后等操作
来源:https://blog.csdn.net/tianyaleixiaowu/article/details/79787377 拓展: https://www.jianshu.com/p/d24b ...
- Spark:DataFrame批量导入Hbase的两种方式(HFile、Hive)
Spark处理后的结果数据resultDataFrame可以有多种存储介质,比较常见是存储为文件.关系型数据库,非关系行数据库. 各种方式有各自的特点,对于海量数据而言,如果想要达到实时查询的目的,使 ...
- 使用python读取MS-SQL数据库
使用python读取MS-SQL中的数据,这里使用到模板pymssql. 因为不是python自带的模板,所以首先需要使用pip安装,对应命令:pip install pymssql 建立main.p ...
- Git与Github的连接与使用
下面继续,使用git 将项目上传到GitHub上 首先要有GitHub账号,这就不用说了,没有的先注册,地址:https://github.com 没有仓库的话,先新创建一个仓库 填写新仓库名称,备注 ...
- windows知识点2
最近在使用win10系统的过程中,无法获取dns报错,上不了网.经过一番折腾,最终在用下面的方法,解决了问题.第二步很关键.完成步一下步骤重启电脑应该就可以上网了.12第一步:使用 ipconfig ...
- c++中嵌入python
c++ 中嵌入python : https://blog.csdn.net/yiyouxian/article/category/6324494 Python C 和线程 :http://www. ...
- 19.2 MEMORY CONTROLLER
在存储控制器的BANKCONTROLREGISTER(BANKCONn: GCS6-nGCS7)表中:中文翻译各个寄存器的位出现错误: 原文中正确的表述见下图:
- android studio 升级到3.3.1后,提示程序包不存在
android studio 升级到3.3.1后,提示程序包不存在 原因 主Module--A 引用了其他Moduel--B里的jar库, 只需要把B的dependencies改成如下(implent ...
- 申请Let's Encrypt永久免费SSL证书
Let's Encrypt简介 Let's Encrypt作为一个公共且免费SSL的项目逐渐被广大用户传播和使用,是由Mozilla.Cisco.Akamai.IdenTrust.EFF等组织人员发起 ...
- Eureka入门案例
1.整体思路 1.1.服务注册中心Eureka(可以是一个集群,对外暴露自己的地址) 1.2.服务提供者:启动后向Eureka注册自己的信息(地址,提供什么服务) 1.3.客户端消费者:向Eureka ...