精华内容
下载资源
问答
  • android多音字转拼音工具分装

    千次阅读 2018-04-12 11:09:57
    将项目中的多音字转拼音工具抽取出来了。具备资源小,算法简单的特色。 提供了一个多音字的字典,放在项目的assert文件夹中。 主要算法如下: public class CharacterParser { private static int[] pyvalue ...

    一.项目结构

    本项目分为两个部分,一部分是多音字资源文件,另外一部分是汉字转拼音以及算法部分。

    下载地址:https://download.csdn.net/download/MatrixMind/15468700

    二.内容截图

    在Android10平台建了一个测试多音字转拼音的demo。内容如下

    1.项目结构图

    2.多音字内容图,用户可以根据实际需求自己添加多音字本项目中搜录了常用的多音字可以应付大部分生活中的场景了。

    3.运行结果图

    实际运行结果如下:

     

    展开全文
  • java匹配多音字

    千次阅读 2017-01-09 14:13:02
    * 多音字配置文件读取工具类(duoyizi.properties) * * @author ZhuLei * @date 2016年11月14日 */ public final class DuoYinZiUtil { private static Logger logger = LoggerFactory.getLogger...
    
    
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.Map.Entry;
    import java.util.Properties;
    import java.util.concurrent.ExecutionException;
    
    import org.apache.commons.lang.exception.ExceptionUtils;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.core.io.support.PropertiesLoaderUtils;
    
    import com.google.common.cache.CacheBuilder;
    import com.google.common.cache.CacheLoader;
    import com.google.common.cache.LoadingCache;
    
    /**
     * 多音字配置文件读取工具类(duoyizi.properties)
     * 
     * @author ZhuLei
     * @date 2016年11月14日
     */
    public final class DuoYinZiUtil {
    
    	private static Logger logger = LoggerFactory.getLogger(DuoYinZiUtil.class);
    
    	private DuoYinZiUtil() {
    	}
    
    	private static Properties props = null;
    	private static LoadingCache<String, String> cahceBuilder = null;
    	private static Map<String, String> map = new HashMap<String, String>();
    	static {
    		try {
    
    			props = PropertiesLoaderUtils
    					.loadAllProperties("duoyizi.properties");
    			cahceBuilder = CacheBuilder.newBuilder().maximumSize(100)
    					.build(new CacheLoader<String, String>() {
    						@Override
    						public String load(String key) throws Exception {
    
    							return getValueByKey(key);
    						}
    					});
    			Iterator<Entry<Object, Object>> it = props.entrySet().iterator();
    			while (it.hasNext()) {
    				@SuppressWarnings({ "rawtypes" })
    				Map.Entry entry = (Map.Entry) it.next();
    				String key = (String) entry.getKey();
    				String value = (String) entry.getValue();
    				map.put(key, value);
    			}
    		} catch (Exception e) {
    			logger.error(ExceptionUtils.getFullStackTrace(e));
    			System.exit(1);
    		}
    	}
    
    	private static String getValueByKey(String key) {
    		return props.getProperty(key);
    	}
    
    	public static String get(String key) {
    		try {
    			return cahceBuilder.get(key);
    		} catch (ExecutionException e) {
    			logger.error(ExceptionUtils.getFullStackTrace(e));
    		}
    		return null;
    	}
    
    	public static String get(char key) {
    		try {
    			return map.get(String.valueOf(key));
    		} catch (Exception e) {
    			// 不处理,返回空字符串
    		}
    		return "";
    	}
    
    	@SuppressWarnings("unused")
    	private static String get(String key, String defaultValue) {
    		return props.getProperty(key, defaultValue);
    	}
    
    }
    这是匹配多音字工具类代码。
    下面是配置文件代码
    \u67CF=bai
    \u8D32=ben
    \u8584=bo
    \u90FD=du
    \u9889=jie
    \u89E3=xie
    \u79D8=bi
    \u957F=chang
    \u957F\u5B59=zhangsun
    \u725F=mou
    \u8398=shen
    \u6BB7=yin
    \u96BD=juan
    \u5C09=wei
    \u5C09\u8FDF=yu
    \u5947=ji
    \u5B93=mi
    \u76D6=ge
    \u8983=qin
    \u5355=shan
    \u5355\u4E8E=chan
    \u8C0C=shen
    \u7FDF=zhai
    \u4E50=yue
    \u53EC=shao
    \u9697=kui
    \u79CD=chong
    \u6734=piao
    \u4EC7=qiu
    \u533A=ou
    \u6298=she
    \u9ED1=hei
    \u7E41=po
    \u7EAA=ji
    \u67E5=cha
    \u90C7=huan
    \u5F17=fu
    \u891A=chu
    \u9002=shi
    \u53E5=ju
    \u961A=kan
    \u4E5C=niè
    \u772D=sui
    \u6D17=xian
    \u5458=yun
    \u796D=zhai
    \u5BBF=su
    \u7F2A=miao
    \u4E58=cheng
    \u8F9F=bi
    \u8F66=che
    \u4F1A=kuai
    \u94C5=qian
    \u8304=qie
    \u4E07=wan
    \u4E07\u4FDF=moqi
    \u543E=wu


    
    
    展开全文
  • java如何准确的读取多音字

    千次阅读 2014-12-02 18:41:21
    java如何准确的读取多音字 java准确读取多音字的方法,多音字的识别一直是一个问题,笔者结合了很多不同的读取方法,完成了这个扩展的帮助类。 首先,下载java读取拼音的jar(pinyin4j-2.5.0.jar)。 然后, ...
    java如何准确的读取多音字

    java准确读取多音字的方法,多音字的识别一直是一个问题,笔者结合了很多不同的读取方法,完成了这个扩展的帮助类。
    首先,下载java读取拼音的jar(pinyin4j-2.5.0.jar)。
    然后,
    package data.util;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    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 PinyinUtilsPro {
    	private static Map<String, List<String>> pinyinMap = new HashMap<String, List<String>>();
    	
    	private static List<String> pinyin = new ArrayList<String>();
    	private static List<String> hpinyin = new ArrayList<String>();
    	
    	private static String regx = "(,| |\\[|\\])";// 正则表达式,匹配字符串用
    	
    	public static void main(String[] args) {
    		String str = "绿色中国银行长沙分行";
    		
    		convertChineseToPinyin(str);
    		String py = getPinyin();
    		System.out.println(str + " = " + py);
    		
    		String headP = getHeadPinyin();
    		System.out.println(headP);
    	}
    	
    	public static String getPinyin(){
    		return String.valueOf(pinyin).replaceAll(regx, "");
    	}
    	
    	public static String getHeadPinyin(){
    		return String.valueOf(hpinyin).replaceAll(regx, "");
    	}
    
    	/**
    	 * 汉字转拼音 最大匹配优先
    	 * 
    	 * @param chinese
    	 * @return
    	 */
    	public static void convertChineseToPinyin(String chinese) {
    		initPinyin();
    		HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
    		defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
    		defaultFormat.setVCharType(HanyuPinyinVCharType.WITH_V);
    		defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
    
    		char[] arr = chinese.toCharArray();
    
    		for (int i = 0; i < arr.length; i++) {
    			char ch = arr[i];
    			if (ch > 128) { // 非ASCII码
    				// 取得当前汉字的所有全拼
    				try {
    					String[] results = PinyinHelper.toHanyuPinyinStringArray(
    							ch, defaultFormat);
    					if (results != null) { // 非中文
    						int len = results.length;
    						if (len == 1) { // 不是多音字
    							setValue(results[0]);
    						} else { // 多音字
    							// 合并同音不同声调(去重)
    							List<String> duoyinziPinyins= new ArrayList<String>();// 定义一个空的数组
    							for(int k=0;k<len;k++){
    								if(!duoyinziPinyins.contains(results[k])){
    									duoyinziPinyins.add(results[k]);
    								}
    							}
    							
    							if(duoyinziPinyins.size()==1){
    								setValue(duoyinziPinyins.get(0));// 如果新的集合长度是1,就取第一个
    							}else{// 
    								System.out.println("多音字:" + ch);
    								int length = chinese.length();
    								boolean flag = false;
    								for (int x = 0; x < duoyinziPinyins.size(); x++) {
    									String py = duoyinziPinyins.get(x);
    									
    									if (i + 3 <= length) { // 后向匹配2个汉字 大西洋
    										if(matchPinyins(py,chinese, i, i+3)){
    											flag = setValue(py);
    											break;
    										}
    									}
    	
    									if (i + 2 <= length) { // 后向匹配 1个汉字 大西
    										if(matchPinyins(py,chinese, i, i+2)){
    											flag = setValue(py);
    											break;
    										}
    									}
    	
    									if ((i - 2 >= 0) && (i + 1 <= length)) { // 前向匹配2个汉字
    										if(matchPinyins(py,chinese, i-2, i+1)){
    											flag = setValue(py);
    											break;
    										}
    									}
    	
    									if ((i - 1 >= 0) && (i + 1 <= length)) { // 前向匹配1个汉字
    																				// 固大
    										if(matchPinyins(py,chinese, i-1, i+1)){
    											flag = setValue(py);
    											break;
    										}
    									}
    	
    									if ((i - 1 >= 0) && (i + 2 <= length)) { // 前向1个,后向1个
    																				// 固大西
    										if(matchPinyins(py,chinese, i-1, i+2)){
    											flag = setValue(py);
    											break;
    										}
    									}
    								}
    	
    								if (!flag) { 
    									// 如果都没有找到,也就是常用读音
    									System.out.println("default = " + duoyinziPinyins.get(0));
    									setValue(duoyinziPinyins.get(0));
    								}
    							}
    						}
    					}
    				} catch (BadHanyuPinyinOutputFormatCombination e) {
    					e.printStackTrace();
    				}
    			} else {
    				setValue(String.valueOf(ch));
    			}
    		}
    	}
    	
    	// 截取词组,并匹配拼音表中的词组
    	private static boolean matchPinyins(String py,String chinese,int m,int n){
    		String s = chinese.substring(m,n);
    		List<String> cizus = pinyinMap.get(py);
    		if(cizus!=null&&cizus.contains(s)){
    			return true;
    		}
    		return false;
    	}
    
    	private static boolean setValue(String py) {
    		pinyin.add(py);
    		hpinyin.add(py.substring(0, 1));
    		return true;
    	}
    	
    	/**
    	 * 初始化 所有的多音字词组
    	 */
    	public static void initPinyin() {
    		// 读取多音字的全部拼音表;
    		InputStream file = PinyinUtilsPro.class.getResourceAsStream("/duoyinzi_dic.txt");
    		BufferedReader br = null;
    		String s = null;
    		try {
    			br = new BufferedReader(new InputStreamReader(file,"UTF-8"));
    			while ((s = br.readLine()) != null) {
    				if (s != null) {
    					String[] arr = s.split("#");
    					String pinyin = arr[0];
    					String chinese = arr[1];
    
    					if (chinese != null) {
    						String[] strs = chinese.split(" ");
    						//去空						
    						List<String> list = arr2List(strs);
    						pinyinMap.put(pinyin, list);
    					}
    				}
    			}
    		} catch (IOException e) {
    			e.printStackTrace();
    		} finally {
    			try {
    				br.close();
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
    		}
    	}
    
    	// 数组转换成集合,并且去掉空格
    	private static List<String> arr2List(String[] strs) {
    		if(strs!=null&&strs.length>0){
    			List<String> list = new ArrayList<String>();
    			for (int i = 0; i < strs.length; i++) {
    				if(!"".equals(strs[i].trim())){
    					list.add(strs[i].trim());
    				}
    			}
    			return list;
    		}else{
    			return null;
    		}
    	}
    }
    

    使用方法:
    再需要使用拼音的方法处,
    		PinyinUtilsPro.convertChineseToPinyin(s);
    		String itemHeadpell = PinyinUtilsPro.getHeadPinyin();
    		String itemAspell = PinyinUtilsPro.getPinyin();
    		sysDicItem.setItemSpell(itemHeadpell);
    		sysDicItem.setItemAspell(itemAspell);




    文件下载链接:http://download.csdn.net/detail/e_real/8217659
    展开全文
  • java 汉字转拼音(解决多音字问题)

    万次阅读 2016-06-29 09:33:36
    某些情况下我们希望能得到多音字的唯一拼音,此时就需要借助多音字字典了,原理很简单:给多音字一个默认的拼音并告诉计算机碰到哪些词的时候使用其它的拼音,例如 长 字,我们可以给它指定默认拼音为 zhang,并标识

    上一篇文章 Java 汉字转拼音 介绍了Java 中利用Pinyin4j 实现汉字转拼音,但是对于多音字问题采取的是组合拼音方式,例如长沙 取拼音结果就是 changsha zhangsha。某些情况下我们希望能得到多音字的唯一拼音,此时就需要借助多音字字典了,原理很简单:给多音字一个默认的拼音并告诉计算机碰到哪些词的时候使用其它的拼音,例如 长 字,我们可以给它指定默认拼音为 zhang,并标识 长沙 拼音为 chang。


    以上是自己搜集的一个多音字词典 duoyinzi_pinyin.txt

    [html] view plain copy
    1. a#阿  
    2. ao#拗  
    3. ai#艾  
    4. bang#膀 磅 蚌  
    5. ba#扒车 扒拉 扒皮  
    6. bai#叔伯 百 柏杨  
    7. bao#剥皮 薄  暴 堡 曝  
    8. beng#蚌埠  
    9. bi#复辟  臂  秘鲁 泌阳  
    10. bing#屏弃 屏气 屏除 屏退 屏息  
    11. bian#扁 便  
    12. bo#薄荷 单薄 伯 伯爵  泊 波 柏 萝卜 孛  
    13. bu#卜  
    14. can#参  
    15. cang#藏  
    16. cen#参差  
    17. ceng#曾 噌  
    18. cha#差 刹那 宝刹 一刹 查  
    19. chai#公差 差役 专差 官差 听差 美差 办差 差事 差使 肥差 当差 钦差 苦差 出差  
    20. chan#颤 单于 禅  
    21. chang#长  厂  
    22. chao#朝 嘲  
    23. che#工尺 车  
    24. chen#称职 匀称 称心 相称 对称  
    25. cheng#称 乘 澄 噌吰 橙 秤  
    26. chu#畜  
    27. chui#椎心  
    28. chuan#传  
    29. chi#匙 尺 吃  
    30. chong#重庆 重重 虫  
    31. chou#臭  
    32. chuang#经幢  
    33. chuo#绰  
    34. ci#参差 伺  龟兹  
    35. cuan#攒钱 攒聚 攒动   
    36. cuo#撮儿 撮要 撮合  
    37. da#大 嗒  
    38. dao#叨  
    39. dai#大夫  
    40. dan#单 弹  
    41. dang#铛  
    42. de#的  
    43. di#堤 底 怎的 有的 目的 标的 打的 的确 的当 的士 地 提防  
    44. diao#蓝调 调调 音调 论调 格调 调令 低调 笔调 基调 强调 声调 滥调 老调 色调 单调 腔调 跑调 曲调 步调 语调 主调 情调  
    45. ding#丁  
    46. du#读 都 度  
    47. dou#全都 句读  
    48. duo#舵 测度 忖度 揣度 猜度  
    49. dun#粮囤 盾 顿 沌 敦  
    50. e#阿谀 阿胶 阿弥 恶心  
    51. er#儿  
    52. fan#番  
    53. feng#冯  
    54. fo#佛  
    55. fu#仿佛 果脯 罘  
    56. fou#否则 否定 应否 是否 与否 否决  
    57. ga#咖喱 伽马  
    58. gai#盖  
    59. gao#告  
    60. gang#扛鼎  
    61. ge#革 蛤蚧 文蛤 蛤蜊 咯  
    62. gei#给  
    63. geng#脖颈  
    64. gong#女红  
    65. gu#谷 中鹄  鼓  
    66. gui#龟 柜 硅  
    67. gua#呱  
    68. guan#纶巾 东莞  
    69. guang#广  
    70. ha#蛤  
    71. hai#还 嗨  
    72. hao#貉子 貉绒  
    73. hang#夯 总行 分行 支行 行业 排行 行情 央行 商行 外行 银行 商行 酒行 麻行 琴行 巷道  
    74. he#和 合 核  
    75. heng#道行  
    76. hu#鹄 水浒  
    77. hua#滑  
    78. huan#归还 放还 奉还  
    79. hui#会 浍河  
    80. hong#红 虹  
    81. huo#软和 热和 暖和  
    82. ji#病革 给养 自给 给水 薪给 给予 供给 稽 缉 藉 奇数 亟 诘屈 荠菜  
    83. jia#雪茄 伽 家 价 贾  
    84. jian#见  
    85. jiang#降  
    86. jiao#嚼舌 嚼子 细嚼 角 剿 饺 脚 蕉 矫  
    87. jie#解 慰藉 蕴藉 诘  
    88. jin#矜 劲  
    89. jing#颈 景  
    90. ju#咀嚼  居 桔 句  
    91. jun#均  
    92. juan#棚圈 圈养  
    93. jv#咀嚼 趑趄  
    94. jvan#猪圈 羊圈  
    95. jue#主角 角色 旦角 女角 丑角 角力 名角 配角 咀嚼 觉  
    96. jun#龟裂 俊  
    97. jvn#龟裂  
    98. ka#咖 卡 喀  
    99. kai#楷  
    100. kang#扛 扛活 扛大  
    101. ke#咳 壳  
    102. keng#吭  
    103. kuai#会计 财会 浍  
    104. kuo#括  
    105. la#癞痢 腊  
    106. lai#癞疮 癞子 癞蛤 癞皮  
    107. lao#积潦 络子 落枕 落价 粩 姥  
    108. le#乐 勒 了  
    109. lei#勒紧  
    110. lo#然咯  
    111. lou#佝偻  
    112. long#里弄 弄堂 泷  
    113. li#跞  
    114. liao#了解 了结  明了 了得 末了 未了 了如  了如指掌 潦  
    115. liang#靓 俩  
    116. liu#六  
    117. lu#碌 陆 露  
    118. luo#络 络 落 漯  
    119. lv#率 绿  
    120. lun#纶  
    121. mai#埋  
    122. man#埋怨 蔓  
    123. mai#脉  
    124. mang#氓 芒  
    125. mao#冒  
    126. meng#群氓 盟  
    127. mei#没  
    128. mo#埋没 隐没 脉脉 模 摩  
    129. mou#绸缪 牟  
    130. mi#秘 泌尿 分泌 谜  
    131. miu#谬 谬论 纰缪  
    132. mu#人模 字模 模板 模样 模具 装模 装模做样 模子  
    133. na#哪 娜 那  
    134. nan#南  
    135. ne#哪吒 呢  
    136. nong#弄  
    137. ni#毛呢 花呢 呢绒 线呢 呢料 呢子 呢喃 溺  
    138. niao#尿 鸟  
    139. nian#粘  
    140. niang#酿  
    141. niu#执拗 拗不  
    142. nu#努  
    143. nue#疟 疟疾  
    144. nuo#婀娜 袅娜  
    145. nv#女  
    146. nve#疟原 疟蚊  
    147. o#喔  
    148. pa#扒  
    149. pai#派 迫击 迫击炮  
    150. pao#刨 炮  
    151. pang#胖 膀胱 膀肿 磅礴  
    152. pi#辟 否极 臧否 龙陂 芘  
    153. pian#扁舟 便宜  
    154. piao#朴姓  
    155. ping#屏 苹  
    156. po#湖泊 血泊  迫 朴刀 坡 陂  
    157. pu#暴十 一曝十寒 里堡 十里堡 脯 朴 曝晒 瀑 埔  
    158. qi#期 其 泣  
    159. qiu#龟兹  
    160. qi#稽首 缉鞋 栖  奇 漆 齐  
    161. qia#卡脖 卡子 关卡 卡壳 哨卡 边卡 发卡  
    162. qiao#雀盲 雀子 地壳 甲壳 躯壳  
    163. qian#纤 乾  
    164. qiang#强  
    165. qie#茄 趔趄   
    166. qin#亲 沁  
    167. qing#干亲 亲家  
    168. qu#区 趣  
    169. quan#圈 券  
    170. que#雀  
    171. ruo#若  
    172. sai#塞  
    173. se#堵塞 搪塞 茅塞 闭塞 鼻塞 梗塞 阻塞 淤塞 拥塞 哽塞  色  
    174. sha#莎 刹车 急刹 急刹车 厦  
    175. shai#色子  
    176. shao#勺  
    177. shan#姓单 单县 杉  
    178. shang#衣裳  
    179. she#拾级 折本 射 蛇  
    180. shen#沙参 野参 参王 人参 红参 丹参 山参 海参 刺参 鹿参 什 身 沈  
    181. sheng#野乘 千乘 史乘  省 晟 盛  
    182. shi#钥匙 拾荒 捡拾 拾物 家什 什物 什锦 麻什  麦什 喀什 牛什  识 似的 食 石 氏 拾 适  
    183. shuai#表率 率性 率直 率真 粗率 率领 轻率 直率 草率 大率 坦率 衰  
    184. shuang#泷水  
    185. shu#属 数 术 熟  
    186. shui#游说  
    187. shuo#数见 数见不鲜  说  
    188. si#窥伺 伺弄 伺机 似 思  
    189. su#宿  
    190. sui#尿泡  
    191. ta#拓本 拓片 碑拓 疲沓 拖沓 杂沓 沓 塔 鸿塔  
    192. tang#汤  
    193. tao#陶  
    194. tan#弹性 弹力 反弹  
    195. ti#提 体  
    196. tiao#调  
    197. ting#町 听  
    198. tui#褪  
    199. tuo#拓  
    200. tun#囤 屯  
    201. wei#尾 蔚 圩  
    202. wu#无 可恶 交恶 好恶 厌恶 憎恶 嫌恶 痛恶 深恶  
    203. wan#藤蔓 枝蔓 瓜蔓 蔓儿  莞  万 百万 皖  
    204. wai#崴  
    205. xia#虾 吓 夏  
    206. xi#栖栖 系  蹊 洗 溪 戏  
    207. xiao#校 切削 削面 刀削 刮削  
    208. xian#纤细 光纤 纤巧 纤柔 纤小 纤维 纤瘦 纤纤 化纤 纤秀 棉纤 纤尘  
    209. xiang#降 巷  
    210. xie#解数 出血 采血 换血 血糊 尿血 淤血 放血 血晕 血淋 便血 吐血 咯血 叶韵 蝎 蝎子 邪  
    211. xiu#铜臭 乳臭 成宿 星宿  
    212. xin#馨 信 鸿信  
    213. xing#深省 省视 内省 不省人事 省悟 省察 行 旅行 例行 行程 行乐 龙行 人行 流行 先行 行星 品行  发行 行政 风行 龙行 龍行 麟行 荥  
    214. xu#牧畜 畜产 畜牧 畜养 吁 麦埂圩 浒  
    215. xue#削  血  
    216. xun#荨 寻  
    217. ya#琊  
    218. yao#钥匙 金钥 耀 曜  
    219. yan#咽  殷红 腌 烟  
    220. ye#液 抽咽 哽咽 咽炎 下咽 呜咽 幽咽 悲咽 叶  葉  
    221. yi#自艾 遗 屹  
    222. yin#殷  
    223. ying#荥经  
    224. yo#杭育  
    225. yong#涌  
    226. yu#余 呼吁 吁请 吁求 育 熨帖 熨烫 於  
    227. yuan#员  
    228. yun#熨  
    229. yue#约 乐音 器乐 乐律 乐章 音乐 乐理 民乐 乐队 声乐 奏乐 弦乐 乐坛 管乐 配乐 乐曲 乐谱  锁钥 密钥 乐团 乐器  
    230. za#绑扎 结扎 包扎 捆扎 咱家  
    231. zan#攒 咱  
    232. zang#宝藏 藏历 藏文 藏语 藏青 藏族 藏医  藏药 藏蓝 西藏  
    233. zai#牛仔 龟仔 龙仔 鼻仔 羊仔  仔仔 麻仔  麵包仔 麦旺仔 鸿仔 煲仔 福仔  
    234. ze#择  
    235. zeng#曾孙 曾祖  
    236. zong#综  
    237. zha#扎  
    238. zhai#宅  
    239. zhan#不粘 粘贴 粘连  
    240. zhao#朝朝 明朝 朝晖 朝夕 朝思 有朝 今朝 朝气 朝三 朝秦 朝霞 鹰爪 龙爪 魔爪 爪牙 失着 着数 龙爪槐  
    241. zhe#折 着  
    242. zhi#标识 吱 殖 枝  
    243. zhong#重 种  
    244. zhou#粥  
    245. zhu#属意 著  
    246. zhua#爪子  
    247. zhui#椎 隹  
    248. zhuo#执著 着装 着落 着意 着力 附着 着笔 胶着 着手 着重 穿着 衣着 执着 着眼 着墨 着实 沉着 着陆 着想 着色  
    249. zhuang#幢房 一幢 幢楼  
    250. zi#仔 兹  
    251. zu#足  
    252. zuo#柞  
    253. zui#咀  


    自己封装了一个获取汉字拼音 全拼和简拼的工具类 PinyinUtils,代码如下:

    [java] view plain copy
    1. package com.ricky.java.suggestion.util;  
    2.   
    3. import java.io.BufferedReader;  
    4. import java.io.File;  
    5. import java.io.FileInputStream;  
    6. import java.io.FileNotFoundException;  
    7. import java.io.IOException;  
    8. import java.io.InputStreamReader;  
    9. import java.io.UnsupportedEncodingException;  
    10. import java.util.HashMap;  
    11. import java.util.Map;  
    12.   
    13. import org.apache.log4j.Logger;  
    14.   
    15. import net.sourceforge.pinyin4j.PinyinHelper;  
    16. import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;  
    17. import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;  
    18. import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;  
    19. import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;  
    20. import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;  
    21.   
    22. public class PinyinUtils {  
    23.   
    24.     private static final Logger logger = Logger.getLogger("devLog");  
    25.       
    26.     public static Map<String,String> dictionary = new HashMap<String,String>();  
    27.   
    28.     //加载多音字词典  
    29.     static{  
    30.           
    31.         BufferedReader br = null;  
    32.         try {  
    33.             File file = new File("./config/duoyinzi_pinyin.txt");  
    34.             br = new BufferedReader(new InputStreamReader(new FileInputStream(file),"UTF-8"));  
    35.               
    36.             String line = null;  
    37.             while((line=br.readLine())!=null){  
    38.                   
    39.                 String[] arr = line.split("#");  
    40.                   
    41.                 if(StringUtils.isNotEmpty(arr[1])){  
    42.                     String[] sems = arr[1].split(" ");  
    43.                     for (String sem : sems) {  
    44.                           
    45.                         if(StringUtils.isNotEmpty(sem)){  
    46.                             dictionary.put(sem , arr[0]);  
    47.                         }  
    48.                     }  
    49.                 }  
    50.             }  
    51.               
    52.         } catch (UnsupportedEncodingException e) {  
    53.             e.printStackTrace();  
    54.         } catch (FileNotFoundException e) {  
    55.             e.printStackTrace();  
    56.         } catch (IOException e) {  
    57.             e.printStackTrace();  
    58.         }finally{  
    59.             if(br!=null){  
    60.                 try {  
    61.                     br.close();  
    62.                 } catch (IOException e) {  
    63.                     e.printStackTrace();  
    64.                 }  
    65.             }  
    66.         }  
    67.   
    68.     }  
    69.       
    70.     public static String[] chineseToPinYin(char chineseCharacter) throws BadHanyuPinyinOutputFormatCombination{  
    71.         HanyuPinyinOutputFormat outputFormat = new HanyuPinyinOutputFormat();  
    72.         outputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);  
    73.         outputFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);  
    74.         outputFormat.setVCharType(HanyuPinyinVCharType.WITH_V);  
    75.           
    76.         if(chineseCharacter>=32 && chineseCharacter<=125){    //ASCII >=33 ASCII<=125的直接返回 ,ASCII码表:http://www.asciitable.com/  
    77.             return new String[]{String.valueOf(chineseCharacter)};  
    78.         }  
    79.           
    80.         return PinyinHelper.toHanyuPinyinStringArray(chineseCharacter, outputFormat);  
    81.     }  
    82.       
    83.     /** 
    84.      * 获取汉字拼音的全拼 
    85.      * @param chineseCharacter 
    86.      * @return 
    87.      * @throws BadHanyuPinyinOutputFormatCombination 
    88.      */  
    89.     public static String chineseToPinYinF(String chineseCharacter) throws BadHanyuPinyinOutputFormatCombination{  
    90.         if(StringUtils.isEmpty(chineseCharacter)){  
    91.             return null;  
    92.         }  
    93.           
    94.         char[] chs = chineseCharacter.toCharArray();  
    95.           
    96.         StringBuilder result = new StringBuilder();  
    97.           
    98.         for(int i=0;i<chs.length;i++){  
    99.             String[] arr = chineseToPinYin(chs[i]);  
    100.             if(arr==null){  
    101.                 result.append("");  
    102.             }else if(arr.length==1){  
    103.                 result.append(arr[0]);  
    104.             }else if(arr[0].equals(arr[1])){  
    105.                 result.append(arr[0]);  
    106.             }else{  
    107.                   
    108.                 String prim = chineseCharacter.substring(i, i+1);  
    109. //              System.out.println("prim="+prim+"**i="+i);  
    110.                   
    111.                 String lst = null,rst = null;  
    112.                   
    113.                 if(i<=chineseCharacter.length()-2){  
    114.                     rst = chineseCharacter.substring(i,i+2);  
    115.                 }  
    116.                 if(i>=1 && i+1<=chineseCharacter.length()){  
    117.                     lst = chineseCharacter.substring(i-1,i+1);  
    118.                 }  
    119.                   
    120. //              System.out.println("lst="+lst+"**rst="+rst);  
    121.                   
    122.                 String answer = null;  
    123.                 for (String py : arr) {  
    124.                       
    125.                     if(StringUtils.isEmpty(py)){  
    126.                         continue;  
    127.                     }  
    128.                       
    129.                     if((lst!=null && py.equals(dictionary.get(lst))) ||  
    130.                             (rst!=null && py.equals(dictionary.get(rst)))){  
    131.                         answer = py;  
    132. //                      System.out.println("get it,answer="+answer+",i="+i+"**break");  
    133.                         break;  
    134.                     }  
    135.                       
    136.                     if(py.equals(dictionary.get(prim))){  
    137.                         answer = py;  
    138. //                      System.out.println("get it,answer="+answer+",i="+i+"**prim="+prim);  
    139.                     }  
    140.                 }  
    141.                 if(answer!=null){  
    142.                     result.append(answer);  
    143.                 }else{  
    144.                     logger.warn("no answer ch="+chs[i]);  
    145.                 }  
    146.             }  
    147.         }  
    148.           
    149.         return result.toString().toLowerCase();  
    150.     }  
    151.       
    152.     public static String chineseToPinYinS(String chineseCharacter) throws BadHanyuPinyinOutputFormatCombination{  
    153.         if(StringUtils.isEmpty(chineseCharacter)){  
    154.             return null;  
    155.         }  
    156.           
    157.         char[] chs = chineseCharacter.toCharArray();  
    158.           
    159.         StringBuilder result = new StringBuilder();  
    160.           
    161.         for(int i=0;i<chs.length;i++){  
    162.             String[] arr = chineseToPinYin(chs[i]);  
    163.             if(arr==null){  
    164.                 result.append("");  
    165.             }else if(arr.length==1){  
    166.                 result.append(arr[0].charAt(0));  
    167.             }else if(arr[0].equals(arr[1])){  
    168.                 result.append(arr[0].charAt(0));  
    169.             }else{  
    170.                   
    171.                 String prim = chineseCharacter.substring(i, i+1);  
    172. //              System.out.println("prim="+prim+"**i="+i);  
    173.                   
    174.                 String lst = null,rst = null;  
    175.                   
    176.                 if(i<=chineseCharacter.length()-2){  
    177.                     rst = chineseCharacter.substring(i,i+2);  
    178.                 }  
    179.                 if(i>=1 && i+1<=chineseCharacter.length()){  
    180.                     lst = chineseCharacter.substring(i-1,i+1);  
    181.                 }  
    182.                   
    183. //              System.out.println("lst="+lst+"**rst="+rst);  
    184.                   
    185.                 String answer = null;  
    186.                 for (String py : arr) {  
    187.                       
    188.                     if(StringUtils.isEmpty(py)){  
    189.                         continue;  
    190.                     }  
    191.                       
    192.                     if((lst!=null && py.equals(dictionary.get(lst))) ||  
    193.                             (rst!=null && py.equals(dictionary.get(rst)))){  
    194.                         answer = py;  
    195. //                      System.out.println("get it,answer="+answer+",i="+i+"**break");  
    196.                         break;  
    197.                     }  
    198.                       
    199.                     if(py.equals(dictionary.get(prim))){  
    200.                         answer = py;  
    201. //                      System.out.println("get it,answer="+answer+",i="+i+"**prim="+prim);  
    202.                     }  
    203.                 }  
    204.                 if(answer!=null){  
    205.                     result.append(answer.charAt(0));  
    206.                 }else{  
    207.                     logger.warn("no answer ch="+chs[i]);  
    208.                 }  
    209.             }  
    210.         }  
    211.           
    212.         return result.toString().toLowerCase();  
    213.     }  
    214.           
    215. }  



    测试代码

    [java] view plain copy
    1. package com.ricky.java.suggestion.test;  
    2.   
    3. import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;  
    4.   
    5. import com.ricky.java.suggestion.util.PinyinUtils;  
    6.   
    7. public class PinyinTest {  
    8.   
    9.     /** 
    10.      * @param args 
    11.      */  
    12.     public static void main(String[] args) {  
    13.   
    14.         try {  
    15.               
    16. //          String str = "长沙绿爱旅行";  
    17.             String str = "中信银行(长沙旅行社分行)";  
    18.               
    19.             System.out.println(str+" pyf="+PinyinUtils.chineseToPinYinF(str));  
    20.             System.out.println(str + " pys="+PinyinUtils.chineseToPinYinS(str));  
    21.               
    22.         } catch (BadHanyuPinyinOutputFormatCombination e) {  
    23.             e.printStackTrace();  
    24.         }  
    25.     }  
    26.   
    27. }  


    执行结果

    中信银行(长沙旅行社分行) pyf=zhongxinyinhang(changshalvxingshefenhang)
    中信银行(长沙旅行社分行) pys=zxyh(cslxsfh)




    展开全文
  • 多音字重组成新的词语句子

    千次阅读 2018-01-03 09:22:50
    最近要做一个根据拼音检索数据的功能,但是的汉字是多音字,导致一个汉字对应多个拼音。比如‘’重庆银行‘’就是 (chong,zhong) 和(hang,xing)。这两个排列组合要得到。所以问题就是, 比如 [a,b,c],[b],...
  • js 通讯录(多音字

    千次阅读 2019-03-21 20:10:55
    找到了一个例子,便拿来使用,开发中发现了例子存在的一些问题(人员数组没有排序,多音字没处理好),自己把问题给处理了,发出来给需要的人儿,也留着以后需要。 参考文章:...
  • thinkphp5整合系列之汉字转拼音完美支持多音字1.进入thinkphp5项目的根目录,用composer 安装扩展2.接下来需要做的事就是在控制器中引入 /vendor/overtrue/pinyin/src/Pinyin.php 文件里面的Pinyn这个类 项目需求,...
  • 联系人姓名的多音字的匹配

    千次阅读 2014-07-08 17:26:44
    联系人姓名的多音字的匹配 Eg:百家姓"翟"显示在D分组中,应该是显示在Z分组   详细操作步骤: 1.创建"翟"姓联系人 2.查看联系人列表中该联系人的位置   测试结果: 2.该联系人显示在D分组中   期望结果...
  • 我用过的mysql 在对省份排序时的sql: ...但是一个问题,多音字的识别问题 比如重庆,一直排在最后,数据库识别的是zhong 然后一直在想编码问题,思路方向错了,一直想不明白如何解决多音字,后来…… 发
  • ElasticSearch pinyin分词支持多音字

    千次阅读 2019-03-28 19:29:06
    ElasticSearch pinyin分词支持多音字 背景 我们一个搜索业务底层采用ElasticSearch作为搜索引擎,在索引的过程中,使用了ik中文分词、拼音分词、同义词等多种分词器。ES和各种插件的组合已经能满足我们线上90%的...
  • 汉字转拼音类(多音字

    万次阅读 2016-10-20 10:23:00
    缘由:根据姓名创建账号,存在生僻字以及多音字 做法:自己根据网上信息自己写了类,词库可能不完整(有待补充) 其他不多说了,先上代码如下: using System; using System.Collections.Generic; using ...
  • 汉字字词转拼音接口(支持多音字)

    千次阅读 2014-03-27 16:07:43
    汉字字词转拼音接口(支持多音字) 用php写的一个在线汉字字词转拼音API,支持90%+的多音字词,可选纯字母或带音调。 参数: wd:待转汉字或词语或句子(不建议句子) s:s=1 带音调 s=0纯字母 例:...
  • java解决拼音多音字问题

    千次阅读 2019-01-08 15:14:20
    https://blog.csdn.net/top_code/article/details/39641615
  • 汉语随着时间的演变,因词义词性不同,出现了很多多音字,心田花开将会整理100多个常见多音字希望对考生有所帮助。 心田花开——100个常见多音字 父母希望通过家庭教育让自己的孩子获得更多,相信通过...
  • T9 搜索联系人分析与实现(支持多音字)》,里面详细地分析了字符串数据(可能含汉字)的解析与匹配。  其实此次的Qwerty键盘搜索的数据解析与T9键盘搜索的数据解析基本相似,甚至更容易些,少了将解析出的拼音转换为对应...
  • C#汉字转拼音(支持多音字

    千次阅读 2018-06-14 10:07:27
    C#汉字转拼音(支持多音字)阅读目录首先在nuget引用对应的包简单的demo汉字转拼音类封装源码分享 之前由于项目需要,中间需要一个汉字转拼音和首拼的功能来做查询,感觉这种功能基本已经成熟化了,于是查找了相关...
  • 首先,下载多音字字典文件: 下载字典 import java . io . BufferedReader ; import java . io . File ; import java . io . FileInputStream ; import java . io . FileNotFoundException ; import ...
  • 中文字典排序与多音字处理

    千次阅读 2018-08-24 18:16:44
    这里就是遇到了多音字这个坑,把chong qing yin hang理解为了zhong qing yin hang。 pinyin4j实现 依赖包 使用pinyin4j需要引入依赖包 < dependency > < groupId > com.belerweb groupId > ...
  • pinyin4j使用示例(支持多音字

    千次阅读 2017-09-15 10:18:44
    pinyin4j能够根据中文字符获取其对应的拼音,而且拼音的格式可以定制。 pinyin4j是一个支持将中文转换到拼音的Java开源类库。 ...支持简体中文和繁体中文字符;...支持多音字,即可以获取一个中文
  • T9 搜索联系人分析与实现(支持多音字)》 《android Qwerty 键盘搜索联系人分析与实现(支持多音字)》  也详细分析了T9搜索数据解析与匹配,Qwerty搜索的数据解析与匹配与T9类似,详细分析见《android T9 搜索联系人...
  • iOS 中文转拼音 多音字处理

    千次阅读 2016-05-29 15:01:54
    //*string是要转换的字符串*/ - (NSString *)transformMandarinToLatin:(NSString *)string {  /*复制出一个可变的对象*/  NSMutableString *preString = ... /*转换成成带 调的拼音*/  CFStringTransfor
  • 生僻姓(多音字姓)

    千次阅读 2017-07-22 17:49:17
    1. 生僻 覃(qín):做姓时,一般读作 qín 谌(chén)龙; 呙(guō)莉; 甯:作为姓氏时读作四声 “甯,同“宁”;基本字义平安,安定 2. 多音 ...只在西北地区,读作“xì”,其他地区读作“huì” ...
  • 使用JPinyin,可以实现汉字转换为拼音,并自动识别常用多音字,还支持简体转换为繁体,检查是否为简体,是否为繁体,是否为中文字符等功能,下面一段代码简单列举了下汉字转换拼音及简体转换繁体 package ...
  • Android 联系人名字多音字的处理方法

    千次阅读 2013-11-15 15:54:19
    前言  欢迎大家我分享和推荐好用的代码段~~ 声明  欢迎转载,但请保留文章原始出处:  CSDN:http://www.csdn.net  雨季o莫忧离:... 正文   ...Android在处理多音字的时候使用的是HanziToPinyin.java这个类,
  • T9搜索库&T9搜索联系人Demo(支持多音字):将T9搜索数据解析和匹配接口制作成库,并演示 android  T9搜索联系人项目使用此库. 代码链接: Github: https://github.com/handsomezhou/T9SearchLibrary CSDN:...
  • 网上查到的版本不支持多音字提取,以前用过一个JS的支持多音字提取的函数,就把PHP版本和JS版本综合了一下,写了个类,希望对开发者有用。 //示例 $m=new makePy; // $m->code='GBK'; //设定编码类别...
  • Java方面PinYin4j开源项目获取汉字的拼音,但是对多音字处理的不好,自己研究了一下,终于给解决了。在这里跟大家分享一下!     工程目录结构如下   原理:将可能出现的多音字 词组
  • 比如一个字段存 北京 上海 重庆 , 正常排序北京 重庆 上海 , 但是oracle把chongqing看成zhongqing , 排到最后了, 请问解决办法吗,

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 355,786
精华内容 142,314
关键字:

多音字的都有哪些