c#中国語をピンインに変換して、スペースで区切って、全部つづって、漢字の頭文字を取得して、PinyinHelper
25786 ワード
中国語をピンインに変換:
.スペースで区切ることをサポート
.フルスペルサポート
.漢字の頭文字の取得をサポート
.スペースで区切ることをサポート
.フルスペルサポート
.漢字の頭文字の取得をサポート
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
using System.Text.RegularExpressions;
///
///
///
public class PinyinHelper
{
//
private static Hashtable _pinyinHash;
//
private static Regex regWord = new Regex("[a-zA-Z]");
//
private static Regex regNum = new Regex("[0-9]");
#region Hashtable
static PinyinHelper()
{
_pinyinHash = new Hashtable();
_pinyinHash.Add(-20319, "a");
_pinyinHash.Add(-20317, "ai");
_pinyinHash.Add(-20304, "an");
_pinyinHash.Add(-20295, "ang");
_pinyinHash.Add(-20292, "ao");
_pinyinHash.Add(-20283, "ba");
_pinyinHash.Add(-20265, "bai");
_pinyinHash.Add(-20257, "ban");
_pinyinHash.Add(-20242, "bang");
_pinyinHash.Add(-20230, "bao");
_pinyinHash.Add(-20051, "bei");
_pinyinHash.Add(-20036, "ben");
_pinyinHash.Add(-20032, "beng");
_pinyinHash.Add(-20026, "bi");
_pinyinHash.Add(-20002, "bian");
_pinyinHash.Add(-19990, "biao");
_pinyinHash.Add(-19986, "bie");
_pinyinHash.Add(-19982, "bin");
_pinyinHash.Add(-19976, "bing");
_pinyinHash.Add(-19805, "bo");
_pinyinHash.Add(-19784, "bu");
_pinyinHash.Add(-19775, "ca");
_pinyinHash.Add(-19774, "cai");
_pinyinHash.Add(-19763, "can");
_pinyinHash.Add(-19756, "cang");
_pinyinHash.Add(-19751, "cao");
_pinyinHash.Add(-19746, "ce");
_pinyinHash.Add(-19741, "ceng");
_pinyinHash.Add(-19739, "cha");
_pinyinHash.Add(-19728, "chai");
_pinyinHash.Add(-19725, "chan");
_pinyinHash.Add(-19715, "chang");
_pinyinHash.Add(-19540, "chao");
_pinyinHash.Add(-19531, "che");
_pinyinHash.Add(-19525, "chen");
_pinyinHash.Add(-19515, "cheng");
_pinyinHash.Add(-19500, "chi");
_pinyinHash.Add(-19484, "chong");
_pinyinHash.Add(-19479, "chou");
_pinyinHash.Add(-19467, "chu");
_pinyinHash.Add(-19289, "chuai");
_pinyinHash.Add(-19288, "chuan");
_pinyinHash.Add(-19281, "chuang");
_pinyinHash.Add(-19275, "chui");
_pinyinHash.Add(-19270, "chun");
_pinyinHash.Add(-19263, "chuo");
_pinyinHash.Add(-19261, "ci");
_pinyinHash.Add(-19249, "cong");
_pinyinHash.Add(-19243, "cou");
_pinyinHash.Add(-19242, "cu");
_pinyinHash.Add(-19238, "cuan");
_pinyinHash.Add(-19235, "cui");
_pinyinHash.Add(-19227, "cun");
_pinyinHash.Add(-19224, "cuo");
_pinyinHash.Add(-19218, "da");
_pinyinHash.Add(-19212, "dai");
_pinyinHash.Add(-19038, "dan");
_pinyinHash.Add(-19023, "dang");
_pinyinHash.Add(-19018, "dao");
_pinyinHash.Add(-19006, "de");
_pinyinHash.Add(-19003, "deng");
_pinyinHash.Add(-18996, "di");
_pinyinHash.Add(-18977, "dian");
_pinyinHash.Add(-18961, "diao");
_pinyinHash.Add(-18952, "die");
_pinyinHash.Add(-18783, "ding");
_pinyinHash.Add(-18774, "diu");
_pinyinHash.Add(-18773, "dong");
_pinyinHash.Add(-18763, "dou");
_pinyinHash.Add(-18756, "du");
_pinyinHash.Add(-18741, "duan");
_pinyinHash.Add(-18735, "dui");
_pinyinHash.Add(-18731, "dun");
_pinyinHash.Add(-18722, "duo");
_pinyinHash.Add(-18710, "e");
_pinyinHash.Add(-18697, "en");
_pinyinHash.Add(-18696, "er");
_pinyinHash.Add(-18526, "fa");
_pinyinHash.Add(-18518, "fan");
_pinyinHash.Add(-18501, "fang");
_pinyinHash.Add(-18490, "fei");
_pinyinHash.Add(-18478, "fen");
_pinyinHash.Add(-18463, "feng");
_pinyinHash.Add(-18448, "fo");
_pinyinHash.Add(-18447, "fou");
_pinyinHash.Add(-18446, "fu");
_pinyinHash.Add(-18239, "ga");
_pinyinHash.Add(-18237, "gai");
_pinyinHash.Add(-18231, "gan");
_pinyinHash.Add(-18220, "gang");
_pinyinHash.Add(-18211, "gao");
_pinyinHash.Add(-18201, "ge");
_pinyinHash.Add(-18184, "gei");
_pinyinHash.Add(-18183, "gen");
_pinyinHash.Add(-18181, "geng");
_pinyinHash.Add(-18012, "gong");
_pinyinHash.Add(-17997, "gou");
_pinyinHash.Add(-17988, "gu");
_pinyinHash.Add(-17970, "gua");
_pinyinHash.Add(-17964, "guai");
_pinyinHash.Add(-17961, "guan");
_pinyinHash.Add(-17950, "guang");
_pinyinHash.Add(-17947, "gui");
_pinyinHash.Add(-17931, "gun");
_pinyinHash.Add(-17928, "guo");
_pinyinHash.Add(-17922, "ha");
_pinyinHash.Add(-17759, "hai");
_pinyinHash.Add(-17752, "han");
_pinyinHash.Add(-17733, "hang");
_pinyinHash.Add(-17730, "hao");
_pinyinHash.Add(-17721, "he");
_pinyinHash.Add(-17703, "hei");
_pinyinHash.Add(-17701, "hen");
_pinyinHash.Add(-17697, "heng");
_pinyinHash.Add(-17692, "hong");
_pinyinHash.Add(-17683, "hou");
_pinyinHash.Add(-17676, "hu");
_pinyinHash.Add(-17496, "hua");
_pinyinHash.Add(-17487, "huai");
_pinyinHash.Add(-17482, "huan");
_pinyinHash.Add(-17468, "huang");
_pinyinHash.Add(-17454, "hui");
_pinyinHash.Add(-17433, "hun");
_pinyinHash.Add(-17427, "huo");
_pinyinHash.Add(-17417, "ji");
_pinyinHash.Add(-17202, "jia");
_pinyinHash.Add(-17185, "jian");
_pinyinHash.Add(-16983, "jiang");
_pinyinHash.Add(-16970, "jiao");
_pinyinHash.Add(-16942, "jie");
_pinyinHash.Add(-16915, "jin");
_pinyinHash.Add(-16733, "jing");
_pinyinHash.Add(-16708, "jiong");
_pinyinHash.Add(-16706, "jiu");
_pinyinHash.Add(-16689, "ju");
_pinyinHash.Add(-16664, "juan");
_pinyinHash.Add(-16657, "jue");
_pinyinHash.Add(-16647, "jun");
_pinyinHash.Add(-16474, "ka");
_pinyinHash.Add(-16470, "kai");
_pinyinHash.Add(-16465, "kan");
_pinyinHash.Add(-16459, "kang");
_pinyinHash.Add(-16452, "kao");
_pinyinHash.Add(-16448, "ke");
_pinyinHash.Add(-16433, "ken");
_pinyinHash.Add(-16429, "keng");
_pinyinHash.Add(-16427, "kong");
_pinyinHash.Add(-16423, "kou");
_pinyinHash.Add(-16419, "ku");
_pinyinHash.Add(-16412, "kua");
_pinyinHash.Add(-16407, "kuai");
_pinyinHash.Add(-16403, "kuan");
_pinyinHash.Add(-16401, "kuang");
_pinyinHash.Add(-16393, "kui");
_pinyinHash.Add(-16220, "kun");
_pinyinHash.Add(-16216, "kuo");
_pinyinHash.Add(-16212, "la");
_pinyinHash.Add(-16205, "lai");
_pinyinHash.Add(-16202, "lan");
_pinyinHash.Add(-16187, "lang");
_pinyinHash.Add(-16180, "lao");
_pinyinHash.Add(-16171, "le");
_pinyinHash.Add(-16169, "lei");
_pinyinHash.Add(-16158, "leng");
_pinyinHash.Add(-16155, "li");
_pinyinHash.Add(-15959, "lia");
_pinyinHash.Add(-15958, "lian");
_pinyinHash.Add(-15944, "liang");
_pinyinHash.Add(-15933, "liao");
_pinyinHash.Add(-15920, "lie");
_pinyinHash.Add(-15915, "lin");
_pinyinHash.Add(-15903, "ling");
_pinyinHash.Add(-15889, "liu");
_pinyinHash.Add(-15878, "long");
_pinyinHash.Add(-15707, "lou");
_pinyinHash.Add(-15701, "lu");
_pinyinHash.Add(-15681, "lv");
_pinyinHash.Add(-15667, "luan");
_pinyinHash.Add(-15661, "lue");
_pinyinHash.Add(-15659, "lun");
_pinyinHash.Add(-15652, "luo");
_pinyinHash.Add(-15640, "ma");
_pinyinHash.Add(-15631, "mai");
_pinyinHash.Add(-15625, "man");
_pinyinHash.Add(-15454, "mang");
_pinyinHash.Add(-15448, "mao");
_pinyinHash.Add(-15436, "me");
_pinyinHash.Add(-15435, "mei");
_pinyinHash.Add(-15419, "men");
_pinyinHash.Add(-15416, "meng");
_pinyinHash.Add(-15408, "mi");
_pinyinHash.Add(-15394, "mian");
_pinyinHash.Add(-15385, "miao");
_pinyinHash.Add(-15377, "mie");
_pinyinHash.Add(-15375, "min");
_pinyinHash.Add(-15369, "ming");
_pinyinHash.Add(-15363, "miu");
_pinyinHash.Add(-15362, "mo");
_pinyinHash.Add(-15183, "mou");
_pinyinHash.Add(-15180, "mu");
_pinyinHash.Add(-15165, "na");
_pinyinHash.Add(-15158, "nai");
_pinyinHash.Add(-15153, "nan");
_pinyinHash.Add(-15150, "nang");
_pinyinHash.Add(-15149, "nao");
_pinyinHash.Add(-15144, "ne");
_pinyinHash.Add(-15143, "nei");
_pinyinHash.Add(-15141, "nen");
_pinyinHash.Add(-15140, "neng");
_pinyinHash.Add(-15139, "ni");
_pinyinHash.Add(-15128, "nian");
_pinyinHash.Add(-15121, "niang");
_pinyinHash.Add(-15119, "niao");
_pinyinHash.Add(-15117, "nie");
_pinyinHash.Add(-15110, "nin");
_pinyinHash.Add(-15109, "ning");
_pinyinHash.Add(-14941, "niu");
_pinyinHash.Add(-14937, "nong");
_pinyinHash.Add(-14933, "nu");
_pinyinHash.Add(-14930, "nv");
_pinyinHash.Add(-14929, "nuan");
_pinyinHash.Add(-14928, "nue");
_pinyinHash.Add(-14926, "nuo");
_pinyinHash.Add(-14922, "o");
_pinyinHash.Add(-14921, "ou");
_pinyinHash.Add(-14914, "pa");
_pinyinHash.Add(-14908, "pai");
_pinyinHash.Add(-14902, "pan");
_pinyinHash.Add(-14894, "pang");
_pinyinHash.Add(-14889, "pao");
_pinyinHash.Add(-14882, "pei");
_pinyinHash.Add(-14873, "pen");
_pinyinHash.Add(-14871, "peng");
_pinyinHash.Add(-14857, "pi");
_pinyinHash.Add(-14678, "pian");
_pinyinHash.Add(-14674, "piao");
_pinyinHash.Add(-14670, "pie");
_pinyinHash.Add(-14668, "pin");
_pinyinHash.Add(-14663, "ping");
_pinyinHash.Add(-14654, "po");
_pinyinHash.Add(-14645, "pu");
_pinyinHash.Add(-14630, "qi");
_pinyinHash.Add(-14594, "qia");
_pinyinHash.Add(-14429, "qian");
_pinyinHash.Add(-14407, "qiang");
_pinyinHash.Add(-14399, "qiao");
_pinyinHash.Add(-14384, "qie");
_pinyinHash.Add(-14379, "qin");
_pinyinHash.Add(-14368, "qing");
_pinyinHash.Add(-14355, "qiong");
_pinyinHash.Add(-14353, "qiu");
_pinyinHash.Add(-14345, "qu");
_pinyinHash.Add(-14170, "quan");
_pinyinHash.Add(-14159, "que");
_pinyinHash.Add(-14151, "qun");
_pinyinHash.Add(-14149, "ran");
_pinyinHash.Add(-14145, "rang");
_pinyinHash.Add(-14140, "rao");
_pinyinHash.Add(-14137, "re");
_pinyinHash.Add(-14135, "ren");
_pinyinHash.Add(-14125, "reng");
_pinyinHash.Add(-14123, "ri");
_pinyinHash.Add(-14122, "rong");
_pinyinHash.Add(-14112, "rou");
_pinyinHash.Add(-14109, "ru");
_pinyinHash.Add(-14099, "ruan");
_pinyinHash.Add(-14097, "rui");
_pinyinHash.Add(-14094, "run");
_pinyinHash.Add(-14092, "ruo");
_pinyinHash.Add(-14090, "sa");
_pinyinHash.Add(-14087, "sai");
_pinyinHash.Add(-14083, "san");
_pinyinHash.Add(-13917, "sang");
_pinyinHash.Add(-13914, "sao");
_pinyinHash.Add(-13910, "se");
_pinyinHash.Add(-13907, "sen");
_pinyinHash.Add(-13906, "seng");
_pinyinHash.Add(-13905, "sha");
_pinyinHash.Add(-13896, "shai");
_pinyinHash.Add(-13894, "shan");
_pinyinHash.Add(-13878, "shang");
_pinyinHash.Add(-13870, "shao");
_pinyinHash.Add(-13859, "she");
_pinyinHash.Add(-13847, "shen");
_pinyinHash.Add(-13831, "sheng");
_pinyinHash.Add(-13658, "shi");
_pinyinHash.Add(-13611, "shou");
_pinyinHash.Add(-13601, "shu");
_pinyinHash.Add(-13406, "shua");
_pinyinHash.Add(-13404, "shuai");
_pinyinHash.Add(-13400, "shuan");
_pinyinHash.Add(-13398, "shuang");
_pinyinHash.Add(-13395, "shui");
_pinyinHash.Add(-13391, "shun");
_pinyinHash.Add(-13387, "shuo");
_pinyinHash.Add(-13383, "si");
_pinyinHash.Add(-13367, "song");
_pinyinHash.Add(-13359, "sou");
_pinyinHash.Add(-13356, "su");
_pinyinHash.Add(-13343, "suan");
_pinyinHash.Add(-13340, "sui");
_pinyinHash.Add(-13329, "sun");
_pinyinHash.Add(-13326, "suo");
_pinyinHash.Add(-13318, "ta");
_pinyinHash.Add(-13147, "tai");
_pinyinHash.Add(-13138, "tan");
_pinyinHash.Add(-13120, "tang");
_pinyinHash.Add(-13107, "tao");
_pinyinHash.Add(-13096, "te");
_pinyinHash.Add(-13095, "teng");
_pinyinHash.Add(-13091, "ti");
_pinyinHash.Add(-13076, "tian");
_pinyinHash.Add(-13068, "tiao");
_pinyinHash.Add(-13063, "tie");
_pinyinHash.Add(-13060, "ting");
_pinyinHash.Add(-12888, "tong");
_pinyinHash.Add(-12875, "tou");
_pinyinHash.Add(-12871, "tu");
_pinyinHash.Add(-12860, "tuan");
_pinyinHash.Add(-12858, "tui");
_pinyinHash.Add(-12852, "tun");
_pinyinHash.Add(-12849, "tuo");
_pinyinHash.Add(-12838, "wa");
_pinyinHash.Add(-12831, "wai");
_pinyinHash.Add(-12829, "wan");
_pinyinHash.Add(-12812, "wang");
_pinyinHash.Add(-12802, "wei");
_pinyinHash.Add(-12607, "wen");
_pinyinHash.Add(-12597, "weng");
_pinyinHash.Add(-12594, "wo");
_pinyinHash.Add(-12585, "wu");
_pinyinHash.Add(-12556, "xi");
_pinyinHash.Add(-12359, "xia");
_pinyinHash.Add(-12346, "xian");
_pinyinHash.Add(-12320, "xiang");
_pinyinHash.Add(-12300, "xiao");
_pinyinHash.Add(-12120, "xie");
_pinyinHash.Add(-12099, "xin");
_pinyinHash.Add(-12089, "xing");
_pinyinHash.Add(-12074, "xiong");
_pinyinHash.Add(-12067, "xiu");
_pinyinHash.Add(-12058, "xu");
_pinyinHash.Add(-12039, "xuan");
_pinyinHash.Add(-11867, "xue");
_pinyinHash.Add(-11861, "xun");
_pinyinHash.Add(-11847, "ya");
_pinyinHash.Add(-11831, "yan");
_pinyinHash.Add(-11798, "yang");
_pinyinHash.Add(-11781, "yao");
_pinyinHash.Add(-11604, "ye");
_pinyinHash.Add(-11589, "yi");
_pinyinHash.Add(-11536, "yin");
_pinyinHash.Add(-11358, "ying");
_pinyinHash.Add(-11340, "yo");
_pinyinHash.Add(-11339, "yong");
_pinyinHash.Add(-11324, "you");
_pinyinHash.Add(-11303, "yu");
_pinyinHash.Add(-11097, "yuan");
_pinyinHash.Add(-11077, "yue");
_pinyinHash.Add(-11067, "yun");
_pinyinHash.Add(-11055, "za");
_pinyinHash.Add(-11052, "zai");
_pinyinHash.Add(-11045, "zan");
_pinyinHash.Add(-11041, "zang");
_pinyinHash.Add(-11038, "zao");
_pinyinHash.Add(-11024, "ze");
_pinyinHash.Add(-11020, "zei");
_pinyinHash.Add(-11019, "zen");
_pinyinHash.Add(-11018, "zeng");
_pinyinHash.Add(-11014, "zha");
_pinyinHash.Add(-10838, "zhai");
_pinyinHash.Add(-10832, "zhan");
_pinyinHash.Add(-10815, "zhang");
_pinyinHash.Add(-10800, "zhao");
_pinyinHash.Add(-10790, "zhe");
_pinyinHash.Add(-10780, "zhen");
_pinyinHash.Add(-10764, "zheng");
_pinyinHash.Add(-10587, "zhi");
_pinyinHash.Add(-10544, "zhong");
_pinyinHash.Add(-10533, "zhou");
_pinyinHash.Add(-10519, "zhu");
_pinyinHash.Add(-10331, "zhua");
_pinyinHash.Add(-10329, "zhuai");
_pinyinHash.Add(-10328, "zhuan");
_pinyinHash.Add(-10322, "zhuang");
_pinyinHash.Add(-10315, "zhui");
_pinyinHash.Add(-10309, "zhun");
_pinyinHash.Add(-10307, "zhuo");
_pinyinHash.Add(-10296, "zi");
_pinyinHash.Add(-10281, "zong");
_pinyinHash.Add(-10274, "zou");
_pinyinHash.Add(-10270, "zu");
_pinyinHash.Add(-10262, "zuan");
_pinyinHash.Add(-10260, "zui");
_pinyinHash.Add(-10256, "zun");
_pinyinHash.Add(-10254, "zuo");
_pinyinHash.Add(-10247, "zz");
}
#endregion
#region
///
/// , ,
///
///
///
public static string GetPinyin(string chineseChars)
{
byte[] byteArray = System.Text.Encoding.Default.GetBytes(chineseChars);
int byteValue;
StringBuilder sb = new StringBuilder(chineseChars.Length * 4);
for (int i = 0; i < byteArray.Length; i++)
{
byteValue = (int)byteArray[i];
if (byteValue > 160)
{
++i;
if (i >= byteArray.Length)
{
break;
}
byteValue = byteValue * 256 + byteArray[i] - 65536;
sb.Append(GetPinyin(byteValue));
}
else
{
sb.Append((char)byteValue);
}
}
return sb.ToString();
}
#endregion
#region ,
///
/// , , ,
///
///
///
public static string GetPinyinWithSpace(string chineseChars)
{
byte[] byteArray = System.Text.Encoding.Default.GetBytes(chineseChars);
int byteValue;
StringBuilder sb = new StringBuilder(chineseChars.Length * 4);
int idx = 1;
for (int i = 0; i < byteArray.Length; i++)
{
byteValue = (int)byteArray[i];
if (byteValue > 160)
{
++i;
if (i >= byteArray.Length)
{
break;
}
// if
if (idx != 1)
{
sb.Append(" ");
}
byteValue = byteValue * 256 + byteArray[i] - 65536;
sb.Append(GetPinyin(byteValue));
// if
if (!((i + 1) >= byteArray.Length))
{
int _bv = (int)byteArray[i + 1];
if (!(_bv > 160))
{
sb.Append(" ");
}
}
}
else
{
sb.Append((char)byteValue);
}
idx++;
}
return sb.ToString();
}
#endregion
#region
///
/// , ,
///
///
///
public static string GetShortPinyin(string chineseChars)
{
byte[] byteArray = System.Text.Encoding.Default.GetBytes(chineseChars);
int byteValue;
StringBuilder sb = new StringBuilder(chineseChars.Length * 4);
for (int i = 0; i < byteArray.Length; i++)
{
byteValue = (int)byteArray[i];
if (byteValue > 160)
{
++i;
if (i >= byteArray.Length)
{
break;
}
byteValue = byteValue * 256 + byteArray[i] - 65536;
string charPinyin = GetPinyin(byteValue);
if (!string.IsNullOrEmpty(charPinyin))
{
charPinyin = new string(charPinyin[0], 1);
}
sb.Append(charPinyin);
}
else
{
sb.Append((char)byteValue);
}
}
return sb.ToString();
}
#endregion
#region
///
///
///
///
///
private static string GetPinyin(int charValue)
{
//【】、‘,。、:“”《》?!¥……()—
if (charValue < -20319 || charValue > -10247)
{
return "";
}
while (!_pinyinHash.ContainsKey(charValue))
{
charValue--;
}
return (string)_pinyinHash[charValue];
}
#endregion
#region
///
///
///
///
///
public static string GetFirstWord(string pingyin)
{
pingyin = pingyin.Trim();
string word = "";
for (int i = 0; i < pingyin.Length; i++)
{
word = pingyin.Substring(i, 1);
if (regWord.IsMatch(word))
{
break;
}
if (regNum.IsMatch(word))
{
if (word == "0")
{
word = "l";
}
else if (word == "1")
{
word = "y";
}
else if (word == "2")
{
word = "e";
}
else if (word == "3")
{
word = "s";
}
else if (word == "4")
{
word = "s";
}
else if (word == "5")
{
word = "w";
}
else if (word == "6")
{
word = "l";
}
else if (word == "7")
{
word = "q";
}
else if (word == "8")
{
word = "b";
}
else if (word == "9")
{
word = "q";
}
else
{
continue;
}
break;
}
}
return word;
}
#endregion
}