如何实现拼音到汉字的查询,请高手指点!500分! 我想实现拼音到汉字的查询,或者利用汉字的首拼音字母去查询汉字,不知道应该如何实现.例如利用ZG去查询中国等一类词组.,如能解决另外加分! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 就像楼上几位高人说的一样1、你可以根据内码来查询,比如从OXB0A1 到 0XB0C4 是A字母打头的,这个我可以从字符映射表中找到答案,不过这个方法有些缺点,比如多音字上,它就不能很好的工作,就像“人参”的参字,用这种方法查询的话,就会得到C,即"参差不齐"了还有一些类繁体的,它也不能识别,不过它速度快,如果要求的场合不高可以考虑.2. 可以用输入法生成器的逆转换导出拼音输入法的.TXT文件,然后写段程序去掉多余的部分,比如:中国zhongguo 改成 中国zg,然后以你自己的格式存储起来在用时调用查询程序查询就可以了.这样可以支持绝大部分的汉字,几乎说你能打出来的就能找到它对应的拼音.不过它可能不如头一种高效,不过你可以在程序开始时把它读入MAP中等其它的一些手段来优化它,或者采用二者结合的方式.好运! 感谢sans(sans)大哥的热情帮助,我的邮件地址:[email protected]或者[email protected]谢谢! 小弟昨天下线较早,望sans(sans) 大哥看到后,把汉字-拼音对照表发到我的油箱,十分感激! 关心汉字的人,请看:http://www.zh2002.com 如果你用的是98的话,附件里有一个输入法生成器,你选择一个WINPY.MB文件,将他逆转换,就可以得到汉字与拼音对应的表,你通过这个表(当然要小小修改以下),就可以通过对文件的查找来进行拼音与汉字的转换。WINPY.MB是拼音输入法的查找表,位置在C:/WINDOWS/SYSTEM/WINPY.MB,2000在C:/WINNT/SYSTEM32/WINPY.MB对照表我也可以给你发一个 请到 请ynli2002(阿男) 进来领分 初领分!为什么不能依次给200分啊! 还请个为高手给出点更具体的,如如何查询汉字内码?如何利用程序把zhongguo该为zg! 你说利用程序把ZHONGGUO改为ZG,我认为比较难,这需要程序有高超的智能。因为拼音很难根据元音辅音来进行判断拼音中究竟拼了几个字。苯办法是自己进行插入,把zg插入到对照表中。关注…… 怎么搞的这么复杂?我上面说的应该可以,另外关于多音字的问题,如果要专门来处理就很麻烦和不值得,可以用IME导出词表,查出其中的多音字,判断完内码之后,再判断一下这些多音字 to cpunion(全心全意) 请问如何获得汉字的内码?关注! 可以直接用一个HEX编辑器打开一个词表文件就可以看到了啊 我是说在程序中如何实现啊!能不能向下面写的那样做printf("%X %X",pstr[0],pstr[1]) 我以前用DELPHI写过,原理是一样的你可以去CODELPHI。COM看看 这里的一段程序: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.主要是一个编码的问题,不知道对你有用没有,因为是不能辨别多音字的。如果还不行,你可以去查找一下有没有拼音输入法的源代码,可能对你有帮助 建立拼音与汉字的关联似乎没有简单的方法,你可以用列表法,但需要自己建立。例如:a啊阿...。hr忽然、环绕、华人、汉人...。zym自由民、座右铭...。 ctreectrl 如何实现点击前面的复选框 该 节点文本也处于被选中状态。。。。 带checkbox的CTreeCtrl如何设置复选框不能勾选(disable) ADO 连接数据库问题? 我是即将毕业的学生,一般在公司工作几年啊? 我自己做个一个钩子DLL然后用EXE调用结果读取函数地址错误怎么回事? 怎样生成一个 edit 控件数组,又怎么来响应 控件的各种事件 msvcrt.dll 在98和2K中,它起到了什么作用??? programme windows 5th 如何对声音波形进行频谱分析? 求救,关于多线程处理串口处理数据问题 急用啊~~~如何遍历注册表? template 小问题
1、你可以根据内码来查询,比如从OXB0A1 到 0XB0C4 是A字母打头的,这个我可以从字符映射表中找到答案,不过这个方法有些缺点,比如多音字上,它就不能很好的工作,就像“人参”的参字,用这种方法查询的话,就会得到C,即"参差不齐"
了还有一些类繁体的,它也不能识别,不过它速度快,如果要求的场合不高可以考虑.
2. 可以用输入法生成器的逆转换导出拼音输入法的.TXT文件,然后写段程序去掉多余的部分,比如:中国zhongguo 改成 中国zg,然后以你自己的格式存储起来在用时调用查询程序查询就可以了.这样可以支持绝大部分的汉字,几乎说你能打出来的就能找到它对应的拼音.不过它可能不如头一种高效,不过你可以在程序开始时把它读入MAP中等其它的一些手段来优化它,或者采用二者结合的方式.
好运!
谢谢!
关心汉字的人,请看:http://www.zh2002.com
2000在C:/WINNT/SYSTEM32/WINPY.MB对照表我也可以给你发一个
为什么不能依次给200分啊!
苯办法是自己进行插入,把zg插入到对照表中。
关注……
关注!
printf("%X %X",pstr[0],pstr[1])
,原理是一样的
你可以去CODELPHI。COM看看
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.
主要是一个编码的问题,不知道对你有用没有,因为是不能辨别多音字的。
如果还不行,你可以去查找一下有没有拼音输入法的源代码,可能对你有帮助