APP下载

基于ElasticSearch的科技情报采集检索系统设计与实现

2024-09-13王柳然石明翔刘丰硕关紫莲陈昊东赵云

电脑知识与技术 2024年22期

摘要:文章针对科研人员在大数据时代获取科技情报的需求,提出了一种基于ElasticSearch的情报采集检索系统。该系统主要包括多源数据采集、大数据存储和智能检索功能。通过采用ElasticSearch、Selenium、Kafka等大数据技术构建分布式数据采集引擎,实现对互联网上多模态数据的高效采集、处理、融合和存储。在检索方面,系统采用分布式引擎实现快速信息检索和响应,为科研人员提供便捷的查询和访问功能。经测试,该系统检索性能相较传统的关系型数据库提升约32%。

关键词:自动化采集;高性能检索;ElasticSearch;情报采集

中图分类号:TP391 文献标识码:A

文章编号:1009-3044(2024)22-0053-04

开放科学(资源服务)标识码(OSID)

0 引言

随着信息技术与经济全球化的蓬勃发展,目前正处于信息量爆炸的时代[1]。在这种“信息过载”的背景下,数据的增速与增量空前绝后,推动了分布式存储技术的广泛应用[2]。国内学者已经开始采用基于主题的数据采集技术,成为当前开源情报获取的主流方式之一,这些技术在党建领域、招聘网站职位需求变化、教育类新闻和航天领域竞争情报等方面得到了广泛应用。与此同时,国外学者早在数年前就开始了基于主题的数据采集技术的应用,并将机器学习等先进算法融入采集程序中以提高效率[3]。总体而言,主题为基础的数据收集技术在网络信息收集领域得到了广泛应用,它是目前解决“信息迷航”问题并提高开源信息准确获取能力的关键途径。然而,以上学者更多地依赖于基于主题的数据采集技术,只针对特定数据源,而情报需要涵盖各种主题的数据。因此,这些并不适用于当今海量数据的大数据时代。并且,这些学者仅仅关注于数据采集的研究,而未对海量数据的高效存储、检索以及融合处理进行深入探讨。

本文提出了一种面向海量多模态数据的情报采集与检索系统。该系统主要包括多源数据采集、大数据存储和智能检索功能。通过采用Selenium、Kafka、Elastic Stack等大数据技术构建分布式数据采集引擎,实现了对互联网上各种形式数据的高效采集、处理、融合和存储。

1 相关技术

1.1 分布式全文搜索引擎Elasticsearch

Elasticsearch 是一个开源的分布式全文搜索引擎,基于Apache Lucene构建,专注于实时搜索和大规模数据分析。其强大的搜索和分析功能使其在各种应用场景中广泛应用,包括文档检索、日志分析、企业搜索等。在ElasticSearch中,索引、类型和文档之间的关系如图1所示。它采用了倒排索引的机制,使得文本搜索具有近实时性能。倒排索引按照指定语法对每个文档进行分词和分析,然后维护一张表,列举所有文档中出现的单词以及它们所属的文档ID和出现频率。这种倒排索引的存储形式实现了一种“单词-文档矩阵”,主要由单词词典、倒排列表和倒排文件组成。

1.2 Web自动化技术Selenium

随着互联网的不断发展,Web应用程序的复杂性和多样性不断增加。传统的手动测试方法已经无法满足快速迭代的软件开发需求,因此自动化测试工具逐渐成为软件开发过程中不可或缺的一部分。Selenium作为一种强大的自动化测试工具,通过模拟用户在浏览器中的操作,实现对Web应用程序的自动化测试,从而提高测试效率和准确性。

1.3 分布式流处理消息队列Kafka

Kafka是一种开源的分布式流处理消息队列,最初由LinkedIn公司开发,并在成为Apache项目后得到了广泛应用。作为一种高性能、可扩展且持久性强的消息队列系统,Kafka在处理大规模数据流、消息传递和事件驱动应用方面具有卓越的优势。

2 系统设计与实现

2.1 系统架构

