摘要:基于中醫(yī)藥科研教學(xué)中對(duì)大數(shù)據(jù)的需求,本文針對(duì)如何在互聯(lián)網(wǎng)中快速獲得大量相關(guān)信息在技術(shù)層面進(jìn)行了研究和探討。提出了以垂直爬蟲(chóng)為基礎(chǔ)的中醫(yī)藥信息搜索系統(tǒng)的體系結(jié)構(gòu),在理論層面研究了爬蟲(chóng)系統(tǒng)依賴(lài)的技術(shù),包括語(yǔ)義分析、爬行算法以及正則表達(dá)。奠定了整個(gè)系統(tǒng)的理論以及架構(gòu)基礎(chǔ),為下一步的具體實(shí)現(xiàn)進(jìn)行了有價(jià)值的先期鋪墊。
關(guān)鍵詞:爬蟲(chóng);語(yǔ)義分析;理論研究;正則表達(dá);中醫(yī)藥
中醫(yī)藥是華夏先祖智慧的結(jié)晶,他們歷經(jīng)千年,不斷傳承,延綿至今;如今,隨著大數(shù)據(jù)時(shí)代的腳步不斷臨近,傳統(tǒng)中醫(yī)中藥信息的承載和傳播,也逐漸從紙質(zhì)古籍的代代相傳,演變?yōu)榛ヂ?lián)網(wǎng)的分布式存儲(chǔ)以及幾何量級(jí)的搜索與復(fù)制。
為了應(yīng)對(duì)這種發(fā)展的趨勢(shì),如何能快速,準(zhǔn)確,完整的從互聯(lián)網(wǎng)中采集所需要的中醫(yī)藥數(shù)據(jù),進(jìn)而對(duì)其挖掘分析,日益成為了廣大科研人員所面臨的一大問(wèn)題。
因此,使用技術(shù)手段,使信息采集、數(shù)據(jù)挖掘的過(guò)程自動(dòng)而高效,不僅能有效地減輕圖書(shū)館員的重復(fù)工作量,也能使信息采集數(shù)據(jù)挖掘的結(jié)果更加客觀。
在這種情況下,爬蟲(chóng)技術(shù)開(kāi)始走入了我們的視線。
1爬蟲(chóng)技術(shù)概述
所謂網(wǎng)絡(luò)爬蟲(chóng),是一個(gè)從Web上下載網(wǎng)頁(yè)、并且自動(dòng)從網(wǎng)頁(yè)中提取所需內(nèi)容的程序。一般我們將爬蟲(chóng)劃分為如下三個(gè)類(lèi)型:
1.1批量型爬蟲(chóng) 批量型爬蟲(chóng)有比較明確的抓取范圍和目標(biāo),當(dāng)爬蟲(chóng)達(dá)到這個(gè)設(shè)定的目標(biāo)后,即停止抓取過(guò)程。常見(jiàn)的目標(biāo)包括抓取網(wǎng)頁(yè)的數(shù)量或者消耗的時(shí)間等。
1.2增量型爬蟲(chóng) 增量型爬蟲(chóng)特點(diǎn)是定期更新,由于在線網(wǎng)頁(yè)處于不斷變化中,而增量型爬蟲(chóng)需要及時(shí)反映這種變化,因而必須持續(xù)不斷的抓取,既要抓取新網(wǎng)頁(yè),又要更新已有網(wǎng)頁(yè)。通用的商業(yè)搜索引擎爬蟲(chóng)基本都屬此類(lèi)。
1.3垂直型爬蟲(chóng) 垂直型爬蟲(chóng)關(guān)注特定主題內(nèi)容或者行業(yè)的網(wǎng)頁(yè)。垂直型爬蟲(chóng)一個(gè)最大的特點(diǎn)就是:如何識(shí)別網(wǎng)頁(yè)內(nèi)容是否屬于指定主題。它需要在抓取階段就能夠動(dòng)態(tài)識(shí)別某個(gè)網(wǎng)址是否與主題相關(guān),并盡量忽略無(wú)關(guān)頁(yè)面。
2中醫(yī)藥信息搜索系統(tǒng)中的爬蟲(chóng)技術(shù)
顯而易見(jiàn),中醫(yī)中藥,作為一個(gè)特定行業(yè),只有垂直爬蟲(chóng)的定義最為符合其信息采集的特性。因此,如何設(shè)計(jì)并構(gòu)建一個(gè)適用于中醫(yī)中藥的,以垂直搜索為目的的網(wǎng)絡(luò)爬蟲(chóng)系統(tǒng),逐漸成為值得我們深入研究的課題。
2.1垂直爬蟲(chóng)的技術(shù)原理 垂直搜索里,目標(biāo)網(wǎng)站往往在某一領(lǐng)域具有其專(zhuān)業(yè)性,其整體網(wǎng)站的結(jié)構(gòu)相當(dāng)規(guī)范,并且垂直搜索只需要其中一部分具有垂直性的資源,所以垂直爬蟲(chóng)相比通用爬蟲(chóng)更加精確。
通常把爬蟲(chóng)爬取資源分成三個(gè)步驟:url抓取、內(nèi)容抓取、數(shù)據(jù)標(biāo)準(zhǔn)化及索引,以下是一般垂直爬蟲(chóng)的工作流程:①首先確定需要抓取的目標(biāo)網(wǎng)站,錄入站源表sitelist,然后爬蟲(chóng)會(huì)讀取對(duì)應(yīng)站點(diǎn)的正則解析規(guī)則。②根據(jù)事先制定的正則規(guī)則,篩選出資源url存入urllist表。③爬蟲(chóng)從urllist表讀出url,存入一個(gè)同步的隊(duì)列中(同時(shí)將url做md5處理,用于去重),多線程下的每個(gè)爬蟲(chóng)程序?qū)拇岁?duì)列讀取url,然后爬取每個(gè)資源頁(yè),并將提取的內(nèi)容存入原始數(shù)據(jù)表。④數(shù)據(jù)標(biāo)準(zhǔn)化及索引模塊從原始數(shù)據(jù)表提取數(shù)據(jù),進(jìn)行進(jìn)一步的規(guī)整、聚合,最終存入最終內(nèi)容表中。
更新策略:①根據(jù)每個(gè)站點(diǎn)設(shè)定的url失效時(shí)間,定期的從數(shù)據(jù)庫(kù)抽取需要更新的資源url,加入步驟3的隊(duì)列中,進(jìn)行資源爬取。②爬取的資源更新到數(shù)據(jù)庫(kù)中。
2.2爬蟲(chóng)系統(tǒng)的先決技術(shù)和算法 由上一節(jié)可知,要實(shí)現(xiàn)中醫(yī)藥數(shù)據(jù)搜索系統(tǒng),一個(gè)基于垂直爬蟲(chóng)的數(shù)據(jù)采集服務(wù)系統(tǒng)是關(guān)鍵,而以下幾點(diǎn)無(wú)疑是要實(shí)現(xiàn)這個(gè)爬蟲(chóng)系統(tǒng)的先決技術(shù)。
2.2.1中醫(yī)藥語(yǔ)義分析 所謂語(yǔ)義分析,就是對(duì)web頁(yè)面所包含的部分或者全部文字內(nèi)容的含義進(jìn)行分析,一般包括三個(gè)步驟:①分詞。提取一個(gè)完整的中文句子或者段落,根據(jù)一定的算法對(duì)其進(jìn)行分詞;在這里我們可以自定義算法,或者調(diào)用現(xiàn)有的開(kāi)源分詞組件,如,Lucene的分詞組件、ktdictseg等;分詞后將所有實(shí)詞(除去連接詞、語(yǔ)氣詞、介詞等虛詞)存入數(shù)組。②構(gòu)建中醫(yī)藥語(yǔ)料庫(kù)。語(yǔ)料庫(kù)通常由書(shū)面語(yǔ)或口語(yǔ)的電子語(yǔ)言材料構(gòu)成。經(jīng)過(guò)科學(xué)選材和標(biāo)注、具有適當(dāng)規(guī)模的語(yǔ)料庫(kù)能夠反映和記錄語(yǔ)言的實(shí)際使用情況。因此,根據(jù)收集的情報(bào)監(jiān)測(cè)網(wǎng)站以及日常中醫(yī)藥情報(bào)服務(wù)中涉及的內(nèi)容,可以收錄中醫(yī)藥、傳統(tǒng)醫(yī)學(xué)、補(bǔ)充替代醫(yī)學(xué)領(lǐng)域的專(zhuān)用詞匯,規(guī)??梢跃S持在1000個(gè)詞匯左右。③將分出的詞匯和語(yǔ)料庫(kù)匹配。匹配率若能高于基于某種算法某一閥值,則判定為具有基于語(yǔ)料庫(kù)的相關(guān)性。
2.2.2爬行算法 經(jīng)典的爬取策略可以分為深度優(yōu)先、廣度優(yōu)先等幾種。
深度優(yōu)先策略的目的是要達(dá)到被搜索結(jié)構(gòu)的葉結(jié)點(diǎn)(無(wú)超鏈接頁(yè)面)。深度優(yōu)先搜索沿著頁(yè)面上的超鏈走到不能再深入為止,然后返回到這個(gè)頁(yè)面,再繼續(xù)選擇該頁(yè)面中的其他鏈接。當(dāng)不再有其他鏈接可選擇時(shí),抓取結(jié)束。
廣度優(yōu)先策略是指在抓取過(guò)程中,在完成當(dāng)前層次的搜索后,才進(jìn)行下一層次的搜索。該算法的設(shè)計(jì)和實(shí)現(xiàn)相對(duì)簡(jiǎn)單。
由于深度優(yōu)先在很多情況下會(huì)導(dǎo)致爬蟲(chóng)的陷入(traPped)問(wèn)題,目前在爬蟲(chóng)開(kāi)發(fā)中常見(jiàn)的是廣度優(yōu)先算法。
在本系統(tǒng)的研究中,基于中醫(yī)藥的主題性,我們可以使用一種改進(jìn)的基于語(yǔ)義分析的廣度優(yōu)先算法來(lái)爬取頁(yè)面,具體思想如下:
首先,在爬取之前,需要對(duì)即將入列的url鏈接名稱(chēng)進(jìn)行分析,只有經(jīng)過(guò)初步篩選的、符合中醫(yī)藥語(yǔ)義的url才會(huì)被加入待爬取隊(duì)列(urllist)中。
其次,在爬蟲(chóng)保存頁(yè)面之前,對(duì)內(nèi)容進(jìn)行分詞分析,若分詞符合中醫(yī)藥語(yǔ)義達(dá)某一閥值,則認(rèn)為該頁(yè)面內(nèi)容符合中醫(yī)藥語(yǔ)義,判定為有效并保存。如此可有效降低無(wú)關(guān)網(wǎng)頁(yè)的數(shù)量。
2.2.3基于正則表達(dá)式的url分析 在編寫(xiě)處理字符串的程序或網(wǎng)頁(yè)時(shí),經(jīng)常會(huì)有查找符合某些復(fù)雜規(guī)則的字符串的需要。正則表達(dá)式就是用于描述這些規(guī)則的工具。
在本文的研究中,我們需要編寫(xiě)正則來(lái)匹配在頁(yè)面中提取的url,來(lái)判斷是否為系統(tǒng)所需的資源url,以便做下一步的分析。
3體系結(jié)構(gòu)的設(shè)計(jì)及程序的邏輯分析
綜合以上章節(jié),在體系結(jié)構(gòu)方面,我們可以將整個(gè)中醫(yī)藥數(shù)據(jù)搜索系統(tǒng)劃分為兩個(gè)部分,一是對(duì)外展示以及提供搜索服務(wù)的客戶系統(tǒng)。二是對(duì)內(nèi)提供工作管理以及后臺(tái)數(shù)據(jù)采集的數(shù)據(jù)服務(wù)系統(tǒng)。
3.1中醫(yī)藥數(shù)據(jù)采集服務(wù)系統(tǒng) 對(duì)于服務(wù)系統(tǒng),其本質(zhì),就是本文第2章所述的,一種基于垂直爬蟲(chóng)的信息采集系統(tǒng)。我們將它定位為整個(gè)中醫(yī)藥信息采集系統(tǒng)的核心,他承載著整個(gè)系統(tǒng)最核心的功能,例如基于廣度優(yōu)先算法的爬蟲(chóng)程序主體、基于正則的中醫(yī)藥行業(yè)資源url的篩選、中醫(yī)藥行業(yè)語(yǔ)義分析、以及對(duì)資源頁(yè)面的采集、整理、存儲(chǔ)和索引。
系統(tǒng)以CS模式進(jìn)行構(gòu)建,也就是說(shuō),任何需要對(duì)本系統(tǒng)進(jìn)行管理的計(jì)算機(jī)必須安裝軟件包后才能具有管理、采集、更新的權(quán)限,這就杜絕了將管理端暴露在互聯(lián)網(wǎng)中的安全風(fēng)險(xiǎn),從另一方面來(lái)說(shuō),雖然CS模式犧牲了一部分在管理上的便捷性,但是以此換來(lái)了系統(tǒng)管理的安全性和隱秘性。其系統(tǒng)架構(gòu)見(jiàn)圖1。
圖1 系統(tǒng)模塊圖
由圖1可知,數(shù)據(jù)挖掘模塊,是中醫(yī)藥信息采集服務(wù)系統(tǒng)核心模塊,在系統(tǒng)運(yùn)作時(shí),對(duì)于該模塊,我們可以做如下設(shè)定:
第一步,從種子庫(kù)(sitelist)中選取一站點(diǎn)讀取首頁(yè),通過(guò)爬蟲(chóng)做三件事:①爬取頁(yè)面中的所有超鏈接,根據(jù)正則規(guī)則篩選出本站資源頁(yè)面的超鏈接存入待爬取列表(urllist),并記錄其父頁(yè)面以及深度;②保存頁(yè)面數(shù)據(jù)以及url至數(shù)據(jù)庫(kù)的原始數(shù)據(jù)表中(DataList);③非本站鏈接根據(jù)其語(yǔ)義分析結(jié)果,凡是符合中醫(yī)中藥類(lèi)語(yǔ)義的鏈接存入待爬取站點(diǎn)列表(sitelist)。
第二步,爬取urllist列表中的每一個(gè)url,重復(fù)第一步。
第三步,根據(jù)事先設(shè)定,達(dá)到某一深度后停止爬取urllist。
第四步,在sitelist中選取下一站點(diǎn),重復(fù)第一到第三步。
第五步,根據(jù)事先設(shè)定,在滿足某一條件后停止爬行。
其程序流程圖見(jiàn)圖2。
圖2數(shù)據(jù)采集模塊程序流程圖
由圖2可知,在整個(gè)數(shù)據(jù)采集模塊中,爬蟲(chóng)處理程序,又是其中的一個(gè)核心功能,在系統(tǒng)運(yùn)作時(shí),其不斷地重復(fù)以上第一步中所有的步驟,其程序流程圖見(jiàn)圖3。
圖3 爬蟲(chóng)運(yùn)行時(shí)程序流程圖
在整個(gè)數(shù)據(jù)采集完成工作后,我們需要調(diào)用數(shù)據(jù)標(biāo)準(zhǔn)化及索引模塊對(duì)在數(shù)據(jù)庫(kù)中存放頁(yè)面內(nèi)容的原始數(shù)據(jù)表(DataList)進(jìn)行整理、歸檔以及索引,生成最終的內(nèi)容表(FinalList),以供客戶系統(tǒng)調(diào)用。
3.2中醫(yī)藥數(shù)據(jù)采集客戶系統(tǒng) 對(duì)于客戶系統(tǒng),不同于管理系統(tǒng),其便捷性和通用性是我們首要考慮的因素,因此我們可以采用BS模式構(gòu)建一個(gè)web服務(wù)系統(tǒng),從而使得用戶可以在任何地點(diǎn)通過(guò)任何設(shè)備訪問(wèn)中醫(yī)藥數(shù)據(jù)采集的頁(yè)面。
系統(tǒng)可以.Net為基本架構(gòu),以SQL-SERVER為頁(yè)面采集的存儲(chǔ)數(shù)據(jù)庫(kù),在客戶發(fā)起訪問(wèn)時(shí),返回類(lèi)似百度的搜索界面,客戶于搜索框內(nèi)發(fā)起搜索,系統(tǒng)將搜索請(qǐng)求提交回服務(wù)端,并在內(nèi)容表(FinalList)搜索,最后將結(jié)果以列表方式返回用戶瀏覽器界面。這就完成了一次用戶請(qǐng)求。
4結(jié)論
在當(dāng)今信息化高速發(fā)展的今天,我們進(jìn)行了在互聯(lián)網(wǎng)平臺(tái)中進(jìn)行中醫(yī)藥信息數(shù)據(jù)挖掘研究工作的初步探索。
經(jīng)過(guò)一系列的理論研究和局部試驗(yàn),我們發(fā)現(xiàn),通過(guò)對(duì)該問(wèn)題進(jìn)行一系列的分解后,大致可以分為算法研究、體系結(jié)構(gòu)分析、以及程序?qū)崿F(xiàn)幾個(gè)方面,而程序?qū)崿F(xiàn)由包括主函數(shù)構(gòu)建、程序協(xié)同、以及平臺(tái)建設(shè)等步驟。
在本文中著重對(duì)算法研究以及體系結(jié)構(gòu)分析進(jìn)行了探討,在程序?qū)崿F(xiàn)方面給出了大致流程和方向,奠定了整個(gè)系統(tǒng)的架構(gòu)基礎(chǔ),為下一步的具體實(shí)現(xiàn)進(jìn)行了有價(jià)值的先期鋪墊。
編輯/孫杰