love fish大鵬一曰同風起,扶搖直上九萬里

          常用鏈接

          統計

          積分與排名

          friends

          link

          最新評論

          通過漢字取得拼音Java版(轉)

          現在想到的方法有兩種:
          1,取得的漢字拼音對照表,然後做成map.一個GB2312的對照表見這里:
          http://zh.transwiki.org/wiki/index.php/GB2312%E6%B1%89%E5%AD%97%E6%8B%BC%E9%9F%B3%E5%AF%B9%E7%85%A7%E8%A1%A8
          2,這個方法看起來好,效果一般;
          ??1????private?static?int[]?pyvalue?=?new?int[]?{?-20319,?-20317,?-20304,?-20295,
          ??2????????????-20292,?-20283,?-20265,?-20257,?-20242,?-20230,?-20051,?-20036,
          ??3????????????-20032,?-20026,?-20002,?-19990,?-19986,?-19982,?-19976,?-19805,
          ??4????????????-19784,?-19775,?-19774,?-19763,?-19756,?-19751,?-19746,?-19741,
          ??5????????????-19739,?-19728,?-19725,?-19715,?-19540,?-19531,?-19525,?-19515,
          ??6????????????-19500,?-19484,?-19479,?-19467,?-19289,?-19288,?-19281,?-19275,
          ??7????????????-19270,?-19263,?-19261,?-19249,?-19243,?-19242,?-19238,?-19235,
          ??8????????????-19227,?-19224,?-19218,?-19212,?-19038,?-19023,?-19018,?-19006,
          ??9????????????-19003,?-18996,?-18977,?-18961,?-18952,?-18783,?-18774,?-18773,
          ?10????????????-18763,?-18756,?-18741,?-18735,?-18731,?-18722,?-18710,?-18697,
          ?11????????????-18696,?-18526,?-18518,?-18501,?-18490,?-18478,?-18463,?-18448,
          ?12????????????-18447,?-18446,?-18239,?-18237,?-18231,?-18220,?-18211,?-18201,
          ?13????????????-18184,?-18183,?-18181,?-18012,?-17997,?-17988,?-17970,?-17964,
          ?14????????????-17961,?-17950,?-17947,?-17931,?-17928,?-17922,?-17759,?-17752,
          ?15????????????-17733,?-17730,?-17721,?-17703,?-17701,?-17697,?-17692,?-17683,
          ?16????????????-17676,?-17496,?-17487,?-17482,?-17468,?-17454,?-17433,?-17427,
          ?17????????????-17417,?-17202,?-17185,?-16983,?-16970,?-16942,?-16915,?-16733,
          ?18????????????-16708,?-16706,?-16689,?-16664,?-16657,?-16647,?-16474,?-16470,
          ?19????????????-16465,?-16459,?-16452,?-16448,?-16433,?-16429,?-16427,?-16423,
          ?20????????????-16419,?-16412,?-16407,?-16403,?-16401,?-16393,?-16220,?-16216,
          ?21????????????-16212,?-16205,?-16202,?-16187,?-16180,?-16171,?-16169,?-16158,
          ?22????????????-16155,?-15959,?-15958,?-15944,?-15933,?-15920,?-15915,?-15903,
          ?23????????????-15889,?-15878,?-15707,?-15701,?-15681,?-15667,?-15661,?-15659,
          ?24????????????-15652,?-15640,?-15631,?-15625,?-15454,?-15448,?-15436,?-15435,
          ?25????????????-15419,?-15416,?-15408,?-15394,?-15385,?-15377,?-15375,?-15369,
          ?26????????????-15363,?-15362,?-15183,?-15180,?-15165,?-15158,?-15153,?-15150,
          ?27????????????-15149,?-15144,?-15143,?-15141,?-15140,?-15139,?-15128,?-15121,
          ?28????????????-15119,?-15117,?-15110,?-15109,?-14941,?-14937,?-14933,?-14930,
          ?29????????????-14929,?-14928,?-14926,?-14922,?-14921,?-14914,?-14908,?-14902,
          ?30????????????-14894,?-14889,?-14882,?-14873,?-14871,?-14857,?-14678,?-14674,
          ?31????????????-14670,?-14668,?-14663,?-14654,?-14645,?-14630,?-14594,?-14429,
          ?32????????????-14407,?-14399,?-14384,?-14379,?-14368,?-14355,?-14353,?-14345,
          ?33????????????-14170,?-14159,?-14151,?-14149,?-14145,?-14140,?-14137,?-14135,
          ?34????????????-14125,?-14123,?-14122,?-14112,?-14109,?-14099,?-14097,?-14094,
          ?35????????????-14092,?-14090,?-14087,?-14083,?-13917,?-13914,?-13910,?-13907,
          ?36????????????-13906,?-13905,?-13896,?-13894,?-13878,?-13870,?-13859,?-13847,
          ?37????????????-13831,?-13658,?-13611,?-13601,?-13406,?-13404,?-13400,?-13398,
          ?38????????????-13395,?-13391,?-13387,?-13383,?-13367,?-13359,?-13356,?-13343,
          ?39????????????-13340,?-13329,?-13326,?-13318,?-13147,?-13138,?-13120,?-13107,
          ?40????????????-13096,?-13095,?-13091,?-13076,?-13068,?-13063,?-13060,?-12888,
          ?41????????????-12875,?-12871,?-12860,?-12858,?-12852,?-12849,?-12838,?-12831,
          ?42????????????-12829,?-12812,?-12802,?-12607,?-12597,?-12594,?-12585,?-12556,
          ?43????????????-12359,?-12346,?-12320,?-12300,?-12120,?-12099,?-12089,?-12074,
          ?44????????????-12067,?-12058,?-12039,?-11867,?-11861,?-11847,?-11831,?-11798,
          ?45????????????-11781,?-11604,?-11589,?-11536,?-11358,?-11340,?-11339,?-11324,
          ?46????????????-11303,?-11097,?-11077,?-11067,?-11055,?-11052,?-11045,?-11041,
          ?47????????????-11038,?-11024,?-11020,?-11019,?-11018,?-11014,?-10838,?-10832,
          ?48????????????-10815,?-10800,?-10790,?-10780,?-10764,?-10587,?-10544,?-10533,
          ?49????????????-10519,?-10331,?-10329,?-10328,?-10322,?-10315,?-10309,?-10307,
          ?50????????????-10296,?-10281,?-10274,?-10270,?-10262,?-10260,?-10256,?-10254?}
          ;
          ?51
          ?52????private?static?String[]?pystr?=?new?String[]?{?"a",?"ai",?"an",?"ang",
          ?53????????????"ao",?"ba",?"bai",?"ban",?"bang",?"bao",?"bei",?"ben",?"beng",
          ?54????????????"bi",?"bian",?"biao",?"bie",?"bin",?"bing",?"bo",?"bu",?"ca",
          ?55????????????"cai",?"can",?"cang",?"cao",?"ce",?"ceng",?"cha",?"chai",?"chan",
          ?56????????????"chang",?"chao",?"che",?"chen",?"cheng",?"chi",?"chong",?"chou",
          ?57????????????"chu",?"chuai",?"chuan",?"chuang",?"chui",?"chun",?"chuo",?"ci",
          ?58????????????"cong",?"cou",?"cu",?"cuan",?"cui",?"cun",?"cuo",?"da",?"dai",
          ?59????????????"dan",?"dang",?"dao",?"de",?"deng",?"di",?"dian",?"diao",?"die",
          ?60????????????"ding",?"diu",?"dong",?"dou",?"du",?"duan",?"dui",?"dun",?"duo",
          ?61????????????"e",?"en",?"er",?"fa",?"fan",?"fang",?"fei",?"fen",?"feng",?"fo",
          ?62????????????"fou",?"fu",?"ga",?"gai",?"gan",?"gang",?"gao",?"ge",?"gei",?"gen",
          ?63????????????"geng",?"gong",?"gou",?"gu",?"gua",?"guai",?"guan",?"guang",?"gui",
          ?64????????????"gun",?"guo",?"ha",?"hai",?"han",?"hang",?"hao",?"he",?"hei",
          ?65????????????"hen",?"heng",?"hong",?"hou",?"hu",?"hua",?"huai",?"huan",?"huang",
          ?66????????????"hui",?"hun",?"huo",?"ji",?"jia",?"jian",?"jiang",?"jiao",?"jie",
          ?67????????????"jin",?"jing",?"jiong",?"jiu",?"ju",?"juan",?"jue",?"jun",?"ka",
          ?68????????????"kai",?"kan",?"kang",?"kao",?"ke",?"ken",?"keng",?"kong",?"kou",
          ?69????????????"ku",?"kua",?"kuai",?"kuan",?"kuang",?"kui",?"kun",?"kuo",?"la",
          ?70????????????"lai",?"lan",?"lang",?"lao",?"le",?"lei",?"leng",?"li",?"lia",
          ?71????????????"lian",?"liang",?"liao",?"lie",?"lin",?"ling",?"liu",?"long",
          ?72????????????"lou",?"lu",?"lv",?"luan",?"lue",?"lun",?"luo",?"ma",?"mai",?"man",
          ?73????????????"mang",?"mao",?"me",?"mei",?"men",?"meng",?"mi",?"mian",?"miao",
          ?74????????????"mie",?"min",?"ming",?"miu",?"mo",?"mou",?"mu",?"na",?"nai",?"nan",
          ?75????????????"nang",?"nao",?"ne",?"nei",?"nen",?"neng",?"ni",?"nian",?"niang",
          ?76????????????"niao",?"nie",?"nin",?"ning",?"niu",?"nong",?"nu",?"nv",?"nuan",
          ?77????????????"nue",?"nuo",?"o",?"ou",?"pa",?"pai",?"pan",?"pang",?"pao",?"pei",
          ?78????????????"pen",?"peng",?"pi",?"pian",?"piao",?"pie",?"pin",?"ping",?"po",
          ?79????????????"pu",?"qi",?"qia",?"qian",?"qiang",?"qiao",?"qie",?"qin",?"qing",
          ?80????????????"qiong",?"qiu",?"qu",?"quan",?"que",?"qun",?"ran",?"rang",?"rao",
          ?81????????????"re",?"ren",?"reng",?"ri",?"rong",?"rou",?"ru",?"ruan",?"rui",
          ?82????????????"run",?"ruo",?"sa",?"sai",?"san",?"sang",?"sao",?"se",?"sen",
          ?83????????????"seng",?"sha",?"shai",?"shan",?"shang",?"shao",?"she",?"shen",
          ?84????????????"sheng",?"shi",?"shou",?"shu",?"shua",?"shuai",?"shuan",?"shuang",
          ?85????????????"shui",?"shun",?"shuo",?"si",?"song",?"sou",?"su",?"suan",?"sui",
          ?86????????????"sun",?"suo",?"ta",?"tai",?"tan",?"tang",?"tao",?"te",?"teng",
          ?87????????????"ti",?"tian",?"tiao",?"tie",?"ting",?"tong",?"tou",?"tu",?"tuan",
          ?88????????????"tui",?"tun",?"tuo",?"wa",?"wai",?"wan",?"wang",?"wei",?"wen",
          ?89????????????"weng",?"wo",?"wu",?"xi",?"xia",?"xian",?"xiang",?"xiao",?"xie",
          ?90????????????"xin",?"xing",?"xiong",?"xiu",?"xu",?"xuan",?"xue",?"xun",?"ya",
          ?91????????????"yan",?"yang",?"yao",?"ye",?"yi",?"yin",?"ying",?"yo",?"yong",
          ?92????????????"you",?"yu",?"yuan",?"yue",?"yun",?"za",?"zai",?"zan",?"zang",
          ?93????????????"zao",?"ze",?"zei",?"zen",?"zeng",?"zha",?"zhai",?"zhan",?"zhang",
          ?94????????????"zhao",?"zhe",?"zhen",?"zheng",?"zhi",?"zhong",?"zhou",?"zhu",
          ?95????????????"zhua",?"zhuai",?"zhuan",?"zhuang",?"zhui",?"zhun",?"zhuo",?"zi",
          ?96????????????"zong",?"zou",?"zu",?"zuan",?"zui",?"zun",?"zuo"?}
          ;
          ?97
          ?98????public?static?int?getChsAscii(String?chs)?{
          ?99????????int?asc?=?0;
          100????????try?{
          101????????????byte[]?bytes?=?chs.getBytes("gb2312");
          102????????????if?(bytes?==?null?||?bytes.length?>?2?||?bytes.length?<=?0)?{?//?錯誤
          103????????????????//?log
          104????????????????System.out.println("error");
          105????????????}

          106????????????if?(bytes.length?==?1)?{?//?英文字符
          107????????????????asc?=?bytes[0];
          108????????????}

          109????????????if?(bytes.length?==?2)?{?//?中文字符
          110????????????//?System.out.println(bytes[0]);
          111????????????//?System.out.println(bytes[1]);
          112????????????????int?hightByte?=?256?+?bytes[0];
          113????????????????int?lowByte?=?256?+?bytes[1];
          114????????????????asc?=?(256?*?hightByte?+?lowByte)?-?256?*?256;
          115????????????}

          116????????}
          ?catch?(Exception?e)?{
          117????????????e.printStackTrace();
          118????????}

          119????????return?asc;
          120????}

          121
          122????public?static?String?convert(String?str)?{
          123????????String?result?=?null;
          124????????int?ascii?=?getChsAscii(str);
          125//????????System.out.println(ascii);
          126????????if?(ascii?>?0?&&?ascii?<?160)?{
          127????????????result?=?String.valueOf((char)?ascii);
          128????????}
          ?else?{
          129????????????for?(int?i?=?(pyvalue.length?-?1);?i?>=?0;?i--)?{
          130????????????????if?(pyvalue[i]?<=?ascii)?{
          131????????????????????result?=?pystr[i];
          132????????????????????break;
          133????????????????}

          134????????????}

          135????????}

          136????????return?result;
          137????}

          138????public?static?String?getPy1(String?chs)?{
          139????????StringBuffer?py?=?new?StringBuffer();
          140????????String?key,?value;
          141????????for?(int?i?=?0;?i?<?chs.length();?i++)?{
          142????????????key?=?chs.substring(i,?i?+?1);
          143????????????if?(key.getBytes().length?==?2)?{
          144????????????????value?=?(String)?convert(key);
          145????????????????if?(value?==?null)?{
          146????????????????????value?=?"unknown";
          147????????????????}

          148????????????}
          ?else?{
          149????????????????value?=?key;
          150????????????}

          151
          152????????????py.append(value);
          153????????}

          154????????return?py.toString();
          155????}





          #?re: 通過漢字取得拼音Java版 2007-01-05 10:34 yerba

          第二種方法,取不到一些特殊漢字,比如常用的"琪",就取成了“zuo”不知道是不是你得數據的問題。
          另外,你的兩種方法都不能做到多音字的識別。要做到多音字的識別,我的方法是用微軟拼音輸入法字庫導出來,里面包括了所有的讀音。??回復??更多評論??

          #?re: 通過漢字取得拼音Java版 2007-01-05 11:15 Ivan Chen

          試試pinyin4j:http://pinyin4j.sf.net/
          很不錯。??回復??更多評論??

          #?re: 通過漢字取得拼音Java版 2007-01-05 12:22 junmy[匿名]

          這里一個.net版本的
          see: http://www.cnblogs.com/jillzhang/archive/2006/10/30/544596.html??回復??更多評論??

          #?re: 通過漢字取得拼音Java版 2007-01-05 16:11 Alex

          不錯,可以參考??回復??更多評論??

          #?re: 通過漢字取得拼音Java版 2007-01-05 22:21 blackbat

          第1種方法是不是全部漢字都可以去到???回復??更多評論??

          #?re: 通過漢字取得拼音Java版 2007-01-07 14:52 slx

          是否能全部取到要看你的字庫有多全??回復??更多評論??

          #?re: 通過漢字取得拼音Java版 2007-01-10 10:00 jyb

          從微軟拼音中導出來的比較全,應該是gbk吧。對于多音字,我想還得看實際情況來處理,如果讓你把一個人的中文姓名、地名轉換為拼音,總不能把多音字的全部讀音對轉換過來吧。重慶--chongqing,重慶--chongzhongqing???回復??更多評論??

          #?re: 通過漢字取得拼音Java版[未登錄]2007-01-19 10:08 Leon

          不錯,大有用處。??回復??更多評論??

          posted on 2007-02-26 09:36 liaojiyong 閱讀(951) 評論(0)  編輯  收藏 所屬分類: Java

          主站蜘蛛池模板: 高雄市| 日喀则市| 调兵山市| 富顺县| 威信县| 绩溪县| 镇赉县| 舒城县| 鄯善县| 吉首市| 克拉玛依市| 武山县| 个旧市| 丹东市| 准格尔旗| 连平县| 札达县| 洛浦县| 屏东市| 东乡| 镶黄旗| 通化市| 怀来县| 拜泉县| 黑龙江省| 巴塘县| 宁津县| 昌图县| 东乌珠穆沁旗| 大化| 平武县| 遵化市| 会同县| 永清县| 策勒县| 社会| 陆良县| 连山| 宝应县| 浏阳市| 于田县|