/** * 汉字与拼音互转工具,根据导入的字典文件的不同支持不同 * 对于多音字目前只是将所有可能的组合输出,准确识别多音字需要完善的词库,而词库文件往往比字库还要大,所以不太适合web环境。 * @start 2016-09-26 * @last 2016-09-29 */ ;(function(global, factory) { if (typeof module === "object" && typeof module.exports === "object") { module.exports = factory(global); } else { factory(global); } })(typeof window !== "undefined" ? window : this, function(window) { 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 dict = {}; // 存储所有字典数据 var pinyinUtil = { /** * 解析各种字典文件,所需的字典文件必须在本JS之前导入 */ parseDict: function() { // 如果导入了 pinyin_dict_firstletter.js if(window.pinyin_dict_firstletter) { dict.firstletter = pinyin_dict_firstletter; } // 如果导入了 pinyin_dict_notone.js if(window.pinyin_dict_notone) { dict.notone = {}; dict.py2hz = pinyin_dict_notone; // 拼音转汉字 for(var i in pinyin_dict_notone) { var temp = pinyin_dict_notone[i]; for(var j=0, len=temp.length; j 汉字 if(window.pinyin_dict_notone) { // 对于拼音转汉字,我们优先使用pinyin_dict_notone字典文件 // 因为这个字典文件不包含生僻字,且已按照汉字使用频率排序 dict.py2hz = pinyin_dict_notone; // 拼音转汉字 } else { // 将字典文件解析成拼音->汉字的结构 // 与先分割后逐个去掉声调相比,先一次性全部去掉声调然后再分割速度至少快了3倍,前者大约需要120毫秒,后者大约只需要30毫秒(Chrome下) var notone = pinyinUtil.removeTone(pinyin_dict_withtone).split(','); var py2hz = {}, py, hz; for(var i=0, len = notone.length; i= 19968 && unicode <= 40869) { ch = dict.firstletter.all.charAt(unicode-19968); if(polyphone) ch = dict.firstletter.polyphone[unicode] || ch; } result.push(ch); } if(!polyphone) return result.join(''); // 如果不用管多音字,直接将数组拼接成字符串 else return handlePolyphone(result, '', ''); // 处理多音字,此时的result类似于:['D', 'ZC', 'F'] } else { var py = this.getPinyin(str, ' ', false, polyphone); py = py instanceof Array ? py : [py]; var result = []; for(var i=0; i