摘要:文章針對科研人員在大數(shù)據(jù)時代獲取科技情報的需求,提出了一種基于ElasticSearch的情報采集檢索系統(tǒng)。該系統(tǒng)主要包括多源數(shù)據(jù)采集、大數(shù)據(jù)存儲和智能檢索功能。通過采用ElasticSearch、Selenium、Kafka等大數(shù)據(jù)技術構(gòu)建分布式數(shù)據(jù)采集引擎,實現(xiàn)對互聯(lián)網(wǎng)上多模態(tài)數(shù)據(jù)的高效采集、處理、融合和存儲。在檢索方面,系統(tǒng)采用分布式引擎實現(xiàn)快速信息檢索和響應,為科研人員提供便捷的查詢和訪問功能。經(jīng)測試,該系統(tǒng)檢索性能相較傳統(tǒng)的關系型數(shù)據(jù)庫提升約32%。
關鍵詞:自動化采集;高性能檢索;ElasticSearch;情報采集
中圖分類號:TP391 文獻標識碼:A
文章編號:1009-3044(2024)22-0053-04
開放科學(資源服務)標識碼(OSID)
0 引言
隨著信息技術與經(jīng)濟全球化的蓬勃發(fā)展,目前正處于信息量爆炸的時代[1]。在這種“信息過載”的背景下,數(shù)據(jù)的增速與增量空前絕后,推動了分布式存儲技術的廣泛應用[2]。國內(nèi)學者已經(jīng)開始采用基于主題的數(shù)據(jù)采集技術,成為當前開源情報獲取的主流方式之一,這些技術在黨建領域、招聘網(wǎng)站職位需求變化、教育類新聞和航天領域競爭情報等方面得到了廣泛應用。與此同時,國外學者早在數(shù)年前就開始了基于主題的數(shù)據(jù)采集技術的應用,并將機器學習等先進算法融入采集程序中以提高效率[3]。總體而言,主題為基礎的數(shù)據(jù)收集技術在網(wǎng)絡信息收集領域得到了廣泛應用,它是目前解決“信息迷航”問題并提高開源信息準確獲取能力的關鍵途徑。然而,以上學者更多地依賴于基于主題的數(shù)據(jù)采集技術,只針對特定數(shù)據(jù)源,而情報需要涵蓋各種主題的數(shù)據(jù)。因此,這些并不適用于當今海量數(shù)據(jù)的大數(shù)據(jù)時代。并且,這些學者僅僅關注于數(shù)據(jù)采集的研究,而未對海量數(shù)據(jù)的高效存儲、檢索以及融合處理進行深入探討。
本文提出了一種面向海量多模態(tài)數(shù)據(jù)的情報采集與檢索系統(tǒng)。該系統(tǒng)主要包括多源數(shù)據(jù)采集、大數(shù)據(jù)存儲和智能檢索功能。通過采用Selenium、Kafka、Elastic Stack等大數(shù)據(jù)技術構(gòu)建分布式數(shù)據(jù)采集引擎,實現(xiàn)了對互聯(lián)網(wǎng)上各種形式數(shù)據(jù)的高效采集、處理、融合和存儲。
1 相關技術
1.1 分布式全文搜索引擎Elasticsearch
Elasticsearch 是一個開源的分布式全文搜索引擎,基于Apache Lucene構(gòu)建,專注于實時搜索和大規(guī)模數(shù)據(jù)分析。其強大的搜索和分析功能使其在各種應用場景中廣泛應用,包括文檔檢索、日志分析、企業(yè)搜索等。在ElasticSearch中,索引、類型和文檔之間的關系如圖1所示。它采用了倒排索引的機制,使得文本搜索具有近實時性能。倒排索引按照指定語法對每個文檔進行分詞和分析,然后維護一張表,列舉所有文檔中出現(xiàn)的單詞以及它們所屬的文檔ID和出現(xiàn)頻率。這種倒排索引的存儲形式實現(xiàn)了一種“單詞-文檔矩陣”,主要由單詞詞典、倒排列表和倒排文件組成。
1.2 Web自動化技術Selenium
隨著互聯(lián)網(wǎng)的不斷發(fā)展,Web應用程序的復雜性和多樣性不斷增加。傳統(tǒng)的手動測試方法已經(jīng)無法滿足快速迭代的軟件開發(fā)需求,因此自動化測試工具逐漸成為軟件開發(fā)過程中不可或缺的一部分。Selenium作為一種強大的自動化測試工具,通過模擬用戶在瀏覽器中的操作,實現(xiàn)對Web應用程序的自動化測試,從而提高測試效率和準確性。
1.3 分布式流處理消息隊列Kafka
Kafka是一種開源的分布式流處理消息隊列,最初由LinkedIn公司開發(fā),并在成為Apache項目后得到了廣泛應用。作為一種高性能、可擴展且持久性強的消息隊列系統(tǒng),Kafka在處理大規(guī)模數(shù)據(jù)流、消息傳遞和事件驅(qū)動應用方面具有卓越的優(yōu)勢。
2 系統(tǒng)設計與實現(xiàn)
2.1 系統(tǒng)架構(gòu)
如圖2所示,本文的系統(tǒng)設計采用分層架構(gòu),包括基礎資源層、數(shù)據(jù)采集層、數(shù)據(jù)處理存儲層、數(shù)據(jù)分析層、應用支撐層和應用層。在基礎資源層,包括互聯(lián)網(wǎng)數(shù)據(jù)、語料庫、索引庫和元信息庫等資源,為整個系統(tǒng)提供了必要的信息基礎。數(shù)據(jù)采集層負責通過模塊如Flask、Selenium、Requests等進行情報的采集工作,同時使用Bloom Filter進行數(shù)據(jù)清洗,以確保數(shù)據(jù)的質(zhì)量和準確性。采集到的數(shù)據(jù)存儲在MySQL數(shù)據(jù)庫和Elasticsearch中。自然語言處理層運用了諸如TextRank等算法,用于提取摘要和關鍵詞,同時為爬蟲子系統(tǒng)提供了接口,以支持高級的數(shù)據(jù)分析功能。應用支撐層依賴ElasticSearch彈性搜索引擎,構(gòu)建了高效的分布式檢索子系統(tǒng),為用戶提供快速的數(shù)據(jù)檢索服務。應用層包括多項功能,如情報采集、情報管理、情報分析、情報檢索、摘要提取、關鍵詞提取和爬蟲設置等,以滿足用戶的需求。
2.2 數(shù)據(jù)采集層
為了提高數(shù)據(jù)的可用性和價值,本系統(tǒng)數(shù)據(jù)采集層使用Selenium進行數(shù)據(jù)爬取,同時利用TextRank等算法提取摘要和關鍵詞,并將其存儲。通過這一步驟,為數(shù)據(jù)分析層提供了接口,實現(xiàn)對采集數(shù)據(jù)的處理和分析。
首先,Python爬蟲服務器監(jiān)聽Kafka消息隊列,一旦有新消息(即情報任務),即開始消費。對于每個任務,爬蟲服務器收到任務消息后,即開始相應的數(shù)據(jù)采集工作。如圖3所示,這包括根據(jù)任務中指定的采集源,利用Selenium工具模擬人類行為進行數(shù)據(jù)采集,以規(guī)避網(wǎng)站的反爬措施。采集到的原始數(shù)據(jù)經(jīng)過清洗,去除噪音和冗余信息,并進行網(wǎng)頁正文提取。
1) 步驟1:初始化Selenium Client通過Web Driver操控瀏覽器模擬人為操作。
2) 步驟2:采集程序首先針對用戶輸入的關鍵詞在搜索引擎上進行檢索,以百度為例。如果檢索結(jié)果中包含百度推廣或廣告,則將其過濾,否則程序?qū)⑦M入網(wǎng)頁。
3) 步驟3:在進入網(wǎng)頁后,程序會獲取當前網(wǎng)頁的URL,并與數(shù)據(jù)庫中已存儲的數(shù)據(jù)進行比對。如果發(fā)現(xiàn)重復,則會跳過該條數(shù)據(jù),這一步驟旨在進行初步的去重處理。
4) 步驟4:如果頁面不重復,則程序?qū)⑴廊≡擁撁娴腍TML代碼部分,以獲取情報內(nèi)容。
5) 步驟5:爬取到的HTML代碼將通過數(shù)據(jù)處理模塊進行清洗,去除噪音和冗余信息。隨后進行網(wǎng)頁正文提取,并將提取的內(nèi)容存入數(shù)據(jù)庫,以備檢索之用。
2.3 數(shù)據(jù)處理層
數(shù)據(jù)處理層的主要任務是清洗爬取到的HTML代碼并提取其中的關鍵詞和摘要等信息。由于爬取到的數(shù)據(jù)中包含大量HTML標簽,這些標簽會影響后續(xù)關鍵詞和摘要提取的質(zhì)量。因此,本文首先采用基于文本及標點符號密度的網(wǎng)頁正文提取算法進行正文提取。網(wǎng)頁正文提取即從HTML網(wǎng)頁中提取核心文本信息。鑒于搜索引擎采集的數(shù)據(jù)種類繁多,包含大量無關信息,如導航欄、頁眉、頁腳等元素,并非正文內(nèi)容。這些元素的存在會降低后續(xù)關鍵詞和摘要提取的質(zhì)量。因此,通過采用基于文本及符號密度的網(wǎng)頁正文提取算法,可以有效解決這一問題,精準提取出頁面的核心文本,從而提高后續(xù)處理的效果。
如圖4所示,首先將網(wǎng)頁源碼進行預處理,之后進行Dom樹構(gòu)建,計算每個節(jié)點變量的分數(shù)提取出網(wǎng)頁正文進行輸出。
提取到正文之后,將利用TF-IDF、TextRank等算法進行關鍵詞提取和摘要提取。利用TF-IDF等算法從文本中自動識別和提取最具代表性和重要性的關鍵詞或短語。根據(jù)單詞在文本中的頻率(TF) 和在整個語料庫中的逆文檔頻率(IDF) 來計算關鍵詞的重要性。被認為是關鍵詞的單詞具有較高的TF-IDF值,因為其在文本中頻繁出現(xiàn)且在整個語料庫中占據(jù)重要位置。雖然詞頻是確定關鍵詞重要性的一個因素,但并非唯一因素。因此,TF-IDF算法會綜合考慮詞頻以及詞在整個文本集中的頻率。如公式(1) 所示為詞頻計算公式。
[TFij=ni,jΣknk,j] (1)
式中,分子[ni,j]為目標詞的個數(shù),TF值由目標詞在文本中出現(xiàn)的次數(shù)除以文本總詞數(shù)得出,其中文本的長度對TF值具有一定影響,一般會在計算時對詞頻進行歸一化處理[4]。通過關鍵詞的提取,系統(tǒng)可以為后續(xù)的分類、聚類和數(shù)據(jù)分析提供重要的數(shù)據(jù)支持。提取的關鍵詞或短語可以作為特征向量,用于文本分類或聚類算法的輸入,幫助系統(tǒng)更好地理解和組織文本數(shù)據(jù)。
為了方便用戶更直觀地了解采集內(nèi)容,因此將網(wǎng)頁正文進行摘要提取,從而抽取出包含主要信息的簡潔概括。TextRank算法是一種基于圖的排序算法,用于文本摘要和關鍵詞提取。它首先構(gòu)建文本中句子或詞語的加權(quán)無向圖,然后通過迭代計算每個節(jié)點的重要性得分,最終根據(jù)節(jié)點得分進行排序,選取得分高的節(jié)點作為文本摘要的關鍵句子或關鍵詞。這一算法簡單有效,不需要依賴領域特定的語料庫或訓練數(shù)據(jù),因此在文本處理、信息檢索和自然語言處理領域得到廣泛應用。在基于TextRank算法的自動文摘實現(xiàn)中,一般模型可表示為以句子為圖中的文本單元頂點,句子相似度為邊的圖模型。具體實現(xiàn)上,模型由頂點集和邊集組成,頂點權(quán)重的計算以及頂點間的聯(lián)系可表示如式(2) 所示。
[WSVi=(1-d)+d×∑Vj∈In Vi ωji∑Vk∈OutVj ωjkWSVj] (2)
2.4 應用支撐層
基于Lucene構(gòu)建的開源分布式搜索引擎Elasticsearch,具備高可靠性,并支持多種企業(yè)級搜索應用場景。利用其彈性搜索技術,本文構(gòu)建了高效的分布式檢索子系統(tǒng),以提供對采集數(shù)據(jù)的快速檢索和查詢功能。該系統(tǒng)支持多維篩選、相關性排序和聚類分析等功能,旨在提升用戶的檢索效率和準確性。
在ElasticSearch中,單詞詞典記錄了單詞與倒排列表之間的映射關系,通?;贐+樹或Hash拉鏈法實現(xiàn),以保證在查詢、插入和刪除等操作時的高性能。倒排列表由倒排索引項組成,主要記錄了單詞對應的文檔ID列表、單詞頻率、單詞位置和單詞偏移等信息。這些倒排列表通常按順序存儲在倒排文件中,倒排文件是倒排索引的物理文件,存儲在磁盤中[5]。ElasticSearch中的數(shù)據(jù)倒排索引存儲示例如表1所示。流程如圖5所示。
由于本系統(tǒng)需要進行高性能檢索,因此將數(shù)據(jù)進行以上倒排索引存儲在ES中。以提供對采集數(shù)據(jù)的快速檢索和查詢功能ES存儲結(jié)構(gòu)設計如下:
各字段含義:
data = {
'url':,網(wǎng)址
'content': "",正文
'user_id': []所歸屬用戶id
}
2.5 應用服務層
應用層直接與用戶進行交互,提供情報采集、情報管理、情報分析、情報檢索、摘要提取、關鍵詞提取、爬蟲設置等功能,方便用戶進行知識情報工作。用戶可以通過界面操作進行數(shù)據(jù)采集、查詢、分析和導出,提高工作效率和決策能力。
3 實驗驗證
為了驗證系統(tǒng)的執(zhí)行效率,本文環(huán)境采用3臺服務器,一臺為Winserver爬蟲服務器,兩臺Ubuntu系統(tǒng)應用服務器,配置均為2核8G內(nèi)存。實驗通過對不同數(shù)據(jù)量,長文本全文進行關鍵詞檢索,并將MySQL與ES執(zhí)行效果進行對比,結(jié)果如圖6所示。
實驗結(jié)果表明,在數(shù)據(jù)量較少時,傳統(tǒng)關系型數(shù)據(jù)庫反而顯示出性能優(yōu)勢。然而,數(shù)據(jù)量達到約2 000條時,在長文本全文檢索方面,Elasticsearch(ES) 的效率有所提高。在數(shù)據(jù)量達到5 000條時,平均處理時間相比傳統(tǒng)關系型數(shù)據(jù)庫減少了約32%左右。實驗結(jié)果證明在大數(shù)據(jù)量長文本全文檢索中,隨著數(shù)據(jù)量增大,本系統(tǒng)能夠做到快速響應,表現(xiàn)出本系統(tǒng)良好的性能。
4 結(jié)束語
本文基于Elasticsearch高性能檢索引擎,結(jié)合了Selenium自動化技術、Kafka消息隊列,以及TextRank和TF-IDF等自然語言處理相關算法,實現(xiàn)了基于ElasticSearch的科技情報采集檢索系統(tǒng)。通過Selenium模擬人工操作,有效規(guī)避了網(wǎng)站的反爬機制,并利用正文提取算法從復雜的HTML代碼中提取有用信息,使用Elasticsearch實現(xiàn)了高性能的檢索。經(jīng)過對比測試,在處理大數(shù)據(jù)量時,相較于傳統(tǒng)的關系型數(shù)據(jù)庫,系統(tǒng)的全文檢索性能提升了約32%,充分證明了該系統(tǒng)在檢索效率方面的出色表現(xiàn)。
參考文獻:
[1] 王勇.基于大數(shù)據(jù)平臺的企業(yè)競爭情報系統(tǒng)設計及應用研究[D].昆明:昆明理工大學,2018.
[2] 秦宗和.基于數(shù)據(jù)挖掘的圖書館智庫情報服務構(gòu)建研究[J].圖書館學刊,2018,40(6):43-47.
[3] 張林.民航信息情報采集系統(tǒng)的設計與實現(xiàn)[D].上海:上海交通大學,2016.
[4] 張洋.基于TextRank算法的自動文摘系統(tǒng)的設計與實現(xiàn)[D].北京:北京郵電大學,2021.
[5] 李峰,宋宴,魏廣澤,等.基于ElasticSearch的海量遙感數(shù)據(jù)檢索技術研究[J].計算機與網(wǎng)絡,2021,47(5):57-61.
【通聯(lián)編輯:謝媛媛】