焦 洋,王 純,韓靜茹
(中國民航科學(xué)技術(shù)研究院 北京市民航安全分析及預(yù)防工程技術(shù)中心,北京 100028)
在如今科技引領(lǐng)發(fā)展的時(shí)代,企業(yè)將科技創(chuàng)新作為工作重點(diǎn)。以往企事業(yè)單位申報(bào)科研課題基本通過線下紙質(zhì)介質(zhì)申報(bào),管理部門人工審閱批示。但隨著時(shí)間的推移,大量歷史申報(bào)課題擠壓,紙質(zhì)文檔存儲(chǔ)的缺點(diǎn)逐漸暴露。第一,文檔數(shù)量龐大,不利于保存,需要專門的存儲(chǔ)空間和人員管理。第二,檢索效率低。隨著數(shù)量的增加,查找歷史文檔越來越困難。為此,利用Web技術(shù)開展無紙化辦公成為企業(yè)信息化建設(shè)的一項(xiàng)工作。目前,大部分煤礦企業(yè)擁有自己的OA辦公系統(tǒng),能夠?qū)崿F(xiàn)公文的流程。但是在科研管理工作上很少有企業(yè)開展信息化建設(shè),往往只是利用excel工具進(jìn)行簡(jiǎn)單的登記記錄,即使有系統(tǒng),功能也非常簡(jiǎn)單,僅僅實(shí)現(xiàn)了申報(bào)數(shù)據(jù)記錄和查詢的功能,每年新申請(qǐng)的課題無法與往年課題形成對(duì)比,以至于一些課題被重復(fù)申報(bào),浪費(fèi)科研經(jīng)費(fèi)。
為此,利用Java Web技術(shù),以企業(yè)科研管理業(yè)務(wù)為背景,設(shè)計(jì)研發(fā)了科研管理系統(tǒng)。該系統(tǒng)嵌入Lucene檢索工具包,實(shí)現(xiàn)對(duì)申報(bào)項(xiàng)目的檢索查新,將重復(fù)率高于30%的已有文檔進(jìn)行排列顯示,供科研管理部門參考,從而完善科研項(xiàng)目申報(bào)的鑒定方法,以提高申報(bào)項(xiàng)目的領(lǐng)域水平,促進(jìn)科研工作的有效開展。
Lucene[1]是Apache軟件基金會(huì)Jakarta項(xiàng)目組的一個(gè)子項(xiàng)目,是一個(gè)純Java編寫的開放源代碼的全文檢索工具[2]。近年來,學(xué)者對(duì)基于Lucene全文檢索的應(yīng)用研究層出不窮,如行業(yè)應(yīng)用、圖像視頻檢索、全文檢索技術(shù)研究以及Web應(yīng)用等[3-6]。也出現(xiàn)了很多基于Lucene的開源軟件,例如Solr全文搜索服務(wù)器,是一款非常優(yōu)秀的全文搜索引擎[7-8]。Lucene實(shí)際上是為檢索系統(tǒng)提供的工具包,其主要功能是實(shí)現(xiàn)了全文檢索。全文檢索指先建立索引,后對(duì)索引進(jìn)行搜索的過程,主要分為兩個(gè)過程:索引創(chuàng)建和搜索索引[9-10]。
索引創(chuàng)建主要分四步:讀取文本、文本分詞、詞元處理、創(chuàng)建索引。
(1)讀取文本:獲取需要?jiǎng)?chuàng)建索引的源數(shù)據(jù);
(2)文本分詞:將一整段文本,分為一個(gè)個(gè)Token及詞元;
(3)詞元處理:將詞元轉(zhuǎn)換為Term單詞,例如將英語單詞復(fù)數(shù)轉(zhuǎn)變?yōu)閱螖?shù);
(4)創(chuàng)建索引:將處理后所得的Term單詞,出重后建立索引。
索引結(jié)構(gòu)如圖1所示。
圖1 索引鏈表結(jié)果
搜索索引也主要分四步:查詢輸入、詞法分析、搜索索引、相關(guān)性計(jì)算。
(1)查詢輸入:過去需要查詢的文本數(shù)據(jù);
(2)詞法分析:類似索引創(chuàng)建的步驟二和三,將查詢文本進(jìn)行處理,處理后為單詞;
(3)搜索索引:通過反向索引鏈表,找到包含處理后單詞對(duì)應(yīng)文檔的ID;
(4)相關(guān)性計(jì)算:為搜索出的每個(gè)文檔進(jìn)行打分,分值越高說明與查詢文本相似度越大。
該系統(tǒng)基于Java Web技術(shù),嵌入Lucene檢索工具包,結(jié)合企事業(yè)單位科研管理業(yè)務(wù),設(shè)計(jì)實(shí)現(xiàn)科研管理系統(tǒng)。具體步驟如下:
(1)基于Java Web技術(shù)搭建B/S架構(gòu)的系統(tǒng)框架,結(jié)合SQL Server 2008數(shù)據(jù)庫,實(shí)現(xiàn)數(shù)據(jù)的增、刪、改、查等業(yè)務(wù)操作。
(2)嵌入ntko控件,實(shí)現(xiàn)電子文檔的上傳、下載與在線打開功能。ntko為能夠在線打開office、pdf等文檔的第三方控件。
(3)嵌入Lucene檢索工具包,調(diào)用Lucene提供的API,實(shí)現(xiàn)申報(bào)課題索引建立、詞組劃分,計(jì)算文檔相關(guān)性打分,并轉(zhuǎn)換為重復(fù)率。將重復(fù)率高于30%的文檔羅列顯示。
(4)結(jié)合JPBM工作流引擎,根據(jù)科研項(xiàng)目申報(bào)評(píng)審業(yè)務(wù)流程,實(shí)現(xiàn)所有申報(bào)項(xiàng)目的線上審批、駁回操作,基本實(shí)現(xiàn)無紙化科研管理。
系統(tǒng)采用B/S架構(gòu),邏輯架構(gòu)主要分為4層:物理層、數(shù)據(jù)層、核心層、應(yīng)用層,如圖2所示。
圖2 系統(tǒng)邏輯架構(gòu)
應(yīng)用層為查新系統(tǒng)提供的各種應(yīng)用功能,包括各種頁面的瀏覽與數(shù)據(jù)的操作,負(fù)責(zé)處理來自瀏覽器的業(yè)務(wù)請(qǐng)求。核心層作為應(yīng)用層的底層支撐,一般為抽象出的成熟的工具、控件和功能模塊,例如該系統(tǒng)調(diào)用的Lucene檢索工具包,負(fù)責(zé)為應(yīng)用層查新功能提供API;潤(rùn)乾報(bào)表服務(wù)器為統(tǒng)計(jì)報(bào)表提供樣式封裝和數(shù)據(jù)分組等服務(wù);權(quán)限認(rèn)證為公用功能模塊,已經(jīng)應(yīng)用在很多Web系統(tǒng)中。數(shù)據(jù)層表示數(shù)據(jù)的來源和存儲(chǔ),該系統(tǒng)涉及三方面的數(shù)據(jù),系統(tǒng)填報(bào)數(shù)據(jù)存放到SQL Server數(shù)據(jù)庫中,Lucene檢索數(shù)據(jù)以文件形式存儲(chǔ),還有上傳的電子文檔也以文件形式存儲(chǔ)在數(shù)據(jù)服務(wù)器中。物理層表示整個(gè)系統(tǒng)的硬件設(shè)備,該系統(tǒng)只使用了一些常規(guī)的網(wǎng)絡(luò)設(shè)備和兩臺(tái)IBM X3850服務(wù)器。
前面簡(jiǎn)單介紹了Lucene的搜索索引步驟,其中第一、二步都是對(duì)輸入查詢的操作,在實(shí)際應(yīng)用中發(fā)現(xiàn),對(duì)實(shí)際輸入的文本進(jìn)行分詞、搜索,效果比較理想,但是對(duì)采用了相近詞替代的文本,則搜索效果不理想,例如運(yùn)銷和地銷,含義相近,但搜索時(shí)不相關(guān)。因此采用了結(jié)合領(lǐng)域本體的辦法[11-13]。在系統(tǒng)中建立領(lǐng)域術(shù)語庫,將煤炭領(lǐng)域相近的術(shù)語以樹形結(jié)構(gòu)存儲(chǔ)到數(shù)據(jù)庫中,存儲(chǔ)結(jié)構(gòu)如圖3所示。
圖3 領(lǐng)域術(shù)語存儲(chǔ)結(jié)構(gòu)
目前近似單詞查詢只是根據(jù)查詢單詞,簡(jiǎn)單地將該單詞所屬父節(jié)點(diǎn)下的葉子節(jié)點(diǎn)找出,取出的葉子節(jié)點(diǎn)表示語義近似的相關(guān)術(shù)語。例如查詢單詞為采掘機(jī),根據(jù)樹形結(jié)構(gòu)找到父節(jié)點(diǎn)為開采設(shè)備,發(fā)現(xiàn)近義詞為截煤機(jī),同理根據(jù)汽車衡可以查詢到地磅。
在查詢文本處理為單詞之后,進(jìn)行領(lǐng)域本題庫查詢,將近似的單詞一并查出后,進(jìn)行合并,合并后再進(jìn)行索引搜索和相關(guān)性打分操作。
查新結(jié)果展示中,一般會(huì)將重復(fù)的單詞高亮顯示,這樣便于操作人員直觀瀏覽查重結(jié)果。Lucene提供了設(shè)置高亮的API,對(duì)比結(jié)果可以高亮顯示,但是系統(tǒng)應(yīng)用中發(fā)現(xiàn),由于高亮顯示的都是詞法分析后的單詞,即使一句話中除了“的、地”等詞,其余業(yè)務(wù)詞語全部高亮,Lucene沒能形成整句或者整段的高亮,所以感覺不夠連續(xù),頁面凌亂。因此,該系統(tǒng)對(duì)高亮顯示進(jìn)行了更改,在原有高亮設(shè)置的基礎(chǔ)上,進(jìn)行了二次處理。
首先,利用Lucene提供的query方法[5],對(duì)文本進(jìn)行高亮設(shè)置,代碼如下:
StringpreHighlight="";
StringpostHightlight="";
query.setHighlightSimplePre(preHighlight);
query.setHighlightSimplePost(postHightlight);
設(shè)置完成后進(jìn)行檢索搜索,檢索成功后,通過正則表達(dá)式,將查詢文本和搜索文檔按常用標(biāo)點(diǎn)斷句,代碼如下:
Pattern pattern=Pattern.compile
("(^|(?![.,?!;。,??。?;…]))[“]?[^.,?!;。,?!:;…]+(([.,?!;。,??。?;…][…]?[”]?)|$)");
然后循環(huán)處理每句話,公式如下:
(1)
其中,n表示包含高亮字符preHightlight的個(gè)數(shù);Xi表示第i個(gè)高亮區(qū)域包含的字符個(gè)數(shù);Y表示當(dāng)前斷句包含的所有字符個(gè)數(shù)。計(jì)算后保留三位小數(shù)。根據(jù)實(shí)際測(cè)試效果,P取閾值為0.7。如果P值大于0.7,則整句話表述意思基本相同,則高亮顯示當(dāng)前整條語句,處理后對(duì)比顯示凌亂的問題得到明顯改善。
Lucene是一個(gè)檢索工具包,所以沒有提供重復(fù)率計(jì)算的方法。系統(tǒng)采用Lucene提供的相關(guān)性打分計(jì)算公式進(jìn)行重復(fù)率計(jì)算。打分方法采用的是向量空間模型(VSM)算法,將查詢語句分解后的每個(gè)詞和權(quán)重看作一個(gè)向量及查詢向量,同理將搜索文檔的每個(gè)單詞和權(quán)重看作文檔向量,VSM模型算法就是計(jì)算這兩個(gè)向量的夾角,夾角越小相關(guān)性越大,相關(guān)性打分公式如下:
score(q,d)=coord(q,d)×queryNorm(q)×
t.getBoost()×norm(t,d))
(2)
其中,t表示搜索的單詞Term;coord(q,d)表示當(dāng)一篇文檔中包含的搜索詞越多,則此文檔打分越高;queryNorm(q)計(jì)算每個(gè)查詢條目的方差和;tf(tind)為t在文檔d中出現(xiàn)的詞頻;idf(t)表示t在幾篇文檔中出現(xiàn)過;norm(t,d)為標(biāo)準(zhǔn)化因子;t.getBoost()指查詢語句中每個(gè)詞的權(quán)重。
利用上面公式計(jì)算的相關(guān)性分?jǐn)?shù),只是表示檢索后的文檔與查詢文本的相似度,公式中很多因素,例如權(quán)重、詞頻、搜索詞個(gè)數(shù)等,不是用來體現(xiàn)重復(fù)率,僅僅用相關(guān)性不能代表重復(fù)率。經(jīng)過實(shí)際測(cè)試,Lucene的打分機(jī)制并不適用于該系統(tǒng),因此放棄了相關(guān)性模型計(jì)算公式,采用基于文本處理的方法進(jìn)行重復(fù)率計(jì)算。
按照上述內(nèi)容進(jìn)行搜索高亮和高亮后二次處理,這樣處理后,整片文檔的相似語句已經(jīng)標(biāo)黃,計(jì)算重復(fù)率只要統(tǒng)計(jì)查詢文本中標(biāo)黃語句占整篇查詢文本的比例,即可作為重復(fù)率使用。實(shí)現(xiàn)效果如圖4所示,經(jīng)測(cè)試重復(fù)率較準(zhǔn)確。
圖4 重復(fù)率顯示頁面
系統(tǒng)功能結(jié)構(gòu)如圖5所示。
圖5 系統(tǒng)功能結(jié)構(gòu)
項(xiàng)目、成果、論文、專利四個(gè)管理模塊,是系統(tǒng)的主要業(yè)務(wù)模塊,提供科技項(xiàng)目、科技成果、優(yōu)秀論文、專利的申請(qǐng)、查新、審批、驗(yàn)收等功能,覆蓋了整個(gè)系統(tǒng)業(yè)務(wù)流程。業(yè)務(wù)模塊中涵蓋了查新功能,在上面章節(jié)已經(jīng)講述。
報(bào)表管理模塊負(fù)責(zé)系統(tǒng)統(tǒng)計(jì)分析數(shù)據(jù)的展示,包括歷年科研經(jīng)費(fèi)匯總信息、申報(bào)入庫信息、專利匯總信息等報(bào)表,便于企業(yè)科研管理工作者直觀地分析科研情況。
系統(tǒng)管理主要包含系統(tǒng)的基礎(chǔ)功能和Lucene領(lǐng)域庫的配置信息。
隨著同煤集團(tuán)技術(shù)中心的快速發(fā)展,科研項(xiàng)目和科技成果的數(shù)量呈現(xiàn)指數(shù)級(jí)增長(zhǎng),隨之出現(xiàn)了申報(bào)過程繁瑣、科技查新難度大和管理過程復(fù)雜等一系列問題。而科技查新針對(duì)不同類型的查新項(xiàng)目,通過檢索文獻(xiàn)手段,運(yùn)用綜合分析、對(duì)比分析等方法,為科技管理部門、評(píng)審機(jī)構(gòu)和用戶提供事實(shí)性情報(bào)信息的咨詢服務(wù)[14-15],是提高科技立項(xiàng)水平的必要手段。所以同煤集團(tuán)技術(shù)中心在此背景下決定在企業(yè)內(nèi)部搭建科技成果、論文申報(bào)檢索查新管理系統(tǒng),以實(shí)現(xiàn)科研項(xiàng)目和成果的在線申報(bào)、在線查新和統(tǒng)一管理。
圖6 計(jì)劃項(xiàng)目明細(xì)頁面
系統(tǒng)通過給定的項(xiàng)目編號(hào)、時(shí)間段等信息可以查詢各個(gè)狀態(tài)的申報(bào)信息,以列表形式展示。圖6為一條申報(bào)信息的明細(xì)頁面,點(diǎn)擊頁面中的附件信息可以下載上傳的附件文檔,查閱更詳細(xì)的資料。系統(tǒng)目前已在同煤集團(tuán)技術(shù)中心正式上線運(yùn)行,取得了較好的應(yīng)用效果。
以Java Web技術(shù)為基礎(chǔ),嵌入Lucene檢索工具包,設(shè)計(jì)實(shí)現(xiàn)了一套科研管理系統(tǒng)。提出領(lǐng)域術(shù)語庫結(jié)合Lucene的詞法分析的想法,加入了查詢單詞的近義詞或別稱,提升了文檔檢索的準(zhǔn)確性。針對(duì)Lucene高亮顯示零散的問題,提出了高亮顯示二次處理方法,該方法能夠平滑處理對(duì)比文檔的重復(fù)區(qū)域,使得對(duì)比查閱文檔重復(fù)內(nèi)容更加自然。在此基礎(chǔ)上,依據(jù)文本高亮處理結(jié)果,重新設(shè)計(jì)了文檔重復(fù)率的計(jì)算算法。系統(tǒng)在同煤集團(tuán)技術(shù)中心進(jìn)行了上線應(yīng)用,根據(jù)現(xiàn)場(chǎng)運(yùn)行情況反饋,滿足了屏蔽項(xiàng)目重復(fù)申報(bào)和項(xiàng)目流程管理的需求,豐富了企事業(yè)單位科研管理工作的技術(shù)手段。對(duì)于查詢單詞的近義詞搜索,目前僅僅通過簡(jiǎn)單地引用領(lǐng)域庫資源樹的葉子節(jié)點(diǎn),可以進(jìn)一步加入單詞權(quán)重計(jì)算,更智能地搜索單詞相近詞語。
參考文獻(xiàn):
[1] 徐葉強(qiáng),朱艷輝,栗春亮,等.基于Lucene的海量數(shù)據(jù)庫全文檢索的設(shè)計(jì)與實(shí)現(xiàn)[J].湖南工業(yè)大學(xué)學(xué)報(bào),2011,25(2):81-84.
[2] 黃江平,黃理燦,徐 玲.基于Lucene的PDF文檔的全文檢索的實(shí)現(xiàn)[J].工業(yè)控制計(jì)算機(jī),2012,25(5):103-104.
[3] 勞志佳.基于Lucene 3.5搜索技術(shù)的研究與實(shí)現(xiàn)[J].現(xiàn)代計(jì)算機(jī),2012(4):70-73.
[4] 夏 天,黃 文,馬駿濤,等.Lucene全文檢索軟件及其在學(xué)科信息服務(wù)平臺(tái)中的應(yīng)用[J].圖書情報(bào)工作,2011,55(21):106-109.
[5] 李雪利,黃理燦,范晨熙.基于Lucene的文檔管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].工業(yè)控制計(jì)算機(jī),2012,25(10):87-88.
[6] MILOSAVLJEVIC B,BOBERIC D,SURLA D.Retrieval of bibliographic records using Apache Lucene[J].Electronic Library,2010,28(4):525-539.
[7] FENG Xia,TANG Xianchao.An improved dictionary-based Chinese word segmentation approach in Lucene[C]//Proceedings of 2010 international conference on services science,management and engineering.[s.l.]:IEEE,2010:363-366.
[8] 溫慧明,宮曉輝.基于Solr的科技成果查新系統(tǒng)的構(gòu)建研究[J].計(jì)算機(jī)技術(shù)與發(fā)展,2014,24(6):67-70.
[9] 羅 剛.解密搜索引擎技術(shù)實(shí)戰(zhàn):Lucene&Java精華版[M].北京:電子工業(yè)出版社,2016.
[10] 吳眾欣,沈家立.Lucene分析與應(yīng)用[M].北京:機(jī)械工業(yè)出本社,2008.
[11] LIU Tianyuan,SONG Meina,ZHANG Xiaoqi.Research of massive heterogeneous data integration based on Lucene and Xquery[C]//Proceedings of 2010 IEEE 2nd symposium on Web society.Beijing:IEEE,2010:648-652.
[12] GANTER B.Two basic algorithms in concept analysis[M].Berlin,Germany:Springer-Verlag,2010.
[13] RESNIK P.Semantic similarity in a taxonomy:an information based measure and its application to problems of ambiguity and natural language[J].Journal of Artificial Intelligence Research,1999,11:95-130.
[14] 馬小雨.基于AHP的煤炭科研項(xiàng)目評(píng)價(jià)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].北京:北京郵電大學(xué),2007.
[15] 李廣利,李書寧.科技查新報(bào)告自動(dòng)生成軟件的設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代圖書情報(bào)技術(shù),2013(2):82-87.