APP下载

基于PyQt的全文搜索引擎平台开发

2018-12-10张文超胡玉兰

软件导刊 2018年9期

张文超 胡玉兰

摘要 网络信息数量的日益增加,对人们从中获取有效信息的能力提出了更高要求。为了更好地响应用户需求,提高信息处理效率并降低人力成本,基于PyQt进行全文搜索引擎平台开发。采用模块化思想设计网络信息采集功能,然后将获取的信息经数据处理后建立索引库,采用PageRank算法对查询响应结果进行排序,实现检索器功能,并通过用户的点击决策,利用神经网络对排序结果进行二次修正。最后,在界面输入查询字符串后,便可快速得到已排序的链接响应,从而能更好地反映用户对检索结果的感兴趣程度,并提供个性化服务。

关键词关键词:全文搜索引擎;网络信息采集;PageRank;PyQt

DOIDOI:10.11907/rjdk.181009

中图分类号:TP319

文献标识码:A文章编号文章编号:16727800(2018)009013204

英文标题Development of FullText Search Engine Platform Based on PyQt

--副标题

英文作者ZHANG Wenchao, HU Yulan

英文作者单位(Institute of Information Science and Technology,Shengyang Ligong University,Shengyang 110159,China)

英文摘要Abstract:With the increasing of network information,people also have higher requirements on their ability to obtain effective information.In order to better respond to users'needs,improve the efficiency of information processing and reduce human resources,the function of network information collection is designed with the idea of modularizationfocusing on the hot technology of fulltext search engine,and the index database after the data is established and processed,then we use PageRank algorithm to implement the retriever function in the query response,and the ranking results are secondarily corrected by using the neural network through the user's click decision.At last, after the completion of the development of fulltext search engine system platform by using of PyQt, the query string is inputted in the interface and the sorted link response can be quickly obtained,which can better reflect the users' interest in the search results and provide personalized service.

英文關键词Key Words:fulltext search engine;network information collection;PageRank;PyQt

0引言

随着计算机与网络技术的快速发展,每天的信息量呈爆炸式增长,搜索引擎应运而生。搜索引擎通过对互联网上的信息资源进行采集、提取和组织处理,为用户提供检索服务,已成为当今一种必不可少的网络资源获取工具,也是科研人员研究的重点方向。

文献[1]和文献[2]采用对象交换模型将页面中结构化标签对应的数据部分抽取出来,形成相应的Web信息模型,但由于Web网页结构只是一种信息的简单表现形式,使用这些标签进行信息抽取[3]得到的精度、可信度不高,因此对网络信息的采集进行模块化设计,对页面的文本内容进行预处理后建立索引库,实现基于内容的信息抽取;文献[4]设计一个基于Web的全文搜索引擎,扩充了系统的全文检索范围,实现了基于同义词的检索;文献[5]介绍一种个性化智能Agent搜索引擎设计方案,采用内容过滤的方法构造用户个性化信息表,但无法体现搜索结果的重要程度。本文介绍一种采用PageRank对检索响应网页进行排序,并根据用户点击决策,利用神经网络修正排序结果的方法,可更好地反映用户对检索结果的感兴趣程度。

1编程环境搭建

PC端全文搜索引擎的服务器操作系统采用Windows 7,开发平台采用Anaconda2.3+PyQt4+eric44.5.24。Anaconda是一个用于科学计算的Python发行版,支持 Linux、Mac、Windows系统,提供了包管理与环境管理功能,可以很方便地解决多版本Python并存、切换以及各种第三方包安装问题。Anaconda利用工具/命令conda进行package与environment的管理,并且已包含了Python和相关配套工具。PyQt是一个GUI库,是将Python和Qt结合在一起的产物[6],而Qt是目前比较成功与强大的GUI库。Eric4是一个用PyQt4和QScintilla2开发的Python集成开发环境,非常适合开发Python的GUI应用。首先安装Anacoda,并选择Python为默认解释器;接着安装PyQt,选择默认方式安装;然后安装Eric4,在文件夹下双击install.py。如果是首次安装Eric4,则需要首先配置运行环境,在Editor目录下APIs的Language选项中选择Python语言,点击Add from installed APIS,默认选择eric4.api;最后单击Compile APIS进行编译,以加快运行速度。完成上述操作后,则会在Anacoda安装路径下生成eric4.bat文件,至此开发环境搭建完毕。

2全文搜索引擎体系结构

现有的搜索引擎根据工作原理可划分为全文搜索引擎、信息检索Agent、目录搜索引擎和元搜索引擎4类[7],其中全文搜索引擎是应用最广的引擎。全文搜索引擎主要由网络资源采集、数据处理、索引库构建与结果排序4部分组成,结构如图1所示。

