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