如图2所示,本文的系统设计采用分层架构,包括基础资源层、数据采集层、数据处理存储层、数据分析层、应用支撑层和应用层。在基础资源层,包括互联网数据、语料库、索引库和元信息库等资源,为整个系统提供了必要的信息基础。数据采集层负责通过模块如Flask、Selenium、Requests等进行情报的采集工作,同时使用Bloom Filter进行数据清洗,以确保数据的质量和准确性。采集到的数据存储在MySQL数据库和Elasticsearch中。自然语言处理层运用了诸如TextRank等算法,用于提取摘要和关键词,同时为爬虫子系统提供了接口,以支持高级的数据分析功能。应用支撑层依赖ElasticSearch弹性搜索引擎,构建了高效的分布式检索子系统,为用户提供快速的数据检索服务。应用层包括多项功能,如情报采集、情报管理、情报分析、情报检索、摘要提取、关键词提取和爬虫设置等,以满足用户的需求。

2.2 数据采集层

为了提高数据的可用性和价值,本系统数据采集层使用Selenium进行数据爬取,同时利用TextRank等算法提取摘要和关键词,并将其存储。通过这一步骤,为数据分析层提供了接口,实现对采集数据的处理和分析。

首先,Python爬虫服务器监听Kafka消息队列,一旦有新消息(即情报任务),即开始消费。对于每个任务,爬虫服务器收到任务消息后,即开始相应的数据采集工作。如图3所示,这包括根据任务中指定的采集源,利用Selenium工具模拟人类行为进行数据采集,以规避网站的反爬措施。采集到的原始数据经过清洗,去除噪音和冗余信息,并进行网页正文提取。

1) 步骤1:初始化Selenium Client通过Web Driver操控浏览器模拟人为操作。

2) 步骤2:采集程序首先针对用户输入的关键词在搜索引擎上进行检索,以百度为例。如果检索结果中包含百度推广或广告,则将其过滤,否则程序将进入网页。

3) 步骤3:在进入网页后,程序会获取当前网页的URL,并与数据库中已存储的数据进行比对。如果发现重复,则会跳过该条数据,这一步骤旨在进行初步的去重处理。

4) 步骤4:如果页面不重复,则程序将爬取该页面的HTML代码部分,以获取情报内容。

5) 步骤5:爬取到的HTML代码将通过数据处理模块进行清洗,去除噪音和冗余信息。随后进行网页正文提取,并将提取的内容存入数据库,以备检索之用。

2.3 数据处理层

数据处理层的主要任务是清洗爬取到的HTML代码并提取其中的关键词和摘要等信息。由于爬取到的数据中包含大量HTML标签,这些标签会影响后续关键词和摘要提取的质量。因此,本文首先采用基于文本及标点符号密度的网页正文提取算法进行正文提取。网页正文提取即从HTML网页中提取核心文本信息。鉴于搜索引擎采集的数据种类繁多,包含大量无关信息,如导航栏、页眉、页脚等元素,并非正文内容。这些元素的存在会降低后续关键词和摘要提取的质量。因此,通过采用基于文本及符号密度的网页正文提取算法,可以有效解决这一问题,精准提取出页面的核心文本,从而提高后续处理的效果。

如图4所示,首先将网页源码进行预处理,之后进行Dom树构建,计算每个节点变量的分数提取出网页正文进行输出。

提取到正文之后,将利用TF-IDF、TextRank等算法进行关键词提取和摘要提取。利用TF-IDF等算法从文本中自动识别和提取最具代表性和重要性的关键词或短语。根据单词在文本中的频率(TF) 和在整个语料库中的逆文档频率(IDF) 来计算关键词的重要性。被认为是关键词的单词具有较高的TF-IDF值,因为其在文本中频繁出现且在整个语料库中占据重要位置。虽然词频是确定关键词重要性的一个因素,但并非唯一因素。因此,TF-IDF算法会综合考虑词频以及词在整个文本集中的频率。如公式(1) 所示为词频计算公式。

[TFij=ni,jΣknk,j] (1)

式中,分子[ni,j]为目标词的个数,TF值由目标词在文本中出现的次数除以文本总词数得出,其中文本的长度对TF值具有一定影响,一般会在计算时对词频进行归一化处理[4]。通过关键词的提取,系统可以为后续的分类、聚类和数据分析提供重要的数据支持。提取的关键词或短语可以作为特征向量,用于文本分类或聚类算法的输入,帮助系统更好地理解和组织文本数据。

