封裝好的3個方法:
/**
* 獲取漢字的拼音首字母
* @param str 漢字字符串,如果遇到非漢字則原樣返回
* @param polyphone 是否支持多音字,默認(rèn)false,如果為true,會返回所有可能的組合數(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)漢字,只支持單個漢字,返回所有匹配的漢字組合
* @param pinyin 單個漢字的拼音,不能包含聲調(diào)
*/
pinyinUtil.getHanzi(pinyin);
下面分別針對不同場合如何使用作介紹。
如果你只需要獲取拼音首字母
pinyinUtil.getFirstLetter('小茗同學(xué)'); // 輸出 XMTX
pinyinUtil.getFirstLetter('大中國', true); // 輸出 ['DZG', 'TZG']
需要特別說明的是,如果你引入的是其它2個字典文件,也同樣可以獲取拼音首字母的,只是說用這個字典文件更適合。
如果拼音不需要聲調(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)識別多音字
由于詞典文件較大,本示例不推薦在web環(huán)境下使用:
pinyinUtil.getPinyin('長城和長大', ' ', 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)于簡單拼音輸入法
一個正式的輸入法需要考慮的東西太多太多,比如詞庫、用戶個人輸入習(xí)慣等,這里只是實現(xiàn)一個最簡單的輸入法,沒有任何詞庫(雖然加上也可以,但是web環(huán)境不適合引入太大的文件)。
推薦使用第二個字典文件pinyin_dict_notone.js,雖然字典三字?jǐn)?shù)更多,但是不能按照漢字使用頻率排序,一些生僻字反而在前面。
? ?SimpleInputMethod.init('.test-input-method');
結(jié)語
由于本工具類的目標(biāo)環(huán)境是web,而web注定了文件體積不能太大,所以不能引入太大的詞庫文件,由于沒有詞庫的支持,所以多音字無法識別,實現(xiàn)的拼音輸入法也無法智能地匹配出合適的詞語,需要詞庫支持的可以參考這個nodejs環(huán)境下的項目:https://github.com/hotoo/pinyin