999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

海量文檔桌面全文檢索終端設計與實現

2018-12-22 07:53:44張俊飛
現代計算機 2018年33期

張俊飛

(廣州醫科大學,廣州511436)

0 引言

信息技術的發展,推動了高校信息化教學和無紙化辦公,出現了越來越多的非結構化數字文檔。如何快速對非結構化的海量文檔進行檢索成為當前研究的熱點。傳統的方法是對每一個文檔進行遍歷,然而對于海量文檔來說,這是一件很耗費時間和精力的事情。全文檢索是一種高效的信息檢索技術,可以快速地從海量文檔中查詢內容,提高檢索效率。

Lucene是一套用于全文檢索的開源程序庫,是Apache軟件基金會Jakarta項目組的一個子項目[1]。Lucene不僅可以被用來構建具體的全文檢索應用,還可以嵌入到各種系統軟件中。近幾年,Lucene已在各個領域中的應用得到了研究,如音視頻資源檢索[2]、學科領域的應用[3-4]、行業應用[5-6]。文獻[7]通過對倒排索引的研究,實現了基于正向減字最大匹配分詞方式的中文索引,提高了中文分詞效率。文獻[8]研究了Lu?cene索引查詢與關系數據庫的差異。文獻[9]利用Ha?doop和Lucene的結合,實現云存儲網絡文檔共享服務。隨著信息技術的發展,Lucene技術及其配套的組件也發生了變化,本文著重于文檔解析、中文分詞器、查詢結果的顯示處理等方面進行論述。

1 系統結構設計

全文檢索是指計算機對檢索的數據源中每一個文檔通過文檔解析、分詞操作,對其進行創建索引庫,然后檢索索引庫,采用倒排索引技術把查找到相關文檔反饋給用戶的過程。

本研究采用Swing技術對Lucene及其配套組件進行整合,開發基于桌面應用的全文搜索終端。Swing是面向Java應用程序用戶界面的開發工具包,采用抽象窗口工具包(AWT),使應用程序具有跨平臺性,并且可以使用任何可插拔的外觀風格。Swing豐富、靈活的功能和模塊化組件使得Swing開發人員更加容易的創建優雅的用戶界面。

本研發的桌面全文檢索終端包含文檔讀取模塊、索引模塊、檢索模塊等全文檢索核心功能。系統結構如圖1所示。

圖1 系統結構

2 關鍵技術

2.1 倒排索引

為了實現快速檢索,Lucene采用倒排索引的數據結構[10]。倒排索引是根據屬性值查找記錄數據,每個屬性包含該屬性歸屬的記錄數據地址。通常認為單詞是文檔的組成部分,反轉認為文檔是依附單詞存在,這樣的索引就稱作倒排,由屬性值查找記錄數據的位置因而稱為倒排索引。倒排索引以文檔形式存儲,形成倒排文檔。

全文檢索的關鍵步驟就是建立倒排索引,倒排索引一般表示為一個關鍵詞,并記錄它出現的頻數、地址等相關信息。好比書本的目錄結構,可以直接根據目錄提示信息,查看到章節信息摘要、頁碼等,從而獲取章節信息,不必對書進行全部遍歷。

Lucene的索引結構可以分為索引(index)、索引段(segment)、索引文檔(document)、索引域(field)和索引項(term)五個層次。五個層次之間是具有包含關系的,每個索引由一個或者多個索引段組成,每個段包含一個或者多個索引文檔,每個文檔又管理一個或者多個索引域,每個域由一個或多個索引項構成,而每個索引項就是一個索引數據。Lucene 5.2.1生成的索引文檔類型如表1所示。

表1 索引文檔類型

2.2 分詞器技術

本研究終端主要針對中文文檔進行全文檢索,目前中文分詞算法大概分為兩大類:①基于詞典分詞法。掃描字符串,按照正向或逆向最大匹配,最小切分等策略。②非詞典分詞法。基于統計以及機器學習的分詞方式。

第一種分詞算法比較常見,在實際應用中,通常是多種算法整合使用,同時加入多個屬性值如詞頻、詞性等以輔助分詞處理,達到理想的輸出效果。這種算法形成的分詞器分詞速度快,時間復雜度較低,實現簡單。第二種分詞器目前常見的是HMM、CRF等,主要運用了機器學習、概率統計等領域的方法。這種分詞器需要提前對文件進行建模,根據標注好的語料庫對模型參數進行訓練,通過對模型分詞概率的計算,將概率最大的分詞結果作為輸出結果。這種分詞方法對未知詞語的分詞處理較好,能夠根據訓練出的領域模型提高分詞精度,但是需要大量的前期準備,實現比較復雜。

Lucene是開源高性能的Java全文檢索引擎架構,提供了完整的查詢引擎、索引引擎和部分文本分析引擎。Lucene內部自帶了一些分詞器,如:StandardAna?lyzer、SimpleAnalyzer、WhitespaceAnalyzer、StopAnalyz?er、SmartChineseAnalyzer等分詞器。但是在本研究中主要是針對中文分詞,Lucene內部這些分詞器不能滿足要求。故本研究采用MMSeg4j分詞器,它是基于MMSeg算法實現的中文分詞組件。

