摘要:信息時代的到來產(chǎn)生了大量的數(shù)字信息,各種格式的電子文檔接踵而至,在這些海量的文檔中如何快速有效的查找到自己所需要的信息就成為一個現(xiàn)實的問題。本文在對全文檢索有關(guān)技術(shù)進(jìn)行分析和研究的基礎(chǔ)之上,提出并實現(xiàn)了一個實用的多文檔全文檢索系統(tǒng),為用戶提供了一種切實可行的解決方案。
關(guān)鍵詞:全文檢索 索引 設(shè)計 實現(xiàn)
0 引言
全文檢索是現(xiàn)代信息檢索技術(shù)的一個非常重要的分支,它是處理非結(jié)構(gòu)化數(shù)據(jù)的強大工具,也是搜索引擎的核心技術(shù)之一。全文檢索是指計算機索引程序通過掃描文章中的每一個詞,對文檔按各種策略進(jìn)行分詞,然后對切分得到的每個有檢索意義的詞建立索引,并指明該詞在文章中出現(xiàn)的次數(shù)和位置,當(dāng)用戶輸入檢索關(guān)鍵字進(jìn)行查詢時,檢索程序就根據(jù)事先建立的索引進(jìn)行查找,并將查找的結(jié)果按照某種順序反饋給用戶[1]。這個過程類似于通過字典中的檢索字表查字的過程。
目前,時下國內(nèi)外公司相繼推出的桌面搜索引擎是信息檢索技術(shù)在日常生活中的普遍推廣,比如:百度、Excite、Alta Vista、Google、InfoSeek等等。它們都是通用搜索引擎的代表,為人們查找和檢索信息資源提供了極大的便利。
雖然通用搜索引擎的功能十分強大,但是對于擁有很多子網(wǎng)站的大型網(wǎng)站來說,都存在響應(yīng)速度緩慢,索引結(jié)果不完整等一系列問題不能夠解決;并且,用這些通用搜索引擎的站內(nèi)搜索功能來實現(xiàn)全文檢索功能,往往達(dá)不到人們預(yù)想得到的結(jié)果,經(jīng)常會出現(xiàn)搜索結(jié)果不完全或者出現(xiàn)“死鏈接”的情況[2]。目前做的比較好的多是一些學(xué)術(shù)論文數(shù)據(jù)庫和專業(yè)數(shù)據(jù)庫,如清華同方開發(fā)的中國期刊全文數(shù)據(jù)庫(CNKI),北大與3M公司合作開發(fā)的中國對外經(jīng)濟貿(mào)易法律全文數(shù)據(jù)庫等。
1 中文全文檢索關(guān)鍵技術(shù)研究
建立一個全文檢索系統(tǒng),首先要將源文檔轉(zhuǎn)換為能夠進(jìn)行文本查找的全文數(shù)據(jù)庫,包括全文的分割處理以及檢索標(biāo)識的提取,這稱為全文本的前處理工作。本系統(tǒng)處理的對象大多數(shù)是WORD文本文檔,所以前處理實現(xiàn)對各種文檔格式的支持與轉(zhuǎn)換以及信息過濾,對信息的標(biāo)引、分類,生成可供檢索的索引庫,即進(jìn)行全文數(shù)據(jù)庫的組織與索引,這是整個系統(tǒng)的基礎(chǔ)。其中涉及以下幾個關(guān)鍵技術(shù)。
1.1 中文分詞研究
目前在自然語言處理中,中文處理技術(shù)要比西方文字的處理技術(shù)落后許多。許多西方文字的處理方法不能在中文中直接使用,這是由中文和西方文字的結(jié)構(gòu)和組成方式不同而造成的。解決方法就是把自然語言進(jìn)行分詞,英文的分詞相對容易,因為英文的每個單詞間都有天然的分隔符,但當(dāng)遇到中文時,就無能為力了。
要想對中文進(jìn)行完全精確的分詞,能夠正確表達(dá)其內(nèi)在的含義,幾乎可以稱之為不可能的任務(wù)。這是因為當(dāng)漢字的排列組合不同時,相同漢字就會出現(xiàn)不同的詞性和不同的詞義;另外,還要考慮到漢字所處的上下文語境。因此,想讓計算機理解并正確分析中文非常困難。我們可以采用常用的二分法。所謂二分法,就是將每兩個字當(dāng)作一個詞語進(jìn)行切分,然后建立索引。例如下面的文本。
當(dāng)使用二分法進(jìn)行切分時,切分出來的詞條應(yīng)該如下所示:
這種切分方式看似有些簡單,但是,它顯著減少了每個詞條后位置信息的長度,對提高搜索過程的速度,減少運算量有巨大的幫助。
1.2 全文檢索引擎——CLucene CLucene相當(dāng)于Lucene的一個C++端口,是一個對Lucene的移植,而Lucene是一個基于java的高性能的全文搜索引擎。它不是一個完整的全文索引應(yīng)用,而是一個用Java寫的全文索引引擎工具包,提供了完整的索引功能和查詢引擎,它為數(shù)據(jù)訪問和管理提供了簡單的函數(shù)調(diào)用接口,可以方便的嵌入到各種應(yīng)用中實現(xiàn)針對應(yīng)用的全文索引/檢索功能[3]。為文本中的每一個詞建立索引是CLucene的最主要工作,通過索引搜索關(guān)鍵詞的效率比傳統(tǒng)的字與字之間的匹配效率高出很多。
2 全文檢索系統(tǒng)的設(shè)計
2.1 數(shù)據(jù)加工模塊 為了能將WORD中的文本信息抽取出來,需要用到Visual C++自動化Microsoft Office 類型庫。打開一個WORD文檔,進(jìn)行宏錄制(工具\\宏\\錄制新宏),錄制下某一個WORD文檔的另存為(Saveas)操作,用這樣的方法,將一個WORD文檔轉(zhuǎn)化為一個純文本的TXT格式的文本文件。
接著的工作是要把文件夾中所有的WORD文檔都轉(zhuǎn)化成TXT格式的純文本文檔,這個過程用VBA好象無法實現(xiàn),因為宏錄制過程可以打開所有文檔,但最后的操作只是對最后打開的一個文檔的操作,所以調(diào)用CFileFind類中的相關(guān)函數(shù)來實現(xiàn),對應(yīng)的流程圖如圖1所示。
2.2 索引模塊 目前常用的索引方式有3種,分別是倒排、后綴數(shù)組和簽名文件。倒排索引已經(jīng)被當(dāng)前大多數(shù)信息系統(tǒng)所廣泛應(yīng)用,在CLucene中的索引方式就是倒排索引,它適合于人們的思維習(xí)慣,同時它對關(guān)鍵字的檢索也非常有效。后綴數(shù)組在短語查詢時,具有較快的速度,只是構(gòu)造和維護(hù)這樣的索引庫非常復(fù)雜。簽名文檔的方式已經(jīng)基本被淘汰,更多人轉(zhuǎn)而使用倒排方式[4]。
倒排的定義:用一個簡單的例子來說明什么是倒排。當(dāng)我們閱讀一本書時,通常使用頁數(shù)來查找相關(guān)內(nèi)容。每一頁上具有一定數(shù)量的文本,這些文本記錄了信息。當(dāng)使用倒排方式后,不再有整頁整頁的信息,這些信息被分割成一個個的關(guān)鍵字,并輔以關(guān)鍵字在原書中的頁數(shù),從而構(gòu)成一個倒排基本單位。
例如,如圖2所示,一本計算機類書籍的第188頁講述了“數(shù)據(jù)鏈路層”。在經(jīng)過倒排后,“數(shù)據(jù)鏈路層”被作為一個單獨的關(guān)鍵字切分出來,保存在索引中,同時還帶有其頁碼“188”,作為索引項的內(nèi)容。這樣,當(dāng)信息檢索系統(tǒng)檢索“數(shù)據(jù)鏈路層”這個關(guān)鍵字時,系統(tǒng)就可以迅速給出其頁碼,然后再到原書中取出相關(guān)頁面文本內(nèi)容。這種查找方式要比從第一頁開始,線性匹配所有文本,找出包含有“數(shù)據(jù)鏈路層”的頁面內(nèi)容要快的多。
從理論上說,倒排是一種面向單詞的索引機制。通常,它由(關(guān)鍵字)和出現(xiàn)情況兩部分組成。對于索引中的每個詞(關(guān)鍵字),都跟隨一個列表(位置表),用來記錄單詞在所有文檔中出現(xiàn)的位置。
2.3 檢索模塊 檢索模塊由查詢分析器和檢索器組成。查詢分析器,實現(xiàn)查詢關(guān)鍵詞間的運算,如與、或、非等;檢索器實現(xiàn)檢索管理,根據(jù)查詢條件,檢索得到結(jié)果,系統(tǒng)的檢索速度是評價全文檢索系統(tǒng)性能的重要指標(biāo)。
2.4 結(jié)果處理模塊 為了使檢索結(jié)果清晰的返回給用戶,將檢索出的文檔中所要檢索的關(guān)鍵字用高亮顯示,這里調(diào)用WORD的突出顯示功能,讓關(guān)鍵字以紅色背景高亮顯示,錄制下WORD中宏的突出顯示功能,其VBA代碼如下:
Selection.Range.HighlightColorIndex=wdRed
調(diào)用此功能來實現(xiàn)檢索結(jié)果的高亮顯示,達(dá)到檢索結(jié)果形式的清晰,便捷化。
將Word作為用戶應(yīng)用程序的服務(wù)器程序運行,它可以在用戶程序中被調(diào)用,即將WORD文檔放入用戶窗口時,作為一個內(nèi)嵌對象,并將WORD的菜單欄和工具欄融合進(jìn)用戶框架,用戶可以將對象作為一個WORD文檔而編輯。
3 結(jié)束語
本文在對全文檢索有關(guān)技術(shù)進(jìn)行分析和研究的基礎(chǔ)之上,提出并實現(xiàn)了一個實用的多文檔全文檢索系統(tǒng)。本系統(tǒng)采用的CLucene是開源的免費搜索模塊,易于獲得和進(jìn)行二次開發(fā)。因此本系統(tǒng)的設(shè)計實現(xiàn),無疑是提供了一種切實可行的解決方案。另外,基于CLucene的索引器結(jié)合中文分詞語言分析器還可以迅速為文檔庫建立全文檢索,具有非常良好的擴展性,所以,它不僅使用于搜索引擎系統(tǒng),而且還使用于目前廣泛應(yīng)用的專業(yè)文獻(xiàn)檢索系統(tǒng)。
參考文獻(xiàn):
[1]周曉蘭,金聲,謝紅主編.科技信息檢索與利用.2008.中國電力出版社.
[2]靖培棟,宋雯斐.全文檢索單元詞索引技術(shù)研究.情報理論與實踐.2006.29(1):118-121.
[3]毛卓寰.全文檢索軟件及發(fā)展.情報雜志.2006.18(5):37-38.
[4]Charles T.Meadow. Text Information Retrieval Systems 2nd edition.San Diego:Academic Press.2007.