拼音字库查询问题。求思路或方法。

问题描述

需要实现一个简单的拼音输入法功能。我下载了一个拼音字库。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的回复:
你需要的东西叫做词库。

前边说了,只需要查字,最多是双拼。字库也在开头上传了一份:现在主要是检索及显示结果效率的问题了。

词库不是字库难怪你做不出

时间: 2024-11-18 20:18:39

拼音字库查询问题。求思路或方法。的相关文章

android 同步-android端如何实现数据同步问题?求思路、方法

问题描述 android端如何实现数据同步问题?求思路.方法 目前在做pad应用,应用所有数据都用sqlit保存在本地了,然后有3种同步功能,分别是: 1.立即同步 2.自动同步 3.仅在wifi下同步 现在没有好的. ** 完整 ** 的思路,请教各位.目前,在下有以下疑惑 a.是否需要服务.通知之类的还是仅仅一个定时器就可以了还是定时器写在服务中 b.如何在同步过程中有较好的用户体验,如在同步时,用户可以操作,同步完提示用户刷新页面等 有没有相关案例呢? 解决方案 如果你不是非要使用自己的同

接口-delphi能做微信定时群发功能吗,求思路

问题描述 delphi能做微信定时群发功能吗,求思路 我想做个微信公众号群发定时的,微信那有接口,我也不大懂接口,没怎么去了解,求思路和方法,谢谢 解决方案 可以,使用微信公众账号(以前叫订阅号),官网有sdk 解决方案二: http://www.cnblogs.com/txw1958/p/weixin89-mass-send.html 解决方案三: 这个看SDK吧,如果连SDK都不看,怎么做..

编程-调用SQL部分字段组成命令并执行,求方法,求思路

问题描述 调用SQL部分字段组成命令并执行,求方法,求思路 目标是想在窗口登录的时候,调用数据库中的表,实现某些窗体不可见. 请看数据库表和语句,求大神指出我错误的地方和正确思路,谢谢. mycn.ConnectionString = "Data Source=192.168.0.175;Initial Catalog=blle;uid=wks;pwd=123" mycomm.CommandText = "select puRID,puPriNM + '.visible',p

用hibernate来进行数据库查询时,需要按汉字拼音排序,急求

问题描述 用hibernate来进行数据库查询时,需要按汉字拼音排序,急求 这是查询语句 public List<MapCoordinates> getCoor() { Query query=getSession().createQuery("select new MapCoordinates(mapId, title,fwnr,fwsj, address, coordinate, tel) from MapCoordinates m order by convert_gbk(m.

多线程-新人求思路 winform控件自动刷新

问题描述 新人求思路 winform控件自动刷新 需求:定义自动刷新接口IAO,有若干控件(记为arc)实现该接口 包含arc的接口load时注册arc及其数据源的映射到某个集合(对控件采用弱引用,记为ard) 数据服务层更新数据后遍历集合 向需要进行UI更新的arc发送消息 窗体上的arc采用多线程异步处理更新操作(例:实现IAO的下拉列表arcombobox在收到消息后下拉框中的选项发生改变) 涉及的技术比较多 思路有点乱 控件与数据源的映射方式和与服务层交互的信息应该怎样定义都想不明白 希

acm问题-Acm 一道数据结构的问题,求思路,不求代码。

问题描述 Acm 一道数据结构的问题,求思路,不求代码. 假设我有两数组,分别有n1 n2个数据(每组数据都不相同).我要两个数组中各取一个相加,有n1乘n2种结果,从小到大排,取前n个.(如果n1 n2 特别大怎么算),求大神教我. 解决方案 首先将n1 n2按照从小到大的顺序排成两列 最小的肯定是n1[0]+n2[0](下面简写,只用下标,比如n1[0]+n2[0]记作0,0) 稍微大一点的要么是1,0要么是0,1 如果是1,0,那么再大一点的,要么是1,1,要么是2,0 如果是0,1,那么

1688登录-求思路 关于淘宝登录的探讨

问题描述 求思路 关于淘宝登录的探讨 在我的web程序里 ,用户希望 点击登录按钮 就能自动登录到他的淘宝后台.而不需要他输入淘宝用户名密码,我不知道在网页里怎么实现. 现在点击了按钮后 ,我可以在后台通过淘宝的登录验证 并且拿到了token,但不知道怎么进行下一步了,我希望我的页面能够调整到客户的淘宝后台~~~ 求思路, 解决方案 淘宝登陆验证不是要通过淘宝api接口实现授权已实现登陆的么?用户应该顾虑的是安全性而这个授权是通过淘宝后台而不是你程序所以不存在安全性问题.处于登陆状态直接访问后台

动态大图-关于图论与数据挖掘方向的问题,求思路

问题描述 关于图论与数据挖掘方向的问题,求思路 现存的动态大图上的可达性查询问题,存在什么问题,有什么新的思路 解决方案 速度慢效率低不能适合新形势

c#-C#关于事件的用法,求思路

问题描述 C#关于事件的用法,求思路 假设有3个类A,B,C;假设B里面有个事件,这个事件是由A中的方法触发的,而该事件本身的发生又会导致C类中某个方法的发生,请问程序该怎么写?主要是涉及到3个类,感觉不太好写 解决方案 class A { public B b = new B(); public void foo() { b.RaiseEvent(); } } class B { public C c = new C(); public event EventHandler event1; p