网络资源的采集由网络爬虫完成,网络爬虫通过解析URL链接获取网页内容,检查该页面内容后,再寻找另一个URL,不断循环该过程采集资源;数据处理可进一步精炼数据,将网络中杂乱无章的数据聚合成规范、合理的形式,以方便分析处理;索引库需要保存URL链接及其页面内出现的单词位置信息,并对页面内容进行过滤和分词;结果排序是对检索返回信息与检索目标间相关度的一种度量,同样也是搜索引擎的重要技术,对返回高质量的检索响应起着关键作用。

3主要模块功能实现

3.1网络资源采集

网络数据采集也称为网络爬虫[8]或数据挖掘,利用Python的标准库urllib2和非标准库BeautifulSope,通过广度优先[9]的搜索方式实现数据采集。urllib2下的urlopen方法可以打开并获取一个网络远程对象,BeautifulSoup通过对网页HTML标签的定位,可格式化并组织复杂的网络信息。网络资源的采集架构主要由URL管理器、网页下载器与网页解析器3部分组成[10]。URL管理器管理待抓取和已抓取的URL,防止重复抓取与循环抓取;网页下载器负责将互联网上URL对应的网页下载到本地;网页解析器对网页内容进行结构化,以便后续的数据处理,并从中获取有价值的信息。

网络资源获取过程如下:①在URL管理器中检查是否存在待爬取的URL链接,如果有则将该URL传递至网页下载器,下载页面内容;②将已下载的URL内容交付给网页解析器以结构化网页,并将页面中指向其它页面的URL链接输出至URL管理器;③由URL管理器判断这些URL是否存在于已爬取的URL列表中,如果不存在,则将其添加至待爬取URL队列中。重复迭代该过程便可不断获取网络资源。

3.2数据处理

采集好的HTML文档中包含许多不在索引范围内的标签和属性等信息[11],所以首先需要提取出网页的纯文本部分,利用BeautifulSoup对象的contents属性将所有标签节点以列表形式输出,并利用string属性以递归向下的方式取出所有文本信息,最后以长字符串的形式返回。

建立索引需要的是网页的URL链接和其所对应页面内容中的单词及单词位置信息,因此首先应获得网页中所有a标签中herf属性中的内容,其次将获取的文本字符串划分为词组。筛选URL链接可用BeautifulSoup对象的标签属性一步获得,而词组划分需要用到正则表达式与Python的非标准库jieba。jieba是一款基于Python的中文分词工具,采用动态规划查找最大概率路径,以找出基于词频的最大切分组合。中文的utf8编码在u4e00u9fa5范围内,根据该约束使用正则表达式提取出所有中文字符串,并可利用jieba的搜索引擎模式切割获取到的中文字符串,以便后续建立索引。

3.3索引库建立

索引不仅包含了所有词组的文本和位置信息,还包含文本所属网页的URL及其与文本之间的链接信息。利用SQLite创建索引库,SQLite是一个嵌入式数据库,在Pyhton中使用SQLlite3建立与数据库的连接,将索引所需信息分别保存在5张数据表中,分别是单词列表、单词位置信息表、URL链接表、URL外部指向链接表,以及URL与单词映射关系表。其中单词位置信息代表单词在页面中出现的顺序,以单词在表中的ID字段进行标识。URL链接和外部指向链接信息在网络资源采集时由URL管理器部分获得。

索引库的GUI显示结果如图2所示,GUI程序建立的第一步需要与数据库建立连接,PyQt4的QtSql模块提供了与平台及数据库种类无关的访问SQL数据库接口;连接建立之后使用QSqlTableModel模块载入相关数据表,QSqlTableModel类是一个独立处理数据库的高级界面接口;最后在QTableView窗口部件中显示设置好的模型。

3.4结果排序

无论何种搜索引擎均以在最短时间内提供给用户最满意的结果为目的,在大量满足条件的响应页面中,用户不可能系统浏览所有查询结果[12],结果排序在用户对网络搜索引擎的满意度及检索相关文档成功率方面有着重要影响[13]。排序算法可根据搜索结果与查询字符串的相关性对包含目标信息的网页按递减顺序排序,算法按原理可分为基于文本内容和基于链接两大类[14]。基于文本内容的排序方法以与查询字符串匹配的单词频度、单词在网页中出现的相对位置和单词出现顺序等为影响因子进行排序;基于链接的排序以相互链接网页之间相关度对其重要程度的影响为考量。

基于链接的排序方法已广泛应用于商业搜索引擎中,其利用基于链接的PageRank算法对检索响应页面进行排序。该算法的基本思想是为每个网页给定指示其重要程度的评价值,而每个网页的重要性依赖于所有指向该网页的其它网页重要性[15]。网页的PageRank值计算方法如下:

PR(X)=(1-d)+d∑ni=1Pr(Ti)C(Ti)(1)

