问题描述
需要实现一个简单的拼音输入法功能。我下载了一个拼音字库。6M多。我的做法是:程序启动时加载字库到hashtable中,key值为拼音。类似xian和xi'an的合并。字库加载时间较长,这个不影响。需要查询时,从开头最长的组合(不超过12个字符)到最短的组合(1个字符)依次查询,合并结果作为备选汉字。但是,输入拼音,显示备选汉字会有很明显的延时。请问有没有比较好的思路或方法,能够缩短查询字库到显示备选字的延时?============================与该问题无关的回复,请发到这里,帮助我结一个以前的贴子。
解决方案
解决方案二:
该回复于2014-01-18 10:40:29被版主删除
解决方案三:
不知道你是如何查询的,你可以将数据加载到DataSet中然后实现sql查询的方法ds.Tables[0].Select("pinyinlike'%"+pinyin+"%'");
解决方案四:
查找前10个就应该停止了。
解决方案五:
不知道lz这个是怎么查询,不过跟我做过的省市县查询很像,我当初做的时候是查询出来封装在一个dataset中,在加载到控件源的,完全没有延时很厉害的问题
解决方案六:
需要实现的功能就是最简单的拼音输入法。没有联想和词语功能,最多是双拼。输入拼音,显示备选汉字。现在是:这个字库里有17万多行,就需要生成一个拥有17万多条数据的集合。比如输入:zhuangzhuang(可能存在更多字符)就依次查zhuang'zhuang撞撞壮壮桩桩装装庄庄妆妆zhuang'zhuan装转庄传撞砖……(更多结果)zhuang装状庄撞壮妆桩幢粧戆娤庒僮梉湷戅糚壵漴焋裝狀奘莊壯妝樁荘弉戇zhuan赚转专砖传撰篆馔啭颛専転僎堟孨叀譔瑑簨沌轉傳專抟賺磚剸塼嫥瑼甎篿耑膞蟤鄟顓鱄鷒囀竱灷籑縳腞蒃襈饌……(更多结果)z在最再做则子作总走再比如输入:abc(可能存在更多字符)这次2位以上的组合肯定查不到结果,但还是要依次检索一遍。……a'b阿布阿扁阿宝阿爸阿伯阿坝阿比阿巴阿炳阿波阿部阿贝阿斌阿邦阿碧阿鼻阿冰阿本啊不阿跋a啊阿吖嗄锕腌厑呵錒最后把能查到的结果合并起来。经常在输入拼音到显示备选字之间能感觉到很明显的延时。现在想寻求个好一点的方法,只要延时不是很明显就可以。
解决方案七:
引用5楼slowhand的回复:
需要实现的功能就是最简单的拼音输入法。没有联想和词语功能,最多是双拼。输入拼音,显示备选汉字。现在是:这个字库里有17万多行,就需要生成一个拥有17万多条数据的集合。比如输入:zhuangzhuang(可能存在更多字符)就依次查zhuang'zhuang撞撞壮壮桩桩装装庄庄妆妆zhuang'zhuan装转庄传撞砖……(更多结果)zhuang装状庄撞壮妆桩幢粧戆娤庒僮梉湷戅糚壵漴焋裝狀奘莊壯妝樁荘弉戇zhuan赚转专砖传撰篆馔啭颛専転僎堟孨叀譔瑑簨沌轉傳專抟賺磚剸塼嫥瑼甎篿耑膞蟤鄟顓鱄鷒囀竱灷籑縳腞蒃襈饌……(更多结果)z在最再做则子作总走再比如输入:abc(可能存在更多字符)这次2位以上的组合肯定查不到结果,但还是要依次检索一遍。……a'b阿布阿扁阿宝阿爸阿伯阿坝阿比阿巴阿炳阿波阿部阿贝阿斌阿邦阿碧阿鼻阿冰阿本啊不阿跋a啊阿吖嗄锕腌厑呵錒最后把能查到的结果合并起来。经常在输入拼音到显示备选字之间能感觉到很明显的延时。现在想寻求个好一点的方法,只要延时不是很明显就可以。
你需要的东西叫做词库。
解决方案八:
如果你查出来8000个词,然后给人家列表选择,谁看呢?所以实际上你只要查出第一页,比如说10个或者20个词,就可以停止了。至于怎样查出来的“恰好是”人家需要的,这就是智慧了。而耍蛮力其实谁都会,但是并不是智慧。这正是谷歌跟其它一些网页搜索引擎的区别所在。
解决方案九:
引用4楼u011130289的回复:
不知道lz这个是怎么查询,不过跟我做过的省市县查询很像,我当初做的时候是查询出来封装在一个dataset中,在加载到控件源的,完全没有延时很厉害的问题
你的省市又没有十几万个,而且也不需要每一次用户录入后都重新动态产生结果。
解决方案十:
引用6楼yuwenge的回复:
你需要的东西叫做词库。
前边说了,只需要查字,最多是双拼。字库也在开头上传了一份:现在主要是检索及显示结果效率的问题了。
解决方案十一:
引用7楼sp1234的回复:
如果你查出来8000个词,然后给人家列表选择,谁看呢?所以实际上你只要查出第一页,比如说10个或者20个词,就可以停止了。至于怎样查出来的“恰好是”人家需要的,这就是智慧了。而耍蛮力其实谁都会,但是并不是智慧。这正是谷歌跟其它一些网页搜索引擎的区别所在。
我现在的做法是,类似输入法:结果多的时候,结果只显示一行,可上下翻页。后来又给每个字增加了“热度”属性。每次选中文字时,“热度”加1,上限10000,保存到集合,关闭程序前再把集合保存为字库。担心如果不把所有字列全的话,别人要查某个生僻字,就找不到了。
解决方案十二:
几千个文字也无法同时显示。。应该在建个热度表。。当查询时,优先查找。。如果不满一页,在+几个。。分页查找。。哪能一下子找那么多出来。
解决方案十三:
引用9楼slowhand的回复:
Quote: 引用6楼yuwenge的回复:
你需要的东西叫做词库。前边说了,只需要查字,最多是双拼。字库也在开头上传了一份:现在主要是检索及显示结果效率的问题了。
词库不是字库难怪你做不出