1. 程式人生 > >根據城市首字母進行分類,區分多音字,獲取城市首字母

根據城市首字母進行分類,區分多音字,獲取城市首字母

多音字詞典  duoyinzi_pinyin.txt

a#阿

ao#拗
ai#艾
bang#膀 磅 蚌
ba#扒車 扒拉 扒皮
bai#叔伯 百 柏楊
bao#剝皮 薄  暴 堡 曝
beng#蚌埠
bi#復辟  臂  祕魯 泌陽
bing#屏棄 屏氣 屏除 屏退 屏息
bian#扁 便
bo#薄荷 單薄 伯 伯爵  泊 波 柏 蘿蔔 孛
bu#卜
can#參
cang#藏
cen#參差
ceng#曾 噌
cha#差 剎那 寶剎 一剎 查
chai#公差 差役 專差 官差 聽差 美差 辦差 差事 差使 肥差 當差 欽差 苦差 出差
chan#顫 單于 禪
chang#長  廠
chao#朝 嘲
che#工尺 車
chen#稱職 勻稱 稱心 相稱 對稱
cheng#稱 乘 澄 噌吰 橙 秤
chu#畜
chui#椎心
chuan#傳
chi#匙 尺 吃
chong#重慶 重重 蟲
chou#臭
chuang#經幢
chuo#綽
ci#參差 伺  龜茲
cuan#攢錢 攢聚 攢動
cuo#撮兒 撮要 撮合
da#大 嗒
dao#叨
dai#大夫
dan#單 彈
dang#鐺
de#的
di#堤 底 怎的 有的 目的 標的 打的 的確 的當 的士 地 提防
diao#藍調 調調 音調 論調 格調 調令 低調 筆調 基調 強調 聲調 濫調 老調 色調 單調 腔調 跑調 曲調 步調 語調 主調 情調
ding#丁
du#讀 都 度
dou#全都 句讀
duo#舵 測度 忖度 揣度 猜度
dun#糧囤 盾 頓 沌 敦
e#阿諛 阿膠 阿彌 噁心
er#兒
fan#番
feng#馮
fo#佛
fu#彷彿 果脯 罘
fou#否則 否定 應否 是否 與否 否決
ga#咖哩 伽馬
gai#蓋
gao#告
gang#扛鼎
ge#革 蛤蚧 文蛤 蛤蜊 咯
gei#給
geng#脖頸
gong#女紅
gu#谷 中鵠  鼓
gui#龜 櫃 矽
gua#呱
guan#綸巾 東莞
guang#廣
ha#蛤
hai#還 嗨
hao#貉子 貉絨
hang#夯 總行 分行 支行 行業 排行 行情 央行 商行 外行 銀行 商行 酒行 麻行 琴行 巷道
he#和 合 核
heng#道行
hu#鵠 水滸
hua#滑
huan#歸還 放還 奉還
hui#會 澮河
hong#紅 虹
huo#軟和 熱和 暖和
ji#病革 給養 自給 給水 薪給 給予 供給 稽 緝 藉 奇數 亟 詰屈 薺菜
jia#雪茄 伽 家 價 賈
jian#見
jiang#降
jiao#嚼舌 嚼子 細嚼 角 剿 餃 腳 蕉 矯
jie#解 慰藉 蘊藉 詰
jin#矜 勁
jing#頸 景
ju#咀嚼  居 桔 句
jun#均
juan#棚圈 圈養
jv#咀嚼 趑趄
jvan#豬圈 羊圈
jue#主角 角色 旦角 女角 丑角 角力 名角 配角 咀嚼 覺
jun#龜裂 俊
jvn#龜裂
ka#咖 卡 喀
kai#楷
kang#扛 扛活 扛大
ke#咳 殼
keng#吭
kuai#會計 財會 澮
kuo#括
la#癩痢 臘
lai#癩瘡 癩子 癩蛤 癩皮
lao#積潦 絡子 落枕 落價 粩 姥
le#樂 勒 了
lei#勒緊
lo#然咯
lou#佝僂
long#里弄 弄堂 瀧
li#躒
liao#瞭解 了結  明瞭 了得 末了 未了 瞭如  瞭如指掌 潦
liang#靚 倆
liu#六
lu#碌 陸 露
luo#絡 絡 落 漯
lv#率 綠
lun#綸
mai#埋
man#埋怨 蔓
mai#脈
mang#氓 芒
mao#冒
meng#群氓 盟
mei#沒
mo#埋沒 隱沒 脈脈 模 摩
mou#綢繆 牟
mi#祕 泌尿 分泌 謎
miu#謬 謬論 紕繆
mu#人模 字模 模板 模樣 模具 裝模 裝模做樣 模子
na#哪 娜 那
nan#南
ne#哪吒 呢
nong#弄
ni#毛呢 花呢 呢絨 線呢 呢料 呢子 呢喃 溺
niao#尿 鳥
nian#粘
niang#釀
niu#執拗 拗不
nu#努
nue#瘧 瘧疾
nuo#婀娜 嫋娜
nv#女
nve#瘧原 瘧蚊
o#喔
pa#扒
pai#派 迫擊 迫擊炮
pao#刨 炮
pang#胖 膀胱 膀腫 磅礴
pi#闢 否極 臧否 龍陂 芘
pian#扁舟 便宜
piao#樸姓
ping#屏 蘋
po#湖泊 血泊  迫 朴刀 坡 陂
pu#暴十 一曝十寒 裡堡 十里堡 脯 樸 曝晒 瀑 埔
qi#期 其 泣
qiu#龜茲
qi#稽首 緝鞋 棲  奇 漆 齊
qia#卡脖 卡子 關卡 卡殼 哨卡 邊卡 髮卡
qiao#雀盲 雀子 地殼 甲殼 軀殼
qian#纖 乾
qiang#強
qie#茄 趔趄
qin#親 沁
qing#乾親 親家
qu#區 趣
quan#圈 券
que#雀
ruo#若
sai#塞
se#堵塞 搪塞 茅塞 閉塞 鼻塞 梗塞 阻塞 淤塞 擁塞 哽塞  色
sha#莎 剎車 急剎 急剎車 廈
shai#色子
shao#勺
shan#姓單 單縣 杉
shang#衣裳
she#拾級 折本 射 蛇
shen#沙蔘 野參 參王 人蔘 紅參 丹蔘 山參 海蔘 刺蔘 鹿參 什 身 沈
sheng#野乘 千乘 史乘  省 晟 盛
shi#鑰匙 拾荒 撿拾 拾物 傢什 什物 什錦 麻什  麥什 喀什 牛什  識 似的 食 石 氏 拾 適
shuai#表率 率性 率直 率真 粗率 率領 輕率 直率 草率 大率 坦率 衰
shuang#瀧水
shu#屬 數 術 熟
shui#遊說
shuo#數見 數見不鮮  說
si#窺伺 伺弄 伺機 似 思
su#宿
sui#尿泡
ta#拓本 拓片 碑拓 疲沓 拖沓 雜沓 沓 塔 鴻塔
tang#湯
tao#陶
tan#彈性 彈力 反彈
ti#提 體
tiao#調
ting#町 聽
tui#褪
tuo#拓
tun#囤 屯
wei#尾 蔚 圩
wu#無 可惡 交惡 好惡 厭惡 憎惡 嫌惡 痛惡 深惡
wan#藤蔓 枝蔓 瓜蔓 蔓兒  莞  萬 百萬 皖
wai#崴
xia#蝦 嚇 夏
xi#棲棲 系  蹊 洗 溪 戲
xiao#校 切削 削麵 刀削 刮削
xian#纖細 光纖 纖巧 纖柔 纖小 纖維 纖瘦 纖纖 化纖 纖秀 棉纖 纖塵
xiang#降 巷
xie#解數 出血 採血 換血 血糊 尿血 淤血 放血 血暈 血淋 便血 吐血 咯血 叶韻 蠍 蠍子 邪
xiu#銅臭 乳臭 成宿 星宿
xin#馨 信 鴻信
xing#深省 省視 內省 不省人事 省悟 省察 行 旅行 例行 行程 行樂 龍行 人行 流行 先行 行星 品行  發行 行政 風行 龍行 龍行 麟行 滎
xu#牧畜 畜產 畜牧 畜養 籲 麥埂圩 滸
xue#削  血
xun#蕁 尋
ya#琊
yao#鑰匙 金鑰 耀 曜
yan#咽  殷紅 醃 煙
ye#液 抽咽 哽咽 咽炎 下嚥 嗚咽 幽咽 悲咽 葉  葉
yi#自艾 遺 屹
yin#殷
ying#滎經
yo#杭育
yong#湧
yu#餘 呼籲 籲請 籲求 育 熨帖 熨燙 於
yuan#員
yun#熨
yue#約 樂音 器樂 樂律 樂章 音樂 樂理 民樂 樂隊 聲樂 奏樂 絃樂 樂壇 管樂 配樂 樂曲 樂譜  鎖鑰 金鑰 樂團 樂器
za#綁紮 結紮 包紮 捆紮 咱家
zan#攢 咱
zang#寶藏 藏曆 藏文 藏語 藏青 藏族 藏醫  藏藥 藏藍 西藏
zai#牛仔 龜仔 龍仔 鼻仔 羊仔  仔仔 麻仔  麵包仔 麥旺仔 鴻仔 煲仔 福仔
ze#擇
zeng#曾孫 曾祖
zong#綜
zha#扎
zhai#宅
zhan#不粘 貼上 粘連
zhao#朝朝 明朝 朝暉 朝夕 朝思 有朝 今朝 朝氣 朝三 朝秦 朝霞 鷹爪 龍爪 魔爪 爪牙 失著 著數 龍爪槐
zhe#折 著
zhi#標識 吱 殖 枝
zhong#重 種
zhou#粥
zhu#屬意 著
zhua#爪子
zhui#椎 隹
zhuo#執著 著裝 著落 著意 著力 附著 著筆 膠著 著手 著重 穿著 衣著 執著 著眼 著墨 著實 沉著 著陸 著想 著色
zhuang#幢房 一幢 幢樓
zi#仔 茲
zu#足
zuo#柞

