531 lines
6.8 KiB
C#
531 lines
6.8 KiB
C#
using System.Collections.Generic;
|
||
using System.Linq;
|
||
using System.Text.RegularExpressions;
|
||
|
||
namespace RoadFlow.Pinyin.data
|
||
{
|
||
/// <summary>
|
||
/// 使用姓名数据库查询
|
||
/// </summary>
|
||
internal class NameDB
|
||
{
|
||
// 实例
|
||
private static NameDB instance;
|
||
|
||
private readonly Dictionary<string, string> map;
|
||
|
||
/// <summary>
|
||
/// 获取单实例
|
||
/// </summary>
|
||
public static NameDB Instance
|
||
{
|
||
get { return instance ?? (instance = new NameDB()); }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 私有构造
|
||
/// </summary>
|
||
private NameDB()
|
||
{
|
||
map = new Dictionary<string, string>();
|
||
|
||
loadResource();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 加载拼音库资源
|
||
/// </summary>
|
||
private void loadResource()
|
||
{
|
||
foreach (var buf in DATA.Split('\n').Where(buf => !string.IsNullOrEmpty(buf)))
|
||
{
|
||
var temp = buf.Split('=');
|
||
// 取姓
|
||
var name = temp[0];
|
||
|
||
// 取拼音串 小心有个 \r 的回车符号
|
||
var pinyin = temp[1].Trim();
|
||
|
||
map.Add(name, pinyin.Replace('-', ' '));
|
||
}
|
||
}
|
||
/// <summary>
|
||
/// 获取汉字的拼音
|
||
/// </summary>
|
||
/// <param name="hanzi"></param>
|
||
/// <returns>若未找到汉字拼音,则返回空</returns>
|
||
public string GetPinyin(string hanzi)
|
||
{
|
||
return map.ContainsKey(hanzi) ? map[hanzi] : null;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 根据拼音获取汉字
|
||
/// </summary>
|
||
/// <param name="pinyin">拼音</param>
|
||
/// <param name="matchAll">是否全部匹配,为true时,匹配整个拼音,否则匹配开头字符,此参数用于告知传入的拼音是完整拼音还是仅仅是声母</param>
|
||
/// <returns></returns>
|
||
public string[] GetHanzi(string pinyin, bool matchAll)
|
||
{
|
||
var reg = new Regex("[0-9]");
|
||
// 完全匹配
|
||
if (matchAll)
|
||
{
|
||
// 查询到匹配的拼音的汉字
|
||
return map.Where(item => reg.Replace(item.Value, "").Equals(pinyin))
|
||
.Select(item => item.Key).ToArray();
|
||
}
|
||
// 匹配开头部分
|
||
else
|
||
{
|
||
// 查询到匹配的拼音的unicode编码
|
||
return map.Where(item => reg.Replace(item.Value, "").StartsWith(pinyin))
|
||
.Select(item => item.Key).ToArray();
|
||
}
|
||
}
|
||
|
||
private const string DATA = @"艾=ai4
|
||
安=an1
|
||
敖=ao2
|
||
巴=ba1
|
||
白=bai2
|
||
柏=bai3
|
||
班=ban1
|
||
包=bao1
|
||
暴=bao4
|
||
鲍=bao4
|
||
贝=bei4
|
||
贲=ben1
|
||
毕=bi4
|
||
边=bian1
|
||
卞=bian4
|
||
别=bie2
|
||
邴=bing3
|
||
薄=bo2
|
||
卜=bu3
|
||
步=bu4
|
||
蔡=cai4
|
||
苍=cang1
|
||
曹=cao2
|
||
岑=cen2
|
||
柴=chai2
|
||
单于=chan2-yu2
|
||
昌=chang1
|
||
常=chang2
|
||
巢=chao2
|
||
晁=chao2
|
||
车=che1
|
||
陈=chen2
|
||
成=cheng2
|
||
程=cheng2
|
||
池=chi2
|
||
充=chong1
|
||
储=chu3
|
||
褚=chu3
|
||
淳于=chun2-yu2
|
||
从=cong2
|
||
崔=cui1
|
||
戴=dai4
|
||
党=dang3
|
||
邓=deng4
|
||
狄=di2
|
||
第五=di4-wu3
|
||
刁=diao1
|
||
丁=ding1
|
||
东方=dong1-fang1
|
||
东=dong1
|
||
董=dong3
|
||
窦=dou4
|
||
都=du1
|
||
堵=du3
|
||
杜=du4
|
||
段=duan4
|
||
鄂=e4
|
||
樊=fan2
|
||
范=fan4
|
||
方=fang1
|
||
房=fang2
|
||
费=fei4
|
||
丰=feng1
|
||
封=feng1
|
||
酆=feng1
|
||
冯=feng2
|
||
凤=feng4
|
||
伏=fu2
|
||
扶=fu2
|
||
福=fu2
|
||
符=fu2
|
||
傅=fu4
|
||
富=fu4
|
||
干=gan1
|
||
甘=gan1
|
||
高=gao1
|
||
郜=gao4
|
||
戈=ge1
|
||
盖=ge3
|
||
葛=ge3
|
||
耿=geng3
|
||
公孙=gong1-sun1
|
||
公羊=gong1-yang2
|
||
公冶=gong1-ye3
|
||
宗政=gong1-ye3
|
||
公=gong1
|
||
宫=gong1
|
||
弓=gong1
|
||
龚=gong1
|
||
巩=gong3
|
||
贡=gong4
|
||
勾=gou1
|
||
古=gu3
|
||
谷=gu3
|
||
顾=gu4
|
||
关=guan1
|
||
管=guan3
|
||
广=guang3
|
||
桂=gui4
|
||
郭=guo1
|
||
国=guo2
|
||
韩=han2
|
||
杭=hang2
|
||
郝=hao3
|
||
何=he2
|
||
和=he2
|
||
赫连=he4-lian2
|
||
贺=he4
|
||
衡=heng2
|
||
弘=hong2
|
||
洪=hong2
|
||
红=hong2
|
||
侯=hou2
|
||
後=hou4
|
||
胡=hu2
|
||
扈=hu4
|
||
花=hua1
|
||
滑=hua2
|
||
华=hua4
|
||
怀=huai2
|
||
桓=huan2
|
||
宦=huan4
|
||
皇甫=huang2-fu3
|
||
黄=huang2
|
||
惠=hui4
|
||
霍=huo4
|
||
姬=ji1
|
||
嵇=ji1
|
||
吉=ji2
|
||
汲=ji2
|
||
纪=ji3
|
||
冀=ji4
|
||
季=ji4
|
||
暨=ji4
|
||
蓟=ji4
|
||
计=ji4
|
||
家=jia1
|
||
郏=jia2
|
||
贾=jia3
|
||
简=jian3
|
||
姜=jiang1
|
||
江=jiang1
|
||
蒋=jiang3
|
||
焦=jiao1
|
||
金=jin1
|
||
靳=jin4
|
||
经=jing1
|
||
荆=jing1
|
||
井=jing3
|
||
景=jing3
|
||
居=ju1
|
||
鞠=ju1
|
||
阚=kan4
|
||
康=kang1
|
||
柯=ke1
|
||
空=kong1
|
||
孔=kong3
|
||
寇=kou4
|
||
蒯=kuai3
|
||
匡=kuang1
|
||
夔=kui2
|
||
隗=kui2
|
||
赖=lai4
|
||
蓝=lan2
|
||
郎=lang2
|
||
劳=lao2
|
||
雷=lei2
|
||
冷=leng3
|
||
黎=li2
|
||
李=li3
|
||
利=li4
|
||
厉=li4
|
||
郦=li4
|
||
廉=lian2
|
||
连=lian2
|
||
梁=liang2
|
||
廖=liao4
|
||
林=lin2
|
||
蔺=lin4
|
||
令狐=ling2-hu2
|
||
凌=ling2
|
||
刘=liu2
|
||
柳=liu3
|
||
隆=long2
|
||
龙=long2
|
||
娄=lou2
|
||
闾丘=lu2-qiu1
|
||
卢=lu2
|
||
吕=lu3
|
||
鲁=lu3
|
||
禄=lu4
|
||
路=lu4
|
||
逯=lu4
|
||
陆=lu4
|
||
栾=luan2
|
||
罗=luo2
|
||
骆=luo4
|
||
麻=ma2
|
||
马=ma3
|
||
满=man3
|
||
毛=mao2
|
||
茅=mao2
|
||
梅=mei2
|
||
蒙=meng2
|
||
孟=meng4
|
||
糜=mi2
|
||
米=mi3
|
||
宓=mi4
|
||
苗=miao2
|
||
缪=miao4
|
||
闵=min3
|
||
明=ming2
|
||
万俟=mo4-qi2
|
||
莫=mo4
|
||
慕容=mu4-rong2
|
||
慕=mu4
|
||
牧=mu4
|
||
穆=mu4
|
||
那=na1
|
||
能=nai4
|
||
倪=ni2
|
||
乜=nie4
|
||
聂=nie4
|
||
宁=ning4
|
||
牛=niu2
|
||
钮=niu3
|
||
农=nong2
|
||
欧阳=ou1-yang2
|
||
欧=ou1
|
||
潘=pan1
|
||
庞=pang2
|
||
逄=pang2
|
||
裴=pei2
|
||
彭=peng2
|
||
蓬=peng2
|
||
皮=pi2
|
||
平=ping2
|
||
濮阳=pu2-yang2
|
||
濮=pu2
|
||
蒲=pu2
|
||
浦=pu3
|
||
戚=qi1
|
||
祁=qi2
|
||
齐=qi2
|
||
钱=qian2
|
||
强=qiang2
|
||
乔=qiao2
|
||
秦=qin2
|
||
秋=qiu1
|
||
邱=qiu1
|
||
仇=qiu2
|
||
裘=qiu2
|
||
屈=qu1
|
||
麴=qu1
|
||
璩=qu2
|
||
瞿=qu2
|
||
全=quan2
|
||
权=quan2
|
||
阙=que1
|
||
冉=ran3
|
||
饶=rao2
|
||
任=ren2
|
||
容=rong2
|
||
戎=rong2
|
||
荣=rong2
|
||
融=rong2
|
||
茹=ru2
|
||
阮=ruan3
|
||
芮=rui4
|
||
桑=sang1
|
||
沙=sha1
|
||
山=shan1
|
||
单=shan4
|
||
上官=shang4-guan1
|
||
尚=shang4
|
||
韶=shao2
|
||
邵=shao4
|
||
厍=she4
|
||
申屠=shen1-tu2
|
||
申=shen1
|
||
莘=shen1
|
||
沈=shen3
|
||
慎=shen4
|
||
盛=sheng
|
||
师=shi1
|
||
施=shi1
|
||
时=shi2
|
||
石=shi2
|
||
史=shi3
|
||
寿=shou4
|
||
殳=shu1
|
||
舒=shu1
|
||
束=shu4
|
||
双=shuang1
|
||
水=shui3
|
||
司空=si1-kong1
|
||
司马=si1-ma3
|
||
司徒=si1-tu2
|
||
司=si1
|
||
松=song1
|
||
宋=song4
|
||
苏=su1
|
||
宿=su4
|
||
孙=sun1
|
||
索=suo3
|
||
邰=tai2
|
||
太叔=tai4-shu1
|
||
澹台=tan2-tai2
|
||
谈=tan2
|
||
谭=tan2
|
||
汤=tang1
|
||
唐=tang2
|
||
陶=tao2
|
||
滕=teng2
|
||
田=tian2
|
||
通=tong1
|
||
佟=tong2
|
||
童=tong2
|
||
钭=tou3
|
||
屠=tu2
|
||
万=wan4
|
||
汪=wang1
|
||
王=wang2
|
||
危=wei1
|
||
韦=wei2
|
||
卫=wei4
|
||
蔚=wei4
|
||
魏=wei4
|
||
温=wen1
|
||
闻人=wen2-ren2
|
||
文=wen2
|
||
闻=wen2
|
||
翁=weng1
|
||
沃=wo4
|
||
乌=wu1
|
||
巫=wu1
|
||
邬=wu1
|
||
吴=wu2
|
||
毋=wu2
|
||
伍=wu3
|
||
武=wu3
|
||
奚=xi1
|
||
郗=xi1
|
||
习=xi2
|
||
席=xi2
|
||
郤=xi4
|
||
夏侯=xia4-hou2
|
||
夏=xia4
|
||
鲜于=xian1-yu2
|
||
咸=xian2
|
||
向=xiang4
|
||
相=xiang4
|
||
项=xiang4
|
||
萧=xiao1
|
||
解=xie4
|
||
谢=xie4
|
||
辛=xin1
|
||
邢=xing2
|
||
幸=xing4
|
||
熊=xiong2
|
||
胥=xu1
|
||
须=xu1
|
||
徐=xu2
|
||
许=xu3
|
||
轩辕=xuan1-yuan2
|
||
宣=xuan1
|
||
薛=xue1
|
||
荀=xun2
|
||
燕=yan1
|
||
严=yan2
|
||
言=yan2
|
||
阎=yan2
|
||
颜=yan2
|
||
晏=yan4
|
||
杨=yang2
|
||
羊=yang2
|
||
仰=yang3
|
||
养=yang3
|
||
姚=yao2
|
||
叶=ye4
|
||
伊=yi1
|
||
易=yi4
|
||
益=yi4
|
||
羿=yi4
|
||
殷=yin1
|
||
阴=yin1
|
||
尹=yin3
|
||
印=yin4
|
||
应=ying1
|
||
雍=yong1
|
||
尤=you2
|
||
游=you2
|
||
於=yu1
|
||
于=yu2
|
||
余=yu2
|
||
俞=yu2
|
||
虞=yu2
|
||
鱼=yu2
|
||
宇文=yu3-wen2
|
||
庾=yu3
|
||
禹=yu3
|
||
尉迟=yu4-chi2
|
||
喻=yu4
|
||
郁=yu4
|
||
元=yuan2
|
||
袁=yuan2
|
||
乐=yue4
|
||
越=yue4
|
||
云=yun2
|
||
宰=zai3
|
||
昝=zan3
|
||
臧=zang1
|
||
曾=zeng1
|
||
查=zha1
|
||
翟=zhai2
|
||
詹=zhan1
|
||
湛=zhan4
|
||
张=zhang1
|
||
章=zhang1
|
||
长孙=zhang3-sun1
|
||
赵=zhao4
|
||
甄=zhen1
|
||
郑=zheng4
|
||
支=zhi1
|
||
钟离=zhong1-li2
|
||
仲孙=zhong1-sun1
|
||
终=zhong1
|
||
钟=zhong1
|
||
仲=zhong4
|
||
周=zhou1
|
||
诸葛=zhu1-ge3
|
||
朱=zhu1
|
||
诸=zhu1
|
||
竺=zhu2
|
||
祝=zhu4
|
||
庄=zhuang1
|
||
卓=zhuo2
|
||
訾=zi3
|
||
宗=zong1
|
||
邹=zou1
|
||
祖=zu3
|
||
左=zuo3";
|
||
}
|
||
}
|