【正文】
方法。這是 個已經(jīng)被校驗過的異常,它只是 Java中 Exception類的一個子類。同時, InputStream對象的使用方便,因為可以通過 (File)的構造函數(shù)把各種 File 類型的對象轉(zhuǎn)換成 FileInputStream類型的對象。 5. 索引文件的建立 通過建立索引文件,相當建立了一個數(shù)據(jù)映射表,使得在搜索階段,可以迅速的查詢到所要查詢的信息 ,這也是桌面搜索速度快的關鍵因素。 5.索引文件建立 利用 Lucene 包自帶的函數(shù),在經(jīng)過中文分詞后,進行倒排索引文件的建立 。 長沙學院 畢業(yè)設計 (論文 ) 6 5.速度優(yōu)先原則。 綜上所述,設計桌面搜索引擎具有較高的實用價值,在技術上和經(jīng)濟上都是可行的。 Lucene 的檢索算法屬于索引檢索,即用空間來換取時間,對需要檢索的文件、字符流進行全文索引,在檢索的時候?qū)λ饕M行快速的檢索,得到檢索位置,這個位置記錄檢索詞出現(xiàn)的文件路徑或者某個關鍵詞。 Struts 為 Web 應用提供了一個通用的框架,使得開發(fā)人員可以把精力 長沙學院 畢業(yè)設計 (論文 ) 4 集中在如何解決實際業(yè)務問題上。 對于以后的中文分詞發(fā)展前景,主要還是利用人工智能進行處理?;谧址ヅ涞姆衷~方法主要有正向最大匹配法、逆向最大匹配法和最少切分法,或者這三種方法的一些相互組合,然而使用這些方法的精確度還遠遠不能滿足實際的一要求 ,實際上使用的分詞系統(tǒng),都是把這種分詞作為一種初分手段,還需通過利用各種其他的語言信息來進一步提高切分的準確率 [9]。 Windows 硬盤搜索,無論是綜合能力,還是資源占用方面,均排名靠前,而且,憑借其與操作系統(tǒng)的緊密結合,日常使用時將更加得心應手。 應用軟件系統(tǒng)名稱:桌面搜索工具 項目任務的提出者: 開發(fā)時間:三個月 使用軟件的部門: 開發(fā)背景 進入 21 世紀以來,互聯(lián)網(wǎng)飛速發(fā)展,日常生活中人們 從互聯(lián)網(wǎng)上數(shù)以十億計的文檔中搜索信息已經(jīng)變得相對簡單 [1], 大多數(shù) 用戶通過一些搜索網(wǎng)站,比如:百度,谷歌,搜搜等等,都可以輕而實現(xiàn), 但在計算機的硬盤上查找一個 Word、 TXT 或 HTML 文件仍然不是一件容易的事。 論文以 Lucene 搜索引擎包 的研究 為基礎,探討一個桌面搜索工具的設計與實現(xiàn)。 關鍵詞: 搜索引擎,桌面搜索 , Lucene 長沙學院 畢業(yè)設計 (論文 ) II ABSTRACT With the rapid development of puter technology, The volume of personal puter hard disk is increasing, and Desktop Search is imperative. Lucene is a free, open ,high performance, and pure Java search engine jar. It is much easier to implement index and search of personal documents, designing desktop searching tools by using Lucene. The thesis has discussed the design and implementation of a Desktop Search tool based on the research of Lucene jar. The first chapter is an introduction, and it is about the origin of topic design, the background of development, the present situation of research home and abroad, the aim of developmentl,and the development kit as well as demand of software and hardware。人們非常希望在自己容量龐大的硬盤里尋找 Word 文檔、 PDF 或者文本文件,或者 c,cpp,pas,java,asp,php 等程序的源代碼文件時,就像 在網(wǎng)頁上 進行關鍵字搜索那么簡單。 國內(nèi)外研究現(xiàn)狀及前景 目前已經(jīng)有許多大公司投入桌面搜索的研究當中,比如:百度,谷歌,中搜,微軟等。實際應用的統(tǒng)計方法 長沙學院 畢業(yè)設計 (論文 ) 3 都要使用一部基本的分詞詞典進行串匹配分詞,同樣使用統(tǒng)計方法識別一些新詞,即將串頻統(tǒng)計和串匹配結合起來,發(fā)揮匹配分詞切分速度快、效率高的特點,又利用了無詞典分詞結合上下文識別生詞、自動消除歧義的優(yōu)點。以上兩種思路也是近年來人工智能領域研究的熱點問題 , 應用到分詞 方法上 , 于是產(chǎn)生了專家系統(tǒng)分詞法和神經(jīng)網(wǎng)絡分詞法 。對于一個初學者來說,可以這樣認為,當在一臺機器上配置好 Apahce 服務器,可利用它響應對 HTML 頁面的訪問請求。所以利用 Lucene 進行桌面搜索的設計 具有可行性。運用面向?qū)ο蠹夹g的前提是對整體系統(tǒng)的高度和準確抽象,通過它可以保證系統(tǒng)良好的框架,進而帶來產(chǎn)品較強的穩(wěn)定性和運行效率。要符合設計需求,在有可能改進的地方進行擴充,使系統(tǒng)更適應用戶的需要。 任務概述 綜合上述分析,本次設計的主要目的是搜索硬盤里 Html 網(wǎng)頁、 Word 文檔 、 txt 純文本,根據(jù)不同的后綴名進行相應的解析,并最后通過中文分詞等處理,生成適合查找的相應的倒排索引文件,而在搜索階段,對用戶輸入的不同要求,對輸入的內(nèi)容進行中文分詞,并提取出關鍵字,然后在索引文件里面進行查找,并返回所需查找文件的路徑以及相應關鍵字段周圍的截斷部分。 爬蟲索引模塊以及其一些索引測試程序在工程 IndexFiles 里實現(xiàn),而檢索模塊以及其 一些搜索測試測試程序在工程FilesSearcher 里實現(xiàn) 。 Html文件 Txt文件 Doc 文件 純文本 純文本 純文本 詞匯 目錄 信息 文件 信息 索引表 索引信息 收集 目錄下的文件信息 分析文件后綴名 解析HTML 直接讀入 解析 DOC 中文分詞 保存 長沙學院 畢業(yè)設計 (論文 ) 10 import 。此外,還將創(chuàng)建一個實現(xiàn) FileHandler 接口的 ExtensionFileHandler類。 //Properties實例將文件擴展名映射到能夠解析以這些擴展名為后綴的 //件的 DocumentHandler實現(xiàn)類上。 //得到映射后的對應分析器的類 if (handlerClassName == null) return null。但是一些開源的項目已經(jīng)給出了一些解決方案。 實現(xiàn)過程 使用 API 很簡單,關鍵代碼如下 : public Document getDocument(InputStream is,File file)throws DocumentHandlerException //這里實現(xiàn)了 DocumentHandler接口中的 getDocument()方法,將 MS Word文檔 //中的InputStream對象作為參數(shù)傳遞給這個方法。 (new Field(doc_body, bodyText,))。 //返回解析并索引后的結果對象 doc } return null。然后使用標準的 DOM API 方法可以得到兩個 HTML 元素的的 文本值 也就是希望索引的文本標題和正文元素,即 title 和 body。 doc =new ()。 (!())) { (new Field(html_title, title,))。//返回 doc對象給調(diào)用的函數(shù) } protected String getTitle(Element rawDoc) //getTitle方法遍歷了 DOM樹,并返回所找到的第一個 title元素的文本值 { if (rawDoc == null) { return null。 } } return title。該方法返回 //body與 /body標簽之前的所有文本。 switch (()) { case : (getText(child))。 主要技術、方法 在此桌面搜索工具的實現(xiàn)過程中, Lucene提供的這幾個核心類是需要使用的,通過這幾個類的合理使用,可以達到對于純文本的索引。盡管它提供了與 FSDirectory 相同的接口,RAMDirectory 將它的所有數(shù)據(jù)加載到內(nèi)存中。 4. Document Lucene里的 Document可以理解為一個虛擬的文檔,可以往 Document里面存或者取大量數(shù)據(jù)。 Text域:需要被分析且索引。 //實例化一個 IndexWriter,指定使用 ChineseAnalyzer分析器 indexDirectory(writer,dataDir)。i++) { File f=files[i]。 //doc對象寫進 writer } 長沙學院 畢業(yè)設計 (論文 ) 22 單元測試 編寫測試用例 TestText類,測試索引 D盤 dataDir文件夾里面的 text文檔,測試結果如圖 : 圖 測試索引純文本文檔 利用 IndexerTest類測試索引后得到的結果,搜索內(nèi)容為 ”王敏 ”,結果如圖 : 圖 測試搜索純文本文檔 運行結果 利用文檔解析框架來對硬盤上文件建立索引,運行結果如圖 : 圖 建立索引運行結果 長沙學院 畢業(yè)設計 (論文 ) 23 第四章 文檔搜索 功能 設計 與實現(xiàn) 文檔搜索的實現(xiàn)將設計在瀏覽器上進行,以下選出重要的模塊進行詳細的介紹和分析,下圖為文檔搜索的功能級數(shù)據(jù)流圖: 圖 搜索的功能級數(shù)據(jù)流圖 從用戶角度看,搜索活動的過程如圖 所示: 圖 搜索時的 UML活動圖 索引表 查詢子句 分割后的詞匯集合 查詢結果 中文分詞 語法分析,提取關鍵字集合 查詢關鍵字 關鍵字結合 結果顯示 長沙學院 畢業(yè)設計 (論文 ) 24 搜索框架設計 由于此次設計采用 C/S 設計,用戶搜索在瀏覽器上進行,在后臺服務器 tomcat 的支持下,將采用 struts 框架進行桌面搜索工具的搜索框架設計。 //實例化一個 Documents對象 (new Field(body, new FileReader(f)))。//關閉 writer return numIndexed。//記錄開始時間 int numIndexed=index(indexDir,dataDir)。 UnIndexed域:既不需要被分析也不進行索引,但是該值同樣被存儲在索引文件中。 Analyzer在 IndexWriter的構造函數(shù)中指定 。它是一個抽象類,它的子類 (其中的兩個包含在 Lucene 中 )在合適時存儲索引。 break。 StringBuffer sb = new StringBuffer()。 //調(diào)用標 準的 DOM API接口,得到所有 body元素列表。 //獲取第一個元素。 //對 HTML文檔的 body進行索引、分詞,并存儲在 html_body域中 } try { (new Field(filepath, (), ))。 //調(diào)用 getBody方法得到 HTML文檔的正文全文。 (false)。 長沙學院 畢業(yè)設計 (論文 ) 16 主要技術、思路 Html 文檔隨處可見,大部分 web 文檔采用的是 html 格式。 (new Field(doc_filename,(),))。 } catch (Exception e) { throw new DocumentHandlerException(Cannot extract text from a Word document,e)。 API 提供了一個可以替換 Jakarta POI API 的接口,這使得系統(tǒng)可以從 WORD 文檔中提取文本十分容易。 return (new FileInputStream(file),file)。amp。通過實例化不同的解析器,既可以索引相應文檔。 假如在處理過程中發(fā)生了任何類型的錯誤,所有實現(xiàn)了 Docu