【蛙蛙推荐】想设计一个关于软件开发的元搜索引擎,希望大家支持

【蛙蛙推荐】想设计一个关于软件开发的元搜索引擎,希望大家支持
元搜索功能设计:
1、关键词处理:用户输入搜索关键字,对该搜索关键字进行本地的同义词处理,比如搜索【ORM】关键字,我们就可以把它包装成【ORM 对象关系映射 "O/R Mapping"】关键字,当然了这一步要求我们本地有个关键词的库,这个库的建立过程我想主要靠网友来提交和完善,我们只做软件开发领域的词库。另外就是对各种源搜索引擎的适配,加入说百度的“或”语法是“|”,google的“或”语法是“OR”,我们在向源搜索引擎提交请求的时候就要把用户输入转换成相应的语法提交到源搜索引擎。

2、源搜索引擎选择:因为我们定位的是知识搜索、软件开发领域搜索、代码搜索,所以我们要选择几个关键的有质量的源搜索引擎。初步确定如下
【google】【google site:blog.csdn.net】【google site:www.cnblogs.com】【百度】【百度知道】【新浪爱问】【雅虎知识堂】【msdn】【sf.net】【CodeProject】。一期先做google和baidu及他们的子搜索。

3、进行搜索:给每个源搜索的搜索做一个方法,然后给每个方法建立一个委托,异步的去搜索结果去,但是异步调用委托默认是从线程池获取线程,线程的优先级等无法指定,不过我们一期为了方便先这么着,等以后再把咱们认为质量高的源搜索引擎的执行线程的优先级调高一些,比如说【google site:www.cnblogs.com】。还有就是每个搜索引擎的结果只要前5页,再往后估计关联度就下降了,当然这个值是可配置的。当然搜索的时候要判断源搜索引擎的返回码,如果返回非200的返回码或者超时什么的都直接停止检索,这些部分要做一定的容错处理,并且超时的时间可配置。

4、结果分析:每个搜索引擎把结果弄回来都是一大箩字符串,我们用HTMLparser,NekoHTML,Jtidy等组件去把每页的结果格式花成XML格式。然后根据每个源搜索引擎特有的格式把【标题】【日期】【描述】【链接】等节点分析出来,然后放入一个总的ArrayList里面,这个ArrayList是保存所有的搜索结果,里面每个元素是一个【搜索结果】的结构,这个结构的成员如下【标题】【日期】【描述】【链接】【来源】。还有就是百度和google搜索一个关键字会自动在底部显示相关搜索的关键词,我们把这个也要抓住存起来,一来能显示给客户,进行二次搜索,二来作为咱们的同义词库保存起来,以后进行优化处理。

5、结果处理:把搜索结果列表ArrayList里的结果进行文本对比分析(文本比较的开源控件目前没有找到),把相似度比较高的结果进行去除重复的操作,到底留那个结果看源搜索引擎配置里的优先级,比如说这个结果来自【google site:www.cnblogs.com】当然就留这个结果了。另外如果找不到字符串对比组件的话就直接对比【链接】域,如果这个域相同就只保留一个优先级高的结果。

5、结果显示:ArrayList实现了IList接口,直接绑定到一个Grid上输出就行了,或者自己做一个结果输出的自定义控件。要支持分页。

6、结果排序:默认结果按照优先级和相关度排序,因为相关度的算法比较复杂,咱没那自创能力,但源搜索引擎搜索的时候已经进行了相关度处理,所以我们就可以按照源搜索引擎的优先级(咱们自定义的优先级)加上源搜索引擎搜索出结果的优先级为依据来显示搜索结果,就相当于sql语句里的两个排序条件。另外我们还要支持按日期倒序排列结果,只要自定义ArrayList的排序方法就可以了。

7、结果使用:结果已经下载到本地了,我们可以缓存到本地的SQLlite库里,进行对结果的再次搜索,或者以后的历史搜索。如果打开了一个结果详细页面发现这个页面有用,可以直接把这个页面的主体部分,就是有用的信息部分(去掉导航、广告、脚注)复制下来保存成mht单一文件格式,作为个人的知识库存储。

8、其它:我不打算把这个功能做成一个网站,而打算做成一个winform工具,一是因为可以减轻服务器压力,二是因为如果都用服务器做代理去搜索人家源搜索引擎的话,人家把服务器IP给封了就肝儿颤了,三来呢是因为可以做为一个功能集成到我的个人KM工具里。

欢迎大家发表意见,有意一起搞的朋友和我联系,有高手要指导工作的也请该出手时就出手,谢谢。

另外问俩问题:
有没有文本比较控件,比较两段文本的相似度?我只要得出一个比值。
有没有像写字板那样的文本编辑控件,可以自带一些格式按钮,如加粗、列表、表格、对齐、撤销等功能。

原文地址:https://www.cnblogs.com/onlytiancai/p/694776.html