论文部分内容阅读
摘 要:模拟百度、谷歌等搜索工具,利用爬虫和大数据来实现一个简单的新闻信息检索系统。此系统大致分为5个模块:先是利用爬虫来爬取网页的信息;利用2-gram分词来将获取到的网页建立索引;将索引排序;利用hadoop分布式存取索引;最后搭建前后端实现界面交互。五个环节关系紧密,核心环节就是索引的建立,利用2-gram分词提取关键字,再利用TF-IDF矩阵对关键字打分,得到矩阵之后,就可以利用K-means来讲关键字分类了。然后再按照评分将索引排序就可以得到用户所需要的信息。
关键词:爬虫 Hadoop 2-gram 分词 K-means
中图分类号:G64 文献标识码:A 文章编号:1672-3791(2019)03(c)-0006-02
1 系统内容
1.1 Web网页信息抽取
以山东大学新闻网为起点进行网页信息的循环爬取,保持蜘蛛在view.sdu.edu.cn之内。
1.2 索引构建
对上一步爬取到的网页进行结构化预处理,包括分字段解析、分词、构建索引等。
1.3 索引排序
对上一步构建的索引库进行查询,对于给定的查询,给出检索结果,明白排序的原理及方法。
1.4 数据库构建
利用爬取的新闻内容以及构建的索引建立数据库
1.5 前后端实现
基于数据库利用Java及HTML语言实现前后端交互,提供用户使用页面。
2 系统设计
2.1 爬虫部分
通过观察分析新闻主页可以发现我们需要的最终URL是:
http://www.view.sdu.edu.cn/info/1207/104940.htm
在信息爬取的过程中,所使用的工具为:
Python3+requests+bs4+collections。
实现过程如下:
(1)以http://www.view.sdu.edu.cn为种子URL,获取此网页中所有的以“.html”结尾的URL,并且把它加入到列表中避免重复访问。
(2)通过分析网页的源码可以发现有些URL省略了前缀,因此我们在处理这样的URL之前要先将其补全。
(3)找到每一个满足条件的URL(保持蜘蛛在view.sdu.edu.cn之内),并将其加入到队列中(这里采取BFS爬取策略)。
(4)之后依次从队列中取出队首的URL,如果是目标URL,则获取标题及正文信息,并存到文件中。如果不是目标URL,则依次进行(2)、(3)、(4)步骤。
(5)在爬虫的过程中维护一个目录文件,记录下每篇新闻的索引、URL、标题。
2.2 词项词典构建
词典构建时分词系统采用叠词方式,也就是将语句ABCDE分割成AB,BC,CD,DE四个单词。
这里使用了一个假设,即“与文档内容有关的词语不会只出现一次”,通过这个假设,我们可以排除绝大多数噪音词项。
比如“今天去济南”,“今天”“济南”这两个词项如果在文档中占据重要地位,那么会出现不止一次,而“天去”“去济”这两个干扰词项在绝大多数情况下只会出现一次,可以轻松除去。
基于以上假设,将所有文档遍历一遍之后就可以得到一个去除了大多数干扰项和部分有效实词的有损词典。但是考虑到最后的目的是制作一个有序搜索引擎,被损耗掉的部分实词往往在排序中所占据的得分份额也非常小,因此这个词典就可以被认为是有效的词典。
2.3 倒排索引构建、TF-IDF矩阵和特征矩阵构建
有了词典之后,就可以进行倒排索引操作了。
倒排索引操作时仍然使用叠加分词方式,但是只有存在于上一步产生的词典中的词语才会进入下一步操作。倒排索引的结果会生成一个类似二维链表的结构,每个链表头保存了词项名称,链表中间项保存了文档ID和词频,链表尾保存了文档频率和词语总频率。
利用链表尾保存的信息和文档长度信息,遍历一遍倒排索引即可直接生成TF-IDF矩阵。
考虑到最高频的词语在绝大多数文档中都出现,对特征影响小的原因,选取其中词频第100~400共300个词语进行SVD分解,这样就得到了特征矩阵。
2.4 文档聚类
在有了特征矩阵之后,直接使用UT矩阵,直接生成对参与到分类的文档的特征向量。
由于特征矩阵的计算和K-means迭代在大量数据的情况下单机运行十分缓慢,因此聚类被分成两步,第一步随机选择了一部分向量进行完整的K-means算法,这样就可以得√N个聚类中心;第二步对剩余的信息直接寻找和它们最近的聚类中心,直接视为这一聚类的追随者。
因为单机环境下推荐系统使用较少数据的效果更明显,第一步使用的部分向量在后面将用来实现推荐系统。
同时,根据聚类结果,将原始的TF-IDF矩阵分割成了数个较小的矩阵。每个聚类中最接近聚类中心的一个作为矩阵第一列的数据。
3 前后端实现
3.1 前端实现
使用JSP、JS、Java语言实现界面。
(1)大致划分:title检索栏、content内容新闻块。
(2)基本功能:输入检索自然语言,查询相关新闻,获取相关新闻标题URL信息,进一步跳转详细信息。
3.2 后端實现
自然语言处理,实现2-gram分词。
(1)单关键词查询:检索该关键词相关文档,利用tf值取其中前十位的文档ID,构建NEWS数据结构,生成结果。
(2)多关键字查询:将关键词拆分,利用tf*idf乘积作为每篇文档得分,最后将所有文档排序,取出TOP10。
4 结语
此系统不同于简单的前端调取数据库内容,这次数据库更多的只作为系统实现中的一小部分,清晰地了解了一个完整的信息检索系统的构成,从信息采集、信息处理、信息入库到信息利用和展示,一步又一步,让这个过程复杂又清晰。也通过对于信息检索的学习,逐步了解了真正的搜索引擎背后实现原理以及强大的技术支持。尽管在我们的系统中仅仅使用了python爬虫爬取、基于2-gram的分词以及索引构建、数据库的简单应用、TF-IDF得分计算、前后端实现这些技术,但已经得到了良好的效果。
此系统还有很大的完善空间,但是通过自己的努力基本实现了搜索引擎系统的基本要求,完成了包括关键词和复杂语言的查询操作,并且实现了良好的效果。
参考文献
[1] 李俊华.基于Python的数据分析[J].电子技术与软件工程,2018(17):167.
[2] 马明阳,郭明亮,魏留强.网络爬虫的专利技术综述[J].科技世界,2018(12):12-13.
[3] 陈丽,黄晋,王锐.Hadoop大数据平台安全问题和解决方案的综述[J].计算机系统应用,2018(1):1-9.
[4] 邱均平,方国平.基于知识图谱的中外自然语言处理研究的对比分析[J].现代图书情报技术,2014,30(12):51-61.
[5] 何晓兵,容金凤.基于层次目标分解法构建的认知信息检索模型[J].情报理论与实践,2014(2):14-18.
关键词:爬虫 Hadoop 2-gram 分词 K-means
中图分类号:G64 文献标识码:A 文章编号:1672-3791(2019)03(c)-0006-02
1 系统内容
1.1 Web网页信息抽取
以山东大学新闻网为起点进行网页信息的循环爬取,保持蜘蛛在view.sdu.edu.cn之内。
1.2 索引构建
对上一步爬取到的网页进行结构化预处理,包括分字段解析、分词、构建索引等。
1.3 索引排序
对上一步构建的索引库进行查询,对于给定的查询,给出检索结果,明白排序的原理及方法。
1.4 数据库构建
利用爬取的新闻内容以及构建的索引建立数据库
1.5 前后端实现
基于数据库利用Java及HTML语言实现前后端交互,提供用户使用页面。
2 系统设计
2.1 爬虫部分
通过观察分析新闻主页可以发现我们需要的最终URL是:
http://www.view.sdu.edu.cn/info/1207/104940.htm
在信息爬取的过程中,所使用的工具为:
Python3+requests+bs4+collections。
实现过程如下:
(1)以http://www.view.sdu.edu.cn为种子URL,获取此网页中所有的以“.html”结尾的URL,并且把它加入到列表中避免重复访问。
(2)通过分析网页的源码可以发现有些URL省略了前缀,因此我们在处理这样的URL之前要先将其补全。
(3)找到每一个满足条件的URL(保持蜘蛛在view.sdu.edu.cn之内),并将其加入到队列中(这里采取BFS爬取策略)。
(4)之后依次从队列中取出队首的URL,如果是目标URL,则获取标题及正文信息,并存到文件中。如果不是目标URL,则依次进行(2)、(3)、(4)步骤。
(5)在爬虫的过程中维护一个目录文件,记录下每篇新闻的索引、URL、标题。
2.2 词项词典构建
词典构建时分词系统采用叠词方式,也就是将语句ABCDE分割成AB,BC,CD,DE四个单词。
这里使用了一个假设,即“与文档内容有关的词语不会只出现一次”,通过这个假设,我们可以排除绝大多数噪音词项。
比如“今天去济南”,“今天”“济南”这两个词项如果在文档中占据重要地位,那么会出现不止一次,而“天去”“去济”这两个干扰词项在绝大多数情况下只会出现一次,可以轻松除去。
基于以上假设,将所有文档遍历一遍之后就可以得到一个去除了大多数干扰项和部分有效实词的有损词典。但是考虑到最后的目的是制作一个有序搜索引擎,被损耗掉的部分实词往往在排序中所占据的得分份额也非常小,因此这个词典就可以被认为是有效的词典。
2.3 倒排索引构建、TF-IDF矩阵和特征矩阵构建
有了词典之后,就可以进行倒排索引操作了。
倒排索引操作时仍然使用叠加分词方式,但是只有存在于上一步产生的词典中的词语才会进入下一步操作。倒排索引的结果会生成一个类似二维链表的结构,每个链表头保存了词项名称,链表中间项保存了文档ID和词频,链表尾保存了文档频率和词语总频率。
利用链表尾保存的信息和文档长度信息,遍历一遍倒排索引即可直接生成TF-IDF矩阵。
考虑到最高频的词语在绝大多数文档中都出现,对特征影响小的原因,选取其中词频第100~400共300个词语进行SVD分解,这样就得到了特征矩阵。
2.4 文档聚类
在有了特征矩阵之后,直接使用UT矩阵,直接生成对参与到分类的文档的特征向量。
由于特征矩阵的计算和K-means迭代在大量数据的情况下单机运行十分缓慢,因此聚类被分成两步,第一步随机选择了一部分向量进行完整的K-means算法,这样就可以得√N个聚类中心;第二步对剩余的信息直接寻找和它们最近的聚类中心,直接视为这一聚类的追随者。
因为单机环境下推荐系统使用较少数据的效果更明显,第一步使用的部分向量在后面将用来实现推荐系统。
同时,根据聚类结果,将原始的TF-IDF矩阵分割成了数个较小的矩阵。每个聚类中最接近聚类中心的一个作为矩阵第一列的数据。
3 前后端实现
3.1 前端实现
使用JSP、JS、Java语言实现界面。
(1)大致划分:title检索栏、content内容新闻块。
(2)基本功能:输入检索自然语言,查询相关新闻,获取相关新闻标题URL信息,进一步跳转详细信息。
3.2 后端實现
自然语言处理,实现2-gram分词。
(1)单关键词查询:检索该关键词相关文档,利用tf值取其中前十位的文档ID,构建NEWS数据结构,生成结果。
(2)多关键字查询:将关键词拆分,利用tf*idf乘积作为每篇文档得分,最后将所有文档排序,取出TOP10。
4 结语
此系统不同于简单的前端调取数据库内容,这次数据库更多的只作为系统实现中的一小部分,清晰地了解了一个完整的信息检索系统的构成,从信息采集、信息处理、信息入库到信息利用和展示,一步又一步,让这个过程复杂又清晰。也通过对于信息检索的学习,逐步了解了真正的搜索引擎背后实现原理以及强大的技术支持。尽管在我们的系统中仅仅使用了python爬虫爬取、基于2-gram的分词以及索引构建、数据库的简单应用、TF-IDF得分计算、前后端实现这些技术,但已经得到了良好的效果。
此系统还有很大的完善空间,但是通过自己的努力基本实现了搜索引擎系统的基本要求,完成了包括关键词和复杂语言的查询操作,并且实现了良好的效果。
参考文献
[1] 李俊华.基于Python的数据分析[J].电子技术与软件工程,2018(17):167.
[2] 马明阳,郭明亮,魏留强.网络爬虫的专利技术综述[J].科技世界,2018(12):12-13.
[3] 陈丽,黄晋,王锐.Hadoop大数据平台安全问题和解决方案的综述[J].计算机系统应用,2018(1):1-9.
[4] 邱均平,方国平.基于知识图谱的中外自然语言处理研究的对比分析[J].现代图书情报技术,2014,30(12):51-61.
[5] 何晓兵,容金凤.基于层次目标分解法构建的认知信息检索模型[J].情报理论与实践,2014(2):14-18.