- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
郑楚彬林小译实验报告
课程作业任务书
课程名称:算法设计训练项目名称:中文全文搜索引擎的设计与实现实验时间:2011.12.19~2011.12.30实验班级:10计本1指导教师:马震远
计算机科学 学院 网络中心 实验室
二〇一一 年 十二 月 29 日
广东技术师范学院实验报告
学院计算机学院专业计算机科学与技术班级10计本01班成绩组别第1完成人郑楚彬第2完成人林小译学号2010034243013学号2010035544026实验地点:网络中心机房实验日期:2011/12/29指导教师签名:
项目名称: 中文全文搜索引擎的设计与实现
1.项目概述
功能:实现一个中文全文搜索引擎,能够快速检索中文关键字在文本集中出现的位置。并实现简单的布尔查询短语,还有简单的短语查询。
平台:个人PC机,vc++6.0。
编程语言:C、C++;
项目周期:2011年12月19日~2011年12月28日。
本程序实现
(A)对特定目录下的文件进行查找,并以一定的数据结构为文本集建立索引。
查询到的结果能给出特定文档的路径。
(B)实现了查询特定的词语,并能输出摘要,和文本信息。
(C)实现了根据词语在各个文本中出现的次数不同,进行排序。
(D)实现了简单的BOOL查询。
(E)实现了短语查询.
(F)记录词在文档中的位置信息,查询该词时,能返回该词在文档中出现的摘要并用不同颜色显示查询词.
程序运行截图:
2.设计思想
本程序的设计思想是根据每个词语都相当一个字符串(测试集已经分好词),而每个字符串又可以生成关键码。
我们可以通过建立哈希表,之后根据关键码就可以找到指定的字符串的信息。设计一个结构体来存储这些信息,如词频,位置,因为所查找的文档比较大,所以采用开散列来节省内存分别动态的开辟两个结构体链表,一个存储不同的词,一个存储一个的位置信息。
程序最关键的是建立好哈希表,这样查找的时候就很方便、快捷。
查询则根据关键码在哈希表进行查询即???。
接下来就是一些功能上的添加,如在实现分类算法,使得查询结果能够像google一样将最相关的结果排在前,我们根据另外用一个结构体来存储查找到的信息,然后进行排序,则可以输出根据词频排序的结果。
记录词在文档中的位置信息,查询该词时,能返回该词在文档中出现的摘要并用不同颜色显示查询词。
简单的布尔查询,用两个变量来判断即可实现。
短语查询根据位置来进行判断。
3. 特色之处
根据对特定的字符串生成特定的关键码,然后进行快速查找。在内存上操作,最多能实现300M左右文档的处理,而且读入的速度相对较快。
4.组员的分工和每个人的工作量
组长负责整个程序思路大框架的设计如建立哈希表,查找指定的词语,分类算法,组员负责测试文本及实现一些功能,如简单的布尔查询和根据词频排序等。
整个程序遇到的困难有:如何表示中文的关键码,尽可能使关键码的范围变大,减少冲突。
在内存建立哈希表操作遇到最多的问题是内存不足,导致溢出,最终通过建立动态链表解决。
在读入文件的时候采用前期是采用FREAD()这个函数,但后来发现读进来的一个字符串很难再处理成一个个词语出来,因为一整块读进来的话有很多乱码要处理,而且文件指针很容易指乱了,这样造成在后期的工作中经常出现BUG。经过测试,还是觉得采用FSACNF()这个函数来读入词语,这样的话在文件指针方面就比较容易处理,在后期工作的时候很方便。
在输出摘要的过程中,为了查找到的词语能明显的区分出来,在网上找了一个实现改变指定词语颜色的函数。实现了在返回的时候一不同的颜色显示出来。
在实现简单的布尔查询,能够找出同时含有指定的两个词语的文档。
(5)程序的改进
在前期工作中,由于采用数组,导致不能读取大文档,经过改良之后程序实现了最多能
读取300多M左右的文档,并能够快速查询。
程序经过全体组员的共同努力,从最初的只能统计词语的频数,到能够实现摘要的输出,
并最终实现了根据词频进行排序,一步步的完善功能。
在逻辑查询方面做的就还不够完善,只能实现简单的布尔查询,不能实现更复杂的逻辑查询。
由于时间有限,并没有花太多时间在界面的设计上,所以相对来说,界面还是不够友好。
整个程序由于是采取内存操作,所以只能做静态索引,相对动态索引还是有一定的劣势。
不能实现对建立的索引进行永久保存。
(6)小组总结
前期工作一定要先设计好整个程序的框架,设计比盲目的敲写代码寻找灵感更重要
文档评论(0)