封裝好的3個(gè)方法:
/**
* 獲取漢字的拼音首字母
* @param str 漢字字符串朵你,如果遇到非漢字則原樣返回
* @param polyphone 是否支持多音字崭添,默認(rèn)false,如果為true吭历,會(huì)返回所有可能的組合數(shù)組
*/
pinyinUtil.getFirstLetter(str, polyphone);
/**
* 根據(jù)漢字獲取拼音擎浴,如果不是漢字直接返回原字符
* @param str 要轉(zhuǎn)換的漢字
* @param splitter 分隔字符,默認(rèn)用空格分隔
* @param withtone 返回結(jié)果是否包含聲調(diào)毒涧,默認(rèn)是
* @param polyphone 是否支持多音字贮预,默認(rèn)否
*/
pinyinUtil.getPinyin(str, splitter, withtone, polyphone);
/**
* 拼音轉(zhuǎn)漢字,只支持單個(gè)漢字契讲,返回所有匹配的漢字組合
* @param pinyin 單個(gè)漢字的拼音仿吞,不能包含聲調(diào)
*/
pinyinUtil.getHanzi(pinyin);
下面分別針對(duì)不同場(chǎng)合如何使用作介紹捡偏。
如果你只需要獲取拼音首字母
pinyinUtil.getFirstLetter('小茗同學(xué)'); // 輸出 XMTX
pinyinUtil.getFirstLetter('大中國(guó)', true); // 輸出 ['DZG', 'TZG']
需要特別說(shuō)明的是唤冈,如果你引入的是其它2個(gè)字典文件,也同樣可以獲取拼音首字母的银伟,只是說(shuō)用這個(gè)字典文件更適合你虹。
如果拼音不需要聲調(diào)
pinyinUtil.getPinyin('小茗同學(xué)'); // 輸出 'xiao ming tong xue'
pinyinUtil.getHanzi('ming'); // 輸出 '明名命鳴銘冥茗溟酩瞑螟暝'
如果需要聲調(diào)或者需要處理生僻字
pinyinUtil.getPinyin('小茗同學(xué)'); // 輸出 'xiǎo míng tóng xué'
pinyinUtil.getPinyin('小茗同學(xué)', '-', true, true); // 輸出 ['xiǎo-míng-tóng-xué', 'xiǎo-míng-tòng-xué']
如果需要精準(zhǔn)識(shí)別多音字
由于詞典文件較大,本示例不推薦在web環(huán)境下使用:
pinyinUtil.getPinyin('長(zhǎng)城和長(zhǎng)大', ' ', true, true)彤避; // 輸出:cháng chéng hé zhǎng dà
pinyinUtil.getPinyin('喝水和喝彩', ' ', true, true)傅物; // 輸出:hē shuǐ hé hè cǎi
pinyinUtil.getPinyin('偉大的大夫', ' ', true, true); // 輸出:wěi dà de dài fū
關(guān)于簡(jiǎn)單拼音輸入法
一個(gè)正式的輸入法需要考慮的東西太多太多琉预,比如詞庫(kù)董饰、用戶(hù)個(gè)人輸入習(xí)慣等,這里只是實(shí)現(xiàn)一個(gè)最簡(jiǎn)單的輸入法圆米,沒(méi)有任何詞庫(kù)(雖然加上也可以卒暂,但是web環(huán)境不適合引入太大的文件)。
推薦使用第二個(gè)字典文件pinyin_dict_notone.js娄帖,雖然字典三字?jǐn)?shù)更多也祠,但是不能按照漢字使用頻率排序,一些生僻字反而在前面近速。
? ?SimpleInputMethod.init('.test-input-method');
結(jié)語(yǔ)
由于本工具類(lèi)的目標(biāo)環(huán)境是web诈嘿,而web注定了文件體積不能太大,所以不能引入太大的詞庫(kù)文件数焊,由于沒(méi)有詞庫(kù)的支持永淌,所以多音字無(wú)法識(shí)別崎场,實(shí)現(xiàn)的拼音輸入法也無(wú)法智能地匹配出合適的詞語(yǔ)佩耳,需要詞庫(kù)支持的可以參考這個(gè)nodejs環(huán)境下的項(xiàng)目:https://github.com/hotoo/pinyin