zui#咀

package com.renren.kylin.standard.util;


import java.io.*;
import java.util.HashMap;
import java.util.Map;


import com.google.common.io.Resources;
import org.apache.log4j.Logger;


import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;


public class PinyinUtils {


    private static final Logger logger = Logger.getLogger("devLog");


    public static Map<String,String> dictionary = new HashMap<String,String>();


    //載入多音字詞典
    static{


        BufferedReader br = null;
        try {
            String filePath = PinyinUtils.class.getClassLoader().getResource("duoyinzi_pinyin.txt").getPath();
            File file = new File(filePath);
            //InputStream in = (InputStream) Resources.getResource("test.txt").getContent();
            br = new BufferedReader(new InputStreamReader(new FileInputStream(file),"UTF-8"));


            String line = null;
            while((line=br.readLine())!=null){


                String[] arr = line.split("#");


                if(StringUtils.isNotEmpty(arr[1])){
                    String[] sems = arr[1].split(" ");
                    for (String sem : sems) {


                        if(StringUtils.isNotEmpty(sem)){
                            dictionary.put(sem , arr[0]);
                        }
                    }
                }
            }


        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            if(br!=null){
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }


    }


    public static String[] chineseToPinYin(char chineseCharacter) throws BadHanyuPinyinOutputFormatCombination{
        HanyuPinyinOutputFormat outputFormat = new HanyuPinyinOutputFormat();
        outputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
        outputFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
        outputFormat.setVCharType(HanyuPinyinVCharType.WITH_V);


        if(chineseCharacter>=32 && chineseCharacter<=125){    //ASCII >=33 ASCII<=125的直接返回 ,ASCII碼錶:http://www.asciitable.com/
            return new String[]{String.valueOf(chineseCharacter)};
        }


        return PinyinHelper.toHanyuPinyinStringArray(chineseCharacter, outputFormat);
    }


    /**
     * 獲取漢字拼音的全拼
     * @param chineseCharacter
     * @return
     * @throws BadHanyuPinyinOutputFormatCombination
     */
    public static String chineseToPinYinF(String chineseCharacter) throws BadHanyuPinyinOutputFormatCombination{
        if(StringUtils.isEmpty(chineseCharacter)){
            return null;
        }


        char[] chs = chineseCharacter.toCharArray();


        StringBuilder result = new StringBuilder();


        for(int i=0;i<chs.length;i++){
            String[] arr = chineseToPinYin(chs[i]);
            if(arr==null){
                result.append("");
            }else if(arr.length==1){
                result.append(arr[0]);
            }else if(arr[0].equals(arr[1])){
                result.append(arr[0]);
            }else{


                String prim = chineseCharacter.substring(i, i+1);
//              System.out.println("prim="+prim+"**i="+i);


                String lst = null,rst = null;


                if(i<=chineseCharacter.length()-2){
                    rst = chineseCharacter.substring(i,i+2);
                }
                if(i>=1 && i+1<=chineseCharacter.length()){
                    lst = chineseCharacter.substring(i-1,i+1);
                }


//              System.out.println("lst="+lst+"**rst="+rst);


                String answer = null;
                for (String py : arr) {


                    if(StringUtils.isEmpty(py)){
                        continue;
                    }


                    if((lst!=null && py.equals(dictionary.get(lst))) ||
                            (rst!=null && py.equals(dictionary.get(rst)))){
                        answer = py;
//                      System.out.println("get it,answer="+answer+",i="+i+"**break");
                        break;
                    }


                    if(py.equals(dictionary.get(prim))){
                        answer = py;
//                      System.out.println("get it,answer="+answer+",i="+i+"**prim="+prim);
                    }
                }
                if(answer!=null){
                    result.append(answer);
                }else{
                    logger.warn("no answer ch="+chs[i]);
                }
            }
        }


        return result.toString().toLowerCase();
    }


    public static String chineseToPinYinS(String chineseCharacter) throws BadHanyuPinyinOutputFormatCombination{
        if(StringUtils.isEmpty(chineseCharacter)){
            return null;
        }


        char[] chs = chineseCharacter.toCharArray();


        StringBuilder result = new StringBuilder();


        for(int i=0;i<chs.length;i++){
            String[] arr = chineseToPinYin(chs[i]);
            if(arr==null){
                result.append("");
            }else if(arr.length==1){
                result.append(arr[0].charAt(0));
            }else if(arr[0].equals(arr[1])){
                result.append(arr[0].charAt(0));
            }else{


                String prim = chineseCharacter.substring(i, i+1);
//              System.out.println("prim="+prim+"**i="+i);


                String lst = null,rst = null;


                if(i<=chineseCharacter.length()-2){
                    rst = chineseCharacter.substring(i,i+2);
                }
                if(i>=1 && i+1<=chineseCharacter.length()){
                    lst = chineseCharacter.substring(i-1,i+1);
                }


//              System.out.println("lst="+lst+"**rst="+rst);


                String answer = null;
                for (String py : arr) {


                    if(StringUtils.isEmpty(py)){
                        continue;
                    }


                    if((lst!=null && py.equals(dictionary.get(lst))) ||
                            (rst!=null && py.equals(dictionary.get(rst)))){
                        answer = py;
//                      System.out.println("get it,answer="+answer+",i="+i+"**break");
                        break;
                    }


                    if(py.equals(dictionary.get(prim))){
                        answer = py;
//                      System.out.println("get it,answer="+answer+",i="+i+"**prim="+prim);
                    }
                }
                if(answer!=null){
                    result.append(answer.charAt(0));
                }else{
                    logger.warn("no answer ch="+chs[i]);
                }
            }
        }
        return Character.toUpperCase(result.toString().toCharArray()[0])+"";
    }


    public static void main(String[] args) {


        try {


//          String str = "長沙綠愛旅行";
            String str = "長沙";


            System.out.println(str+" pyf="+PinyinUtils.chineseToPinYinF(str));
            System.out.println(str + " pys="+PinyinUtils.chineseToPinYinS(str));


        } catch (BadHanyuPinyinOutputFormatCombination e) {
            e.printStackTrace();
        }
    }


}