MMSeg是一種基于詞典的分詞算法,采取正向最大匹配策略,同時加入多種消除歧義的規則。其算法實現方式分為兩種:①SimpleAnalyzer,簡單的按照匹配上的最長詞條做切分;②ComplexAnalyzer,在正向最大匹配的基礎上,添加了相鄰詞的詞長策略,設計了四個去歧義規則指導分詞。四個規則分別為:備選詞塊的長度最大、備選詞塊的平均詞長最大、備選詞塊的詞長變化最小、備選詞塊中單字的出現詞自由度最高。在實際應用中,一般都整合使用ComplexAnalyzer和四個過濾規則。

本文重點比較了Lucene自帶的兩種中文分詞器:SmartChineseAnalyzer、StandardAnalyzer和 MMseg4j分詞器的ComplexAnalyzer實現方法。以“計算機軟件工程教育技術全文搜索引擎”為例,并在MMseg4j詞庫中添加了“計算機軟件工程”和“教育技術”兩個詞條,測試結果如表2所示。

表2 分詞器對比分析結果

從表2中可以看出,StandardAnalyzer分詞器實現了對中文單字的分詞,不能滿足用戶基于詞的分詞效果;SmartChineseAnalyzer實現了基于詞的分詞,但是不能夠得到用戶指定的詞條,且耗時較長。MMseg4j分詞器的ComplexAnalyzer能夠提供用戶自定義分詞詞條,且耗時較少。

2.3 基于組件的文檔解析

在創建索引時,一個最重要的步驟就是從文檔中提取文本。然而海量文檔格式繁多,如Outlook、MS Of?fice、PDF、RTF等,對不是同一編碼格式的文檔內容提取處理將不是一件簡單的事情。

Apache Tika是一種簡單易用的程序框架,針對不同的文檔類型使用相同的API。Tika本身并不完成任何文檔的過濾提取,而是通過外部獨立的解析程序完成對文檔的解析。除了文本文檔之外,Tika還可以提取元數據[11]。Tika使用內部解析類庫實現對文檔的解析,對應的文檔格式和Tika類如表3所示。

表3 Tika解析文檔格式

2.4 查詢結果數據的顯示模塊

Lucene提供兩種高亮方式:FastVectorHighlighter和Hightlighter。FastVectorHighlighter是基于項向量實現的,通過對每個域中的Term的位置信息進行標注,實現檢索的方便快速定位,但是這就意味著需要額外存儲空間和磁盤I/O操作,索引體積會變大,占用更大內存。故采用Hightlighter犧牲高亮標注時間,增加系統松耦合性。

使用Lucene自帶的Highlighter就可以實現對原始文檔摘要的提取工作。通過對Highlighter類中get?BestFragment方法的重載,實現從指定的原始文檔中,提取檢索關鍵字出現頻率最高的一段文字作為摘要,默認情況下提取100個字符,同時加上自定義的高亮顯示代碼實現關鍵字高亮顯示。

3 終端實現

終端實現了對本地海量文檔的全文檢索。通過Swing中的JFileChooser組件實現海量本地文檔數據源的定位。通過對MMseg4j分詞器的詞庫文檔的編輯實現用戶對需要查詢詞條的添加。索引模塊采用Tika框架實現對文檔的解析,MMseg4j分詞器的MMseg算法實現對字符串流的分詞,使用Lucene封裝的Index?Writer方法創建索引。

SwingX是一個包含Swing GUI工具包的擴展控件,為富客戶端應用提供豐富的組件。采用其中的JX?BusyLabel組件實現程序加載中的友好提示,如圖2所示。

圖2 SwingX組件

圖3 檢索方式

本研究實現的全文檢索方式有六種:通過項搜索、組合搜索、短語搜索、通配符搜索、模糊搜索、匹配所有文檔搜索。

通過項搜索是對索引中特定項進行搜索的最基本方式。Term是最小的索引片段,每個Term包含一個域名和一個文本值。

組合搜索通過使用邏輯AND、OR和NOT把各種查詢類型組合成復雜的查詢方式。在本系統中,組合查詢整合了兩個通過項查詢,如下代碼所示。

短語搜索根據位置信息查詢到某個距離范圍內的項所對應的文檔。

通配符查詢通過使用“*”和“?”進行查詢。*代表0個或者多個字符;?代表0個或者多個字符。

模糊查詢用于查詢與指定項相似的項的一種查詢方式,通過Levenshtein距離算法來決定索引文檔中的項與指定目標項的相似度。編輯距離越小的項所獲得的評分越高,編輯距離公式如公式(1)。

匹配所有文檔搜索,顧名思義就是匹配索引中所有文檔。文檔查詢加權默認值是1.0,加權值起到排序作用。

