谈谈关于支持多音字拼音的问题 ( 积分: 100 )

  • 主题发起人 主题发起人 凤冠坡
  • 开始时间 开始时间

凤冠坡

Unregistered / Unconfirmed
GUEST, unregistred user!
取实际上多音字的首字母时没有任何实际意义的。
拼音首字母查询通常应该时这样的:
数据表应该建立一个字段 [拼音] 来表示某个字段内容对应的拼音首字母,
然后根据输入的串与[拼音]字段进行比较,即:
var
PY: string;
..............
//Py := 'ABCD'; 假设
SQL := 'Select * From Table where 拼音 like ''%ABCD%''';
.....................................
多音字拼音如何取,我觉得没有任何意义,最多是:
在生成拼音首字母时刻提供一个可选项,其实正是
这个可选项目没有程序实用性,难道程序 PY := GetPYStr(S)
的结果还允许用户取选择?不荒唐?有或者让用户更改拼音库,
那有时另外一回事,起结果仍然说明多音字职能按照单音字处理,
一刀切的方法更加能够解决实际问题,那些总是想要解决多音字的,
结果是什么问题都没有解决,也必然是没有办事效率的所谓“民主”
的思维方法。
 
我同意楼主意见,多音字在编程中没有什么实际意见
 
问题不是我们要不要多音字功能,是客户要不要。客户说不要就不要,客户说要就要。客户决定市场和功能。
 
怎么会没有意义呢? 比如 "生长"的首拼按一般方法得到的是SC,实际上应该是SZ,你说哪个更好?
至于效率,楼主所说的没效率只是你的实现问题,幸好你不是做拼音输入法,有一种"简拼输入法",如果输入SC才能得到"生长",你说用户怎么想?
当然,对一般应用而言,多音字的问题可能不是那么突出,但这并不意味着多音字的处理就没有意义了.
 
输入法是另外的问题,问题是程序如何生成拼音首字母,程序无法
根据拥护的需求实现啊!总是个多难问题。满足这部分要求,那么
就无法满足另外一部分要求。结果问题还是存在,没有解决。
 
来自:dreamisx, 时间:2007-5-18 9:11:32, ID:3718070
怎么会没有意义呢? 比如 "生长"的首拼按一般方法得到的是SC,实际上应该是SZ,你说哪个更好?
至于效率,楼主所说的没效率只是你的实现问题,幸好你不是做拼音输入法,有一种"简拼输入法",如果输入SC才能得到"生长",你说用户怎么想?
当然,对一般应用而言,多音字的问题可能不是那么突出,但这并不意味着多音字的处理就没有意义了.



这类问题如果要解决,可否提取词组首拼音得到?
 
意义是绝对有的,程序无法根据用户的需求实现,是水平问题,在我的控件已经做到了
支持多音字,如czxt/czjt操作系统,zgyh/zgyx中国银行等等,还支持五笔和拼音混合,
whdch/wkdch/wkdcw.....等等n个组合都可以检索到 五号电池盒 这个词。
 
同意kinneng的说法,毕竟多音字组成词后的读音应该就是唯一的了.
 
补充一下,我的控件输入 z国yh 一样可以检索 中国银行,即是汉字、拼音首字母,五笔
首字母,英文字母,数字,符号混合检索,有适用的码表还要有好的,高效快速的算法,
我是午睡的时候,梦见一仙人指点才
 
结果还是:实用长度非常低或者效率非常低,有什么好处啊。
等于没有用。
 
如果不是把拼音首字母串放到数据库字段,而是根据
数据库字段内容进行匹配比较,那时相当低效率的算法,
还要码表(稍微提速),以前我就是这样做的,但是客户反应
和自我感觉都不可能爽的。最后还是采取效率优先的方法。
一刀切。
 
不支持多音字的检索系统其实很弱智,为了所谓高效,而取弱智,我没办法再跟贴下去了。
 
不懂,只能搬凳子帮顶.
 
