首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 100分!如何获取汉字字首拼音?(以前很多帖子的方法都有局限) [已结贴,结贴人:woshizhaoxuhui]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • woshizhaoxuhui
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 揭帖率:
    发表于:2008-05-20 21:12:24 楼主
    问题本身就不多说了,就是把中国翻译成ZG,把中国(西安)翻译成ZG(XA),
    先前用了一个拼音控件pinyin.v41不过翻译有些问题,比如会把‘长’翻译成'Z',另外一个函数,无法翻译出‘学’字,我是delphi的初学者,对这些还不太懂,还请大家帮忙,给一个比较好的解决办法,谢谢!
    100  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hys_427
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-05-20 21:27:181楼 得分:20
    function GetPYindexChar(hzchar:string):char;
    begin
    case word(hzchar[1])shl 8+word(hzchar[2]) of
    $B0A1..$B0C4:result:='A';
    $B0C5..$B2C0:result:='B';
    $B2C1..$B4ED:result:='C';
    $B4EE..$B6E9:result:='D';
    $B6EA..$B7A1:result:='E';
    $B7A2..$B8C0:result:='F';
    $B8C1..$B9FD:result:='G';
    $B9FE..$BBF6:result:='H';
    $BBF7..$BFA5:result:='J';
    $BFA6..$C0AB:result:='K';
    $C0AC..$C2E7:result:='L';
    $C2E8..$C4C2:result:='M';
    $C4C3..$C5B5:result:='N';
    $C5B6..$C5BD:result:='O';
    $C5BE..$C6D9:result:='P';
    $C6DA..$C8BA:result:='Q';
    $C8BB..$C8F5:result:='R';
    $C8F6..$CBF9:result:='S';
    $CBFA..$CDD9:result:='T';
    $CDDA..$CEF3:result:='W';
    $CEF4..$D188:result:='X';
    $D1B9..$D4D0:result:='Y';
    $D4D1..$D7F9:result:='Z';
      else
      result:=char(0);
    end;
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    var
    str:widestring;
    i:integer;
    begin
    str:='中国(西安)';
    label1.Caption:='';
    for i:=1 to length(str) do
    label1.Caption:=label1.Caption+GetPYindexChar(str[i]);
    end;
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ideation_shang
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-05-20 21:40:002楼 得分:0
    楼上代码修改一下
    result:=char(0); 
    改为
    result:=hzchar[1];
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • blazingfire
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 2

    发表于:2008-05-20 22:26:283楼 得分:0
    如果是多音字,那楼上代码应该也不行
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zhuchengchuan
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-05-21 08:54:044楼 得分:0
    好像没有满意的方法.楼上的方法,有些不常见的字还是得不到简拼.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zxf_feng
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 3

    发表于:2008-05-21 11:14:375楼 得分:10
    传了半天,终于传上来一个汉字转拼音的小例子,供你参考
    http://download.csdn.net/source/461957
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kerll
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-05-21 11:56:556楼 得分:20
    unit IMCode;

    (*
        简化版拼音反查单元=====================
        修改于 Trueway(TM) LiQunwei
        修改者 2ccc.com ZhongWan
        修改内容 去掉外挂字典,简化代码
    *)

    interface

    function MakeSpellCode(stText: string; iMode, iCount: Integer): string;
    { iMode 二进制功能位说明
      X X X X X X X X X X X X X X X X
                                3 2 1
      1: 0 - 只取各个汉字声母的第一个字母; 1 - 全取
      2: 0 - 遇到不能翻译的字符不翻译; 1 - 翻译成 '?' (本选项目针对全角字符)
      3: 0 - 生成的串不包括非数字, 字母的其他字符; 1 - 包括
        (控制全角的要输出非数字, 字母字符的; 半角的非数字, 字母字符)
    }

    function GetSpellCode(szText: PChar; iMode, iCount: Integer): PChar; stdcall;

    implementation

    uses
      SysUtils;

    type
    { 拼音代码表 }
      TPYCode = record
        PYCode: string[6];
      end;
      TFPYCodes = array [1..126, 1..191] of TPYCode;

    const
      PYMUSICCOUNT = 405;
      PyMusicCode: array [1..PYMUSICCOUNT] of string[6] = { 汉字基本发音表 } (
        'a', 'ai', 'an', 'ang', 'ao', 'ba', 'bai', 'ban', 'bang', 'bao',
        'bei', 'ben', 'beng', 'bi', 'bian', 'biao', 'bie', 'bin', 'bing', 'bo',
        'bu', 'ca', 'cai', 'can', 'cang', 'cao', 'ce', 'ceng', 'cha', 'chai',
        'chan', 'chang', 'chao', 'che', 'chen', 'cheng', 'chi', 'chong', 'chou', 'chu',
        'chuai', 'chuan', 'chuang', 'chui', 'chun', 'chuo', 'ci', 'cong', 'cou', 'cu',
        'cuan', 'cui', 'cun', 'cuo', 'da', 'dai', 'dan', 'dang', 'dao', 'de',
        'deng', 'di', 'dian', 'diao', 'die', 'ding', 'diu', 'dong', 'dou', 'du',
        'duan', 'dui', 'dun', 'duo', 'e', 'en', 'er', 'fa', 'fan', 'fang',
        'fei', 'fen', 'feng', 'fu', 'fou', 'ga', 'gai', 'gan', 'gang', 'gao',
        'ge', 'ji', 'gen', 'geng', 'gong', 'gou', 'gu', 'gua', 'guai', 'guan',
        'guang', 'gui', 'gun', 'guo', 'ha', 'hai', 'han', 'hang', 'hao', 'he',
        'hei', 'hen', 'heng', 'hong', 'hou', 'hu', 'hua', 'huai', 'huan', 'huang',
        'hui', 'hun', 'huo', 'jia', 'jian', 'jiang', 'qiao', 'jiao', 'jie', 'jin',
        'jing', 'jiong', 'jiu', 'ju', 'juan', 'jue', 'jun', 'ka', 'kai', 'kan',
        'kang', 'kao', 'ke', 'ken', 'keng', 'kong', 'kou', 'ku', 'kua', 'kuai',
        'kuan', 'kuang', 'kui', 'kun', 'kuo', 'la', 'lai', 'lan', 'lang', 'lao',
        'le', 'lei', 'leng', 'li', 'lia', 'lian', 'liang', 'liao', 'lie', 'lin',
        'ling', 'liu', 'long', 'lou', 'lu', 'luan', 'lue', 'lun', 'luo', 'ma',
        'mai', 'man', 'mang', 'mao', 'me', 'mei', 'men', 'meng', 'mi', 'mian',
        'miao', 'mie', 'min', 'ming', 'miu', 'mo', 'mou', 'mu', 'na', 'nai',
        'nan', 'nang', 'nao', 'ne', 'nei', 'nen', 'neng', 'ni', 'nian', 'niang',
        'niao', 'nie', 'nin', 'ning', 'niu', 'nong', 'nu', 'nuan', 'nue', 'yao',
        'nuo', 'o', 'ou', 'pa', 'pai', 'pan', 'pang', 'pao', 'pei', 'pen',
        'peng', 'pi', 'pian', 'piao', 'pie', 'pin', 'ping', 'po', 'pou', 'pu',
        'qi', 'qia', 'qian', 'qiang', 'qie', 'qin', 'qing', 'qiong', 'qiu', 'qu',
        'quan', 'que', 'qun', 'ran', 'rang', 'rao', 're', 'ren', 'reng', 'ri',
        'rong', 'rou', 'ru', 'ruan', 'rui', 'run', 'ruo', 'sa', 'sai', 'san',
        'sang', 'sao', 'se', 'sen', 'seng', 'sha', 'shai', 'shan', 'shang', 'shao',
        'she', 'shen', 'sheng', 'shi', 'shou', 'shu', 'shua', 'shuai', 'shuan', 'shuang',
        'shui', 'shun', 'shuo', 'si', 'song', 'sou', 'su', 'suan', 'sui', 'sun',
        'suo', 'ta', 'tai', 'tan', 'tang', 'tao', 'te', 'teng', 'ti', 'tian',
        'tiao', 'tie', 'ting', 'tong', 'tou', 'tu', 'tuan', 'tui', 'tun', 'tuo',
        'wa', 'wai', 'wan', 'wang', 'wei', 'wen', 'weng', 'wo', 'wu', 'xi',
        'xia', 'xian', 'xiang', 'xiao', 'xie', 'xin', 'xing', 'xiong', 'xiu', 'xu',
        'xuan', 'xue', 'xun', 'ya', 'yan', 'yang', 'ye', 'yi', 'yin', 'ying',
        'yo', 'yong', 'you', 'yu', 'yuan', 'yue', 'yun', 'za', 'zai', 'zan',
        'zang', 'zao', 'ze', 'zei', 'zen', 'zeng', 'zha', 'zhai', 'zhan', 'zhang',
        'zhao', 'zhe', 'zhen', 'zheng', 'zhi', 'zhong', 'zhou', 'zhu', 'zhua', 'zhuai',
        'zhuan', 'zhuang', 'zhui', 'zhun', 'zhuo', 'zi', 'zong', 'zou', 'zu', 'zuan',
        'zui', 'zun', 'zuo', '', 'ei', 'm', 'n', 'dia', 'cen', 'nou',
        'jv', 'qv', 'xv', 'lv', 'nv'
      );

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • woniugongzuoshi
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-05-21 12:16:157楼 得分:0
    这是根据汉字区位码来编的,一个汉字只能对应一个编码,除非你把这个结果导入数据表,再自己修改掉错的,添上多音字,不然没办法解决。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • oushengfen
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-05-21 12:22:448楼 得分:0
    我有一个比较好的代码,我一直在使用,只有生僻字查不出来.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kerll
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-05-21 12:23:019楼 得分:0
    太大了传不上去,需要的话联系我
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wangj_0520
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-05-21 12:25:2410楼 得分:0
    楼上的编码都可以,但不全;多音字都不成;
    建议和专业人事找拼音国标代码,这样90%以上的问题都可以解决.
    拼音代码库?!!!
    个人做毕业设计的话,楼上已经足够了.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zzflover
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-05-21 13:37:2411楼 得分:0
    那要是将拼音转汉字呢?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jiangsheng
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-05-21 21:22:1012楼 得分:0
    ……你要做输入法?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lzxtk
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-05-21 21:58:4413楼 得分:0
    输入法都要做成一个库的吧,这么简单就能满足输入法的要求?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • nb95463034
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-05-22 08:36:1314楼 得分:0
    其实可以调用字库中的汉字的

    以前写过一个程序从UCDOS的一级二级字库里查汉字的拼音的

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • pengxuan
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-05-22 08:39:5015楼 得分:0
    楼主要做什么软件
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lindaozhi
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-05-22 08:46:3016楼 得分:0
    MARK 一下
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • woshizhaoxuhui
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-05-24 11:48:4017楼 得分:0
    pengxuan 你好,我是做一个汽配软件,需要把零件名称转化为字首拼音,以便于用户查询,例如:
    水泵 --> sb,
    水泵(富康) -->sb,
    也就是说,遇到括号就不再翻译,不过这个我想倒是比较容易实现,判断一下就可以了
    主要是目前试验了几种办法,都存在bug
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • S_Slan
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-05-26 22:14:5818楼 得分:0
    有一个控件,你去找一下
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • woshizhaoxuhui
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-05-27 08:41:3819楼 得分:0
    这是我在网上找到的一个例子,试了一下还不错,大家看看:
    function GetHzPy(const AHzStr: string): string;stdcall;
    const
      ChinaCode: array[0..25, 0..1] of Integer = ((1601, 1636), (1637, 1832), (1833, 2077),
        (2078, 2273), (2274, 2301), (2302, 2432), (2433, 2593), (2594, 2786), (9999, 0000),
        (2787, 3105), (3106, 3211), (3212, 3471), (3472, 3634), (3635, 3722), (3723, 3729),
        (3730, 3857), (3858, 4026), (4027, 4085), (4086, 4389), (4390, 4557), (9999, 0000),
        (9999, 0000), (4558, 4683), (4684, 4924), (4925, 5248), (5249, 5589));
    var
      I, J, HzOrd: Integer;
      Str:string;
    begin
      I := 1;
      Str := '';
      while I <= Length(AHzStr) do
      begin
        if (AHzStr[I] >= #160) and (AHzStr[I + 1] >= #160) then
        begin
          HzOrd := (Ord(AHzStr[I]) - 160) * 100 + Ord(AHzStr[I + 1]) - 160;
          for J := 0 to 25 do
          begin
            if (HzOrd >= ChinaCode[J][0]) and (HzOrd <= ChinaCode[J][1]) then
            begin
              Str := Str + Char(byte('A') + J);
              Break;
            end;
          end;
          Inc(I);
        end
        else
          Str := Str + AHzStr[i];
        Inc(I);
      end;
     
      //+++++++++++++++++++++++++++++++++++
      这段是我自己加上的,目的是将水泵(奥拓)翻译为SB而不是SB(AT),因为没时间分析
      前面的代码,只能用这个笨办法
      Result := '';
      for i:=1 to Length(Str) do
        if (Str[i] in ['a'..'z']) or (Str[i] in ['A'..'Z']) then
          Result := Result + Str[i]
        else
          break;
      //++++++++++++++++++++++++++++++++++++
    end;
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jhldelphi
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-05-28 08:53:2620楼 得分:0
    学习
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • woshizhaoxuhui
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-05-29 10:23:2521楼 得分:0
    大家看看这个方法是否还有改进的余地?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • oushengfen
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-05-29 12:40:4922楼 得分:0
    哎,说了园地上有一个较发的,仔细找一下就可以找到的,我一直在使用,很好用的.是一个单独的单元.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Harryfin
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-05-29 12:46:0223楼 得分:0
    自己在数据库里多建个字段吧,以上所有方法都是不可行的,在面对多音字的时候。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • gyk120
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 2

    发表于:2008-05-29 12:47:2424楼 得分:10
    楼上的一说我倒是想起来了
    http://www.delphifans.com/SoftView/SoftView_1198.html
    下载了一个放在那,一个多月都没动……
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • woshizhaoxuhui
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-05-29 13:55:4825楼 得分:0
    gyk120 :原地的这个例子有问题啊,你试试输入“长春”,结果不是‘cc’而是‘zc'
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Harryfin
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-05-29 15:09:0726楼 得分:0
    想都知道不可能解决多音字的问题... 常用词的话,也许还有点可能(做得出来还不如直接把多音字的做张对应表算了)。但是人名的多音字必错。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • comerliang
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-05-29 16:04:0027楼 得分:0
    http://blog.csdn.net/comerliang/archive/2005/11/14/529376.aspx
    包含二级字库


    多音字问题肯定没有好的解决方案
    修改 删除 举报 引用 回复