我想实现拼音到汉字的查询,或者利用汉字的首拼音字母去查询汉字,不知道应该如何实现.
例如利用ZG去查询中国等一类词组.,如能解决另外加分!

解决方案 »

  1.   

    就像楼上几位高人说的一样
    1、你可以根据内码来查询,比如从OXB0A1 到 0XB0C4 是A字母打头的,这个我可以从字符映射表中找到答案,不过这个方法有些缺点,比如多音字上,它就不能很好的工作,就像“人参”的参字,用这种方法查询的话,就会得到C,即"参差不齐"
    了还有一些类繁体的,它也不能识别,不过它速度快,如果要求的场合不高可以考虑.
    2. 可以用输入法生成器的逆转换导出拼音输入法的.TXT文件,然后写段程序去掉多余的部分,比如:中国zhongguo 改成 中国zg,然后以你自己的格式存储起来在用时调用查询程序查询就可以了.这样可以支持绝大部分的汉字,几乎说你能打出来的就能找到它对应的拼音.不过它可能不如头一种高效,不过你可以在程序开始时把它读入MAP中等其它的一些手段来优化它,或者采用二者结合的方式.
    好运!
      

  2.   

    感谢sans(sans)大哥的热情帮助,我的邮件地址:[email protected]或者[email protected]
    谢谢!
      

  3.   

    小弟昨天下线较早,望sans(sans) 大哥看到后,把汉字-拼音对照表发到我的油箱,十分感激!
      

  4.   


    关心汉字的人,请看:http://www.zh2002.com
      

  5.   

    如果你用的是98的话,附件里有一个输入法生成器,你选择一个WINPY.MB文件,将他逆转换,就可以得到汉字与拼音对应的表,你通过这个表(当然要小小修改以下),就可以通过对文件的查找来进行拼音与汉字的转换。WINPY.MB是拼音输入法的查找表,位置在C:/WINDOWS/SYSTEM/WINPY.MB,
    2000在C:/WINNT/SYSTEM32/WINPY.MB对照表我也可以给你发一个
      

  6.   

    请到  请ynli2002(阿男) 进来领分 初领分!
    为什么不能依次给200分啊!
      

  7.   

    还请个为高手给出点更具体的,如如何查询汉字内码?如何利用程序把zhongguo该为zg!
      

  8.   

    你说利用程序把ZHONGGUO改为ZG,我认为比较难,这需要程序有高超的智能。因为拼音很难根据元音辅音来进行判断拼音中究竟拼了几个字。
    苯办法是自己进行插入,把zg插入到对照表中。
    关注……
      

  9.   

    怎么搞的这么复杂?我上面说的应该可以,另外关于多音字的问题,如果要专门来处理就很麻烦和不值得,可以用IME导出词表,查出其中的多音字,判断完内码之后,再判断一下这些多音字
      

  10.   

    to cpunion(全心全意)  请问如何获得汉字的内码?
    关注!
      

  11.   

    可以直接用一个HEX编辑器打开一个词表文件就可以看到了啊
      

  12.   

    我是说在程序中如何实现啊!能不能向下面写的那样做
    printf("%X %X",pstr[0],pstr[1])
      

  13.   

    我以前用DELPHI写过
    ,原理是一样的
    你可以去CODELPHI。COM看看
      

  14.   

    这里的一段程序:
    unit MainFrm;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls;type
      TMainForm = class(TForm)
        ChineseEdt: TEdit;
        PYEdt: TEdit;
        btnConvert: TButton;
        Label1: TLabel;
        Label2: TLabel;
        Label3: TLabel;
        Label4: TLabel;
        Label5: TLabel;
        Label6: TLabel;
        procedure btnConvertClick(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      MainForm: TMainForm;implementation{$R *.DFM}// 获取指定汉字的拼音索引字母,如:“汉”的索引字母是“H”
    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(32);
      end;
    end;procedure TMainForm.btnConvertClick(Sender: TObject);
    var
      I: Integer;
      PY: string;
      s: string;
    begin
      s := ' ;
      I := 1;
      while I <= Length(ChineseEdt.Text) do
      begin
        PY := Copy(ChineseEdt.Text, I , 1);
        if PY >= Chr(128) then
        begin
          Inc(I);
          PY := PY + Copy(ChineseEdt.Text, I , 1);
          s := s + GetPYIndexChar(PY);
        end
        else
          s := s + PY;
        Inc(I);
      end;
      PYEdt.Text := s;
    end;end.
    主要是一个编码的问题,不知道对你有用没有,因为是不能辨别多音字的。
    如果还不行,你可以去查找一下有没有拼音输入法的源代码,可能对你有帮助
      

  15.   

    建立拼音与汉字的关联似乎没有简单的方法,你可以用列表法,但需要自己建立。例如:a啊阿...。hr忽然、环绕、华人、汉人...。zym自由民、座右铭...。