通過項搜索界面如圖4所示,其他檢索界面布局一致。在檢索界面中,查詢按鈕實現了對輸入項的全文查找。詳情按鈕采用 DJNativeSwing.jar、DJNa?tiveSwing-SWT.jar和org.eclipse.swt.win32.win32.x86_64-4.2.jar三個jar包,實現在終端中嵌入一個瀏覽器,把查詢結果以網頁形式高亮顯示反饋給用戶,如圖5所示。導出按鈕實現把查詢到的信息文檔復制到指定的文檔夾中,便于用戶集中閱讀。

圖4 通過項搜索圖

圖5 檢索結果

Luke是一個針對Lucene搜索引擎,方便開發和診斷的第三方工具,它可以訪問Lucene創建的索引,并允許顯示和修改。本研究使用lukeall-5.2.1.jar實現對創建索引的查看,如圖6所示。

圖6 Luke應用界面

最后,Eclipse把開發好Swing程序,發布成終端jar文件,然后采用exe4j工具把終端jar文件和終端運行依賴環境文件夾jre7一起打包成可獨立執行的exe文檔。

4 實驗操作

實驗過程,采用普通PC,配置參數為:Intel Core i3-3240 CPU x64處理器,頻率為3.4GHz,內存4GB,64位操作系統。選取 MS Office、CAJ、TXT、網頁、PDF 等不同格式文檔組成四個不同大小的數據源文件夾,總大小分為40.9M、385M、770M、1.1G。終端可以直接拷貝到PC上,運行exe主程序,對選取的數據源進行索引創建和檢索操作。

從實驗結果表4、圖8可以看出,數據源大小對文檔索引和檢索速率產生了影響,當數據源大小達到某個數值的時候,速率會下降,在本實驗中,數據源大小在385M處索引速率和檢索速率發生下降;當數據源總大小超過某個數值的時候,索引速率和檢索速率變化幅度變小。終端在實際的使用過程中,基本可以實現用戶本地海量文檔的快速檢索,其具備較高應用價值。

圖7 終端應用圖

表4 實驗對比分析結果

圖8 實驗對比分析圖

5 結語

本文針對海量本地文檔檢索問題,設計和研發了一款全文檢索桌面終端軟件。該終端具有友好的用戶體驗,可以針對不同格式文檔進行解析,實現基于詞典的分詞操作,采用Swing配套組件實現查詢結果以網頁形式顯示在桌面終端程序中,并對結果數據進行了高亮處理。后期的實驗數據驗證了終端的可使用性,其具有一定的應用價值。

主站蜘蛛池模板: 国产精品私拍99pans大尺度| 国产午夜福利在线小视频| 亚洲欧美极品| 91久久国产综合精品| 欧美成人国产| 国产成人精品综合| 日韩美一区二区| 国产精品手机在线观看你懂的| 欧美人人干| 欧美三級片黃色三級片黃色1| 欧美视频在线第一页| 久久五月视频| 国产在线观看91精品亚瑟| 精品午夜国产福利观看| 亚洲成av人无码综合在线观看| 亚洲第一综合天堂另类专| 亚洲综合亚洲国产尤物| 日韩精品专区免费无码aⅴ| 2021亚洲精品不卡a| 久久熟女AV| AV无码无在线观看免费| 天天干天天色综合网| 成人午夜福利视频| 白浆视频在线观看| 国产99精品久久| 国产精品真实对白精彩久久| 国产综合网站| 国产毛片不卡| 欧美劲爆第一页| 美女国内精品自产拍在线播放| 丁香综合在线| 不卡无码h在线观看| 国产成本人片免费a∨短片| 久热中文字幕在线| 亚洲视频影院| 四虎永久在线精品影院| 免费在线看黄网址| 色综合热无码热国产| 久久香蕉国产线看精品| 国产黄色片在线看| 无码日韩人妻精品久久蜜桃| 亚洲欧洲免费视频| 亚洲一区无码在线| 精品伊人久久大香线蕉网站| 91青青视频| 日本福利视频网站| 99热这里只有精品免费国产| 午夜性刺激在线观看免费| 亚洲日韩久久综合中文字幕| 中文字幕亚洲电影| 国产免费网址| 91精品国产福利| 四虎综合网| 亚洲一区二区三区国产精品| 亚洲日韩每日更新| 亚洲第一极品精品无码| 亚洲欧美日韩中文字幕在线一区| 国产成人精品高清不卡在线| 国产成人高清亚洲一区久久| 国产成熟女人性满足视频| 亚洲91精品视频| 国产网站一区二区三区| 国产欧美日韩va另类在线播放| 久久婷婷五月综合97色| 亚洲国产天堂在线观看| 欧美成a人片在线观看| 亚洲二区视频| a毛片在线| 国产a v无码专区亚洲av| 综合社区亚洲熟妇p| 精品国产香蕉在线播出| 综合久久久久久久综合网| 国产亚洲欧美在线视频| 色首页AV在线| 沈阳少妇高潮在线| 波多野结衣一区二区三区88| 国产亚洲一区二区三区在线| 中字无码av在线电影| 97精品国产高清久久久久蜜芽| 国产av一码二码三码无码| 色欲综合久久中文字幕网| 激情六月丁香婷婷四房播|