为了方便用户更直观地了解采集内容,因此将网页正文进行摘要提取,从而抽取出包含主要信息的简洁概括。TextRank算法是一种基于图的排序算法,用于文本摘要和关键词提取。它首先构建文本中句子或词语的加权无向图,然后通过迭代计算每个节点的重要性得分,最终根据节点得分进行排序,选取得分高的节点作为文本摘要的关键句子或关键词。这一算法简单有效,不需要依赖领域特定的语料库或训练数据,因此在文本处理、信息检索和自然语言处理领域得到广泛应用。在基于TextRank算法的自动文摘实现中,一般模型可表示为以句子为图中的文本单元顶点,句子相似度为边的图模型。具体实现上,模型由顶点集和边集组成,顶点权重的计算以及顶点间的联系可表示如式(2) 所示。

[WSVi=(1-d)+d×∑Vj∈In Vi ωji∑Vk∈OutVj ωjkWSVj] (2)

2.4 应用支撑层

基于Lucene构建的开源分布式搜索引擎Elasticsearch,具备高可靠性,并支持多种企业级搜索应用场景。利用其弹性搜索技术,本文构建了高效的分布式检索子系统,以提供对采集数据的快速检索和查询功能。该系统支持多维筛选、相关性排序和聚类分析等功能,旨在提升用户的检索效率和准确性。

在ElasticSearch中,单词词典记录了单词与倒排列表之间的映射关系,通常基于B+树或Hash拉链法实现,以保证在查询、插入和删除等操作时的高性能。倒排列表由倒排索引项组成,主要记录了单词对应的文档ID列表、单词频率、单词位置和单词偏移等信息。这些倒排列表通常按顺序存储在倒排文件中,倒排文件是倒排索引的物理文件,存储在磁盘中[5]。ElasticSearch中的数据倒排索引存储示例如表1所示。流程如图5所示。

由于本系统需要进行高性能检索,因此将数据进行以上倒排索引存储在ES中。以提供对采集数据的快速检索和查询功能ES存储结构设计如下:

各字段含义:

data = {

'url':,网址

'content': "",正文

'user_id': []所归属用户id

}

2.5 应用服务层

应用层直接与用户进行交互,提供情报采集、情报管理、情报分析、情报检索、摘要提取、关键词提取、爬虫设置等功能,方便用户进行知识情报工作。用户可以通过界面操作进行数据采集、查询、分析和导出,提高工作效率和决策能力。

3 实验验证

为了验证系统的执行效率,本文环境采用3台服务器,一台为Winserver爬虫服务器,两台Ubuntu系统应用服务器,配置均为2核8G内存。实验通过对不同数据量,长文本全文进行关键词检索,并将MySQL与ES执行效果进行对比,结果如图6所示。

实验结果表明,在数据量较少时,传统关系型数据库反而显示出性能优势。然而,数据量达到约2 000条时,在长文本全文检索方面,Elasticsearch(ES) 的效率有所提高。在数据量达到5 000条时,平均处理时间相比传统关系型数据库减少了约32%左右。实验结果证明在大数据量长文本全文检索中,随着数据量增大,本系统能够做到快速响应,表现出本系统良好的性能。

4 结束语

本文基于Elasticsearch高性能检索引擎,结合了Selenium自动化技术、Kafka消息队列,以及TextRank和TF-IDF等自然语言处理相关算法,实现了基于ElasticSearch的科技情报采集检索系统。通过Selenium模拟人工操作,有效规避了网站的反爬机制,并利用正文提取算法从复杂的HTML代码中提取有用信息,使用Elasticsearch实现了高性能的检索。经过对比测试,在处理大数据量时,相较于传统的关系型数据库,系统的全文检索性能提升了约32%,充分证明了该系统在检索效率方面的出色表现。

参考文献:

[1] 王勇.基于大数据平台的企业竞争情报系统设计及应用研究[D].昆明:昆明理工大学,2018.

[2] 秦宗和.基于数据挖掘的图书馆智库情报服务构建研究[J].图书馆学刊,2018,40(6):43-47.

[3] 张林.民航信息情报采集系统的设计与实现[D].上海:上海交通大学,2016.

[4] 张洋.基于TextRank算法的自动文摘系统的设计与实现[D].北京:北京邮电大学,2021.

[5] 李峰,宋宴,魏广泽,等.基于ElasticSearch的海量遥感数据检索技术研究[J].计算机与网络,2021,47(5):57-61.

【通联编辑:谢媛媛】