式中,d为阻尼因子,代表用户持续点击每个网页中链接的概率,在本文中设定为0.85。n是链接到网页X的网页总数,Ti是链接到网页X的第i个页面,C(Ti)是网页Ti指向其它页面的链接总数。在该算法中,计算每个网页的评价值需预先知道指向该页面其它页面的评价值,所以首先應为每个网页设定一个初始评价值,然后通过迭代计算逐渐逼近真实值,迭代次数根据网页数量确定。

利用PageRank算法排序的结果只是基于网络信息,并不能反映用户兴趣目标,所以可通过建立一个神经网络,根据用户对检索响应网页的点击决策修正排序结果[16],以提供更加人性化的服务。构建的神经网络共使用三层神经元,第一层接收查询字符串,第二层为隐藏层,负责对输入进行组合,第三层返回不同URL的权重列表。对输入层到隐藏层,以及隐藏层到输出层的默认权重分别设定为-0.2和0。

输入层每次接收到未见过的词组,便在隐藏层中新建一个节点,并为单词与隐藏节点之间,以及查询节点与响应链接结果设置默认权重的连接。神经网络中利用反双曲正切变换函数衡量每个节点对输入的响应程度,以构造前向传递算法,返回所有输出层节点的输出结果。0值代表所有用户未点击的URL,1值代表用户点击过的URL。节点间连接的权重值根据每个输出层的期望输出,利用反向传递法进行更新。对于输出层,首先计算每个节点当前输出结果与期望结果之间的差距,然后利用当前输出级别上的斜率,确定节点总输入的改变量,最后改变每个外部回指链接的强度值,其值与当前链接的强度及学习速率成一定比例;对于隐藏层,首先将每个节点输出链接的强度值乘以其目标节点所需的改变量,累加求和后改变其输出结果,然后利用当前输出级别上的斜率确定总输入的改变量,最后改变每个输入链接强度值,其值与链接的当前强度及学习速率成一定比例。

4自定义搜索

自定义搜索功能的实现建立在上文各模块功能基础之上,可提供主题搜索服务,其用户界面如图3所示。用户可以在链接输入框中输入某一感兴趣主题任意网页的URL,然后单击“爬取”,即可使后台在网络中自动采用广度优先模式收集该主题的网络资源,将其处理后建立索引,随后在搜索文本输入框中输入与主题相关的关键词,便可得到排序后的链接及其评分结果。

5结语

本文介绍了基于PyQt的全文搜索引擎系统,以方便用户理解搜索引擎工作流程。全文搜索引擎共有5大功能模块,分别是网络信息采集、数据处理、索引库建立、结果排序与神经网络训练。然而,神经网络部分的隐藏层较少,用户评价度量单一,还需作进一步改进。

参考文献参考文献:

[1]LUCA IOCCHI.The WebOEM approach to Web information extraction[J].Journal of Network and Computer Appications,1999,22:259269.

[2]黄豫清,戚广志,张福炎.从WEB文档中构造半结构化信息的抽取器[J].软件学报,2000(1):7378.

[3]SHEN,LI,WANG,et al.Multilevel discriminative dictionary learning towards hierarchical visual categorization[C].IEEE Conference on Computer Vision and Pattern Recognition.Institute of Electrical and Electronics Engineers,2013:383390.

[4]陈康,许婷,戴文俊,等.基于Web的全文搜索引擎的设计与实现[J].计算机工程,2005(20):5153.

[5]金玉坚,刘焱.基于用户的个性化智能搜索引擎[J].现代情报,2005(7):170172.

[6]陈笑飞,李滔.基于Python的虚拟仪器技术研究及实现[J].电子设计工程,2012,20(16):4850.

[7]JANSEN B J,POOCH U.A review of Web searching studies and a framework for future research[J].Journal of the Association for Information Science & Technology,2001,52(3):235246.

[8]RUNGSAWANG A,ANGKAWATTANAWIT N.Learnable topicspecific web crawler[J].Journal of Network & Computer Applications,2005,28(2):97114.

[9]GWETU M V.The application of sampling to the design of structural analysis Web crawlers[J].International Journal of Computer Science Issues,2010.

[10]刘玮玮.搜索引擎中主题爬虫的研究与实现[D].南京:南京理工大学,2006.

[11]熊忠阳,蔺显强,张玉芳,等.结合网页结构与文本特征的正文提取方法[J].计算机工程,2013,39(12):200203,210.

[12]BARILAN J.Comparing rankings of search results on the Web[J].Information Processing and Management,2004 (41):15111519.

[13]COURTOIS M P,BERRY M W.Results ranking in Web search engines[J].Online,1999,23(3):3946.

[14]MCCALLUM A K,NIGAM K,RENNIE J,et al.Automating the construction of internet portals with machine learning[J].Information Retrieval,2000,3(2):127163.

[15]馮振明.Google核心——PageRank算法探讨[J].计算机技术与发展,2006(7):8284.

[16]金祖旭,李敏波.基于用户反馈的搜索引擎排名算法[J].计算机系统应用,2010,19(11):6065.

责任编辑(责任编辑:黄健)