说道词组倒是可以解决一部分的,当然也减少了
多音字问题出现的几率,也是个可以采用的方法,
问题是词组的加入,一定是很大长度地降低了算法效率。
为了少数不认识的字,何必呢,我的客户其实再也没有
提到这个问题,比如检索一下:
名称字段:“长生不老这万便”-->对应拼音字段: ZSBLZWB 或者 CSBLZMP
你就不会使用模糊查找码?
SQL := 'Select * From DBName where 拼音 Like '''%SBLZ%''';
//语法假定 SQL 数据库
这样同样可以过滤掉绝大多数记录。
与其想法减少多音字出现的问题,不如想好办法用程序排除多音字的问题。
甚至还可以这样解决问题:
用户输入的是什么可以不管,但是只要用户必须按照顺序输入拼音首字母,
问题就好解决,那就是再存放 拼音串 的时候做标志,SQL 语句也要变化,
例如:
长万码力问题个给他连 拼音可以是 CWMLWTGGTL
由于包含多音字,如果指出多音字位置,SQL语句旧好处理了。
方法:用通配符代替多音字位置的拼音,本例拼音就可以变成:
长万码力问题个给他连 这个串的拼音串在 SQL Server 里面
首先可以是: __MLWTG_TL
甚至可以是: %%MLWTG%TL
SQL 语句就不要用了,最好就用 onFilterRecord 来比较
用户输入的串和拼音字段的匹配程度,一般超过三个匹配成功
就可以算作满足条件的了,因为通常拼音都用于快查询,这样
处理也就算是个好办法了。
还是第一中方法好些,去掉多音字的部分,选择较长一段
不含多音字的拼音作为该字段的拼音就行了,程序也好判断和比较,
也不会降低快速检索效率。onFilterRecoder 毕竟没有 SQL 语句
那么高效啊,你说呢?
 
通过解决多音字的方法写程序的实在是无能,
脑筋不会转弯,解决问题的方法太少,结果是
让客户受苦,最终还是没有市场。
 
如果不把拼音放到数据库里面,那简直就是个非常无力的
方法,根本没有实用价值,数据库一大,感觉就是比爬坡
还难受,用户用的时间一长,就发太耗时间了。
 
我是做医疗HIS的 在中西药里这个问题都特别多 尤其是中药里面 说大点可以说 "不接触草药名你是不会知道自己有多无知" 最简单的参字的就有 人参 党参, 红参, 黄参, 玄参 光参字的就这么多 我们现在没办法就是把拼音码也显示出来让客户可以自己修改 你要说不让修改让用模糊查询那好 柏叶类的有 柏叶, 柏叶炭, 侧柏叶, 炙柏叶, 炒柏叶, 光带柏叶的就这么多, 其它和它音同的呢?? 中药一般都是二三个字的 大部分都有重音的你现在不用模糊查询都不好找呢 何况药一进多呢?? 每种药都有两三笔, 整个柏叶类的药有多少?? 发音相同的又要有多少?? 这些东西都是需要根本情况而定的 因地制夷嘛
 
柏叶类的有 柏叶, 柏叶炭, 侧柏叶不是没有多音字吗?
至于人参,党参那就要另外处理了
 
我现在的项目正使用了拼音检索,我是这样做的
1,建拼音表py_word
create table py_word(
py char(1), //存放拼音首字母
word char(2) //存放此拼音首字母对应的汉字
)
如:insert into sun.st_py_word values('a', '厑');
insert into sun.st_py_word values('a', '爱');
insert into sun.st_py_word values('a', '矮');
insert into sun.st_py_word values('a', '挨');
insert into sun.st_py_word values('x', '澴');
insert into sun.st_py_word values('x', '烜');
insert into sun.st_py_word values('x', '煖');
insert into sun.st_py_word values('x', '狟');
insert into sun.st_py_word values('x', '獧');
insert into sun.st_py_word values('x', '玆');
insert into sun.st_py_word values('x', '琁');
insert into sun.st_py_word values('x', '琄');

2,将所有的 拼音首字母->汉字的对应关系放入py_word表中

3,现假设查询表person
create table person(
name varchar2(20)
)

查询 'sz'

select * from person
where substr(name, 1, 1) in (select word from py_word where py='s') and
substr(name, 2, 1) in (select word from py_word where py='z')

select * from person t1 where
exists(select * from py_word t2 where t2.py='s' and substr(t1.name, 1, 1)=t2.word) and
exists(select * from py_word t2 where t2.py='z' and substr(t1.name, 1, 2)=t2.word);

上面只是查询2个汉字的,如果是查询不止2个可以增加条件
条件可以使用delphi动态创建SQL,然后执行

我试了,只要建好索引,效率还算挺快的,这样也可以查询多音字,
如:输入'sz', 'sc' 都可以出现‘生长’
输入 'qs' 可以出来 '起始', '其实', '柒拾'等

不知我的方法是否令大家满意,请大家评论
 
后退
顶部