Python实现简易搜索引擎

Python实现简易搜索引擎

一、实验内容

实现对Python知识点与编程案例的搜索,建立Python知识点与案例资料库。对使用者输入的搜索词分词、去停用词、取关键词,纠正用户的错误输入,实现检索,记录每次的搜索词。

本地资料库没有搜索结果则利用爬虫在百度搜索爬取结果,做到每次搜索都有内容呈现给使用者,并实现图形用户界面与使用者交互。

二、实验目的

实现Python知识的搜索,建立Python知识点与案例资料库,没有搜索到则利用爬虫到百度搜索爬取,做到每次搜索都有内容呈现给用户,并实现图形用户界面,争取模拟真正的搜索引擎。

三、实验过程

3.1 过程分析

3.1.1 阶段一

要实现Python知识案例搜索引擎,就要先知道本实验所需的搜索引擎的功能,本实验需要检索本地的Python知识案例库,则首先要实现对文件夹及文件的读取,这里我们利用了os模块功能自动获取资料库的绝对路径,并读取文件夹下的资料的文件名,放入一个txt文档中记录。

然后需要实现对搜索词的处理,得到关键词。这里,我们使用了中文自然语言处理常用分词模块——“jieba”模块,并自定义了用户词典及停用词,能更好地得到关键词,使搜索引擎在Python知识案例的搜索上有更好的表现。

最后利用“difflib”模块得出关键词与案例文件的匹配度,对匹配度排序,再得出索引,则可以实现对本地Python知识案例库的检索。

3.1.2 阶段二

阶段一实现了Python知识案例搜索引擎的基本功能,接下来就要考虑与使用者的交互了。这里为了简化代码,不破坏阶段一代码的逻辑结构,我们使用了图形用户界面的“easygui”模块,调用“enterbox”、“ccbox”等函数实现图形界面。

3.1.3 阶段三

阶段一与阶段二完成了一个简易搜索引擎所有内容,在阶段三,我们就考虑在阶段一与阶段二实现的搜索引擎的基础上添加新的功能。

首先我们考虑添加爬虫功能,因为我们搜集Python知识案例库仍然不是很完善,在搜索时会出现很多内容都搜索不到的情况,所以我们在继续丰富Python知识案例库的同时,在阶段一、二的基础上添加爬虫功能,如果有本地库搜索不到的情况,则在网络上爬取相关内容提供给使用者。

我们选择在百度搜索上爬取,利用“requests”、“urllib”、“lxml”模块,建立百度搜索接口,模拟浏览器,读取百度搜索结果的标题及链接,在图形用户界面中像百度搜索那样显示出来,点击标题即可以打开对应网址。

添加网络爬虫后,本搜索引擎就不再局限于本地资料库的Python知识案例,可以搜索任意百度搜索能搜索到的信息。

3.1.4 阶段四

为了实现更为实用、功能更全面的Python知识案例搜索引擎,我们在百度搜索进行了多次搜索。我们发现,百度搜索可以对用户的错误输入进行纠正,所以我们也进行了这方面的尝试。

我们使用“re”模块及“collections”模块,结合“big.txt”资源文件(一个英文的词库),实现了对英文单词的纠错,运行速度达到ms级

同时,我们利用“pycorrector”模块的“correct()”函数实现了对中文词语的纠错,但是由于中文词库过大,运行所需时间通常达到了15s以上,我们不得不放弃了中文词语的纠错,只实现了对英文的纠错。

3.1.5 阶段五

为了更好地实现本地搜索,我们单独写了一个用于爬取博客园文章内容的网络爬虫,用于搜集Python知识与编程案例。

3.2 运行结果及结果分析

3.2.1 运行结果

(1)输入界面:我输入的“paddlle”是一个错误单词
Python实现简易搜索引擎_第1张图片

(2)纠错:成功把“paddlle”纠正为“paddle”

Python实现简易搜索引擎_第2张图片
(3)本地搜索结果:(看来本地没有paddle相关的搜索结果,只有神经网络的搜索结果)
Python实现简易搜索引擎_第3张图片Python实现简易搜索引擎_第4张图片

(4)若不满意可以查看网络搜索结果:
Python实现简易搜索引擎_第5张图片

(5)网络(百度)搜索结果(爬虫):
Python实现简易搜索引擎_第6张图片
(6)点击打开网页:
Python实现简易搜索引擎_第7张图片
(7)循环,返回搜索框:
Python实现简易搜索引擎_第8张图片

3.2.2 结果分析

实验实现了搜索句的分词、提取关键词,实现了对错误输入的检测及纠正,实现了在本地资料库的检索,实现了网络爬虫爬取百度搜索结果,实现了图形用户界面,完整地完成了实验内容,达到了实验目的。

四、优缺点及改进方向

本实验较好地模仿了一个真实的搜索引擎,除了最基本的搜索本地资料外,还添加了爬取百度搜索结果功能、自动纠正错误输入功能,使本搜索引擎功能更完善,更贴合用户需求。本地资料库与网络爬虫相结合可以尽可能地找出用户想要地资料。

但是我们仍有许多不足之处。在自动纠正错误输入功能上,我们只实现了自动纠正英文,没有把纠正中文功能加入引擎中。在检索上,偶尔会出现一些莫名的bug,无法找到原因。在网络爬虫上,在关键字过多时,有时无法爬取到结果。在图形界面上,界面过于简单,仍待优化。

不过我们还是可以继续改进代码的,由于时间有限,只能到此为止了。在自动纠正错误输入功能上,可以优化中文纠错时间,争取减少到1、2秒,并且可以在纠错功能、爬虫功能实现的同时,图形用户界面显示处理进度,即进度条,这可能会用到多进程。在图形界面上,可以用“wxpython”模块代替“easygui”模块,编写图形用户界面,并把界面制作的更美观。在检索上,可以用数据库代替txt,加快检索速度,还可以对内容提取关键词,结合标题,双重评价匹配度,提高检索准确度。

附:

代码见github:https://github.com/ccc-hhh/Python-

你可能感兴趣的:(Python实现简易搜索引擎)