




下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、基于Java的搜索引擎Nutch中文搜索技術研究 摘要:Nutch是一個優秀的基于Java的開放源碼搜索引擎,為了使它能夠支持中文搜索,本文在分析了Nutch結構的基礎上,采用詞表分詞技術和前向匹配分詞算法對中文信息進行分詞,以JavaCC腳本實現上下文相關文法中文分析模塊,成功實現了Nutch中文搜索功能。關鍵詞:搜索引擎; 分詞; 正規Abstract: In order to enable Chinese search in Nutch, which is an excellent Java-
2、based open source search engine, this paper analyses the structure of Nutch and separates words in Chinese information based on Chinese dictionary and forward matching algorithm. Chinese analysis module is generated by JavaCC script; that results in supporting Chinese search in Nutch.Key words: Sear
3、ch Engine; Word Segmentation; Regular Expression1 前言搜索引擎1是當今網絡應用的核心問題,已經受到各企業和研究部門的廣泛關注。Lucene和Nutch是針對國外英文系統環境的搜索引擎,本文在研究了中文分詞技術和JavaCC技術的基礎上,成功地實現了Lucene和Nucth的中文分析模塊,使Lucene和Nucth能夠實現中文信息檢索。2 Nutch分析Lucene是開放源碼的基于Java的全文檢索引擎,其貢獻者Doug Cutting是一位資深全文索引/檢索專家。作為一個全文檢索系統,在進行檢索之前需要建立索引,索引的過程是先讀取文章中的詞語,
4、然后一一存放在稱為倒排索引文件的索引數據庫(Index Database)中。索引數據庫記錄了詞語出現的位置,頻率等相關信息,以備后面讀取。Nutch是Cutting創建的另一個Java開源項目,目的是提供全功能的搜索引擎,其底層借助了Lucene的部分功能,并且索引結構與Lucene兼容。Lucene和Nutch并沒有規定數據源的格式,而只提供了一個通用的結構(Document對象)來接受索引的輸入,因此輸入的數據源可以是數據庫、WORD文檔、PDF文檔和HTML文檔,只要能夠設計相應的解析轉換器將數據源構造成Docuement對象即可進行索引。對于大批量的數據索引,還可以通過調整Index
5、erWrite的文件合并頻率屬性(MergeFactor)來提高批量索引的效率。用戶輸入查詢字符串(Query String),然后經過分析器的分析,就會產生一個Query對象。真正搜索時,使用IndexSearcher類的search方法,它返回Hits對象。通過遍歷Hits對象的所有文檔(document),就可以找到所有被搜索到的文章(頁面)。查詢字符串的語法定義為Query := ( Clause )*Clause := "+", "-" TERM ":" ( TERM | "(" Query "
6、)")中間的邏輯包括:and or + - &&|等符號,而且還有"短語查詢"和針對西文的前綴/模糊查詢等。總的來說,這是其他很多搜索引擎都不具備的功能。通過修改QueryParser的語法生成腳本,還可以修改或擴展查詢分析器的功能,使它更加適用于中文環境。所有的問題都通過一個額外抽象層來方便以后的擴展和重用,通過重新實現來達到自己的目的,而對其他模塊而不需要。可以簡單的應用入口Searcher, Indexer,并調用底層一系列組件協同的完成搜索任務。所有的對象的任務都非常專一,比如搜索過程QueryParser分析將查詢語句轉換成一系列的精確查
7、詢的組合(Query),通過底層的索引讀取結構IndexReader進行索引的讀取,并用相應的打分器給搜索結果進行打分/排序等。所有的功能模塊原子化程度非常高,因此可以通過重新實現而不需要修改其他模塊。除了靈活的應用接口設計,Lucene和Nutch還提供了一些適合大多數應用的語言分析器實現(SimpleAnalyser,StandardAnalyser),這也是新用戶能夠很快上手的重要原因之一。 3 Nutch中文搜索3.1 中文分詞在搜索引擎和各種語言處理的需要中,分詞可以說是最基本的操作。漢
8、語句子是由詞語組成的,人們在使用漢語時,可以直接理解并使用它。對于計算機,是不可能達到人類的智能的,也不能理解人類語言。但是,由于人類仍然希望計算機能理解人類的語言,并且迫切的希望使用在各種商業和技術領域中,因此提出了計算機形式文法。但是現有形式文法是建立在事先分詞的基礎上的。對于某些語言,單詞之間有特定的符號隔開(一般是空格),所以沒有任何分詞的困難。而漢語與其他語言都有很大的不同,漢字之間沒有空格。如果想繼續沿用西方的形式文法理論處理漢語,那么必然涉及到中文分詞問題。在系統實現中使用詞表分詞。詞表中文分詞的原理,是根據現有詞庫進行字符串模式匹配,把長的字符串分割為若干個詞庫中已經存在的詞語
9、即可。因此,制作詞庫成為必須的,詞庫中詞語的選擇也要慎重。系統選擇的是一個大小為53301個中文詞語,按照拼音順序排列的文本格式的詞庫,詞語之間使用回車符隔開。這個詞庫在使用時,要全部調入內存。為此,使用哈希表來實現。這是因為詞庫是使用最頻繁的公有資源,把詞庫的調入和查詞工作封裝到WordDataBase類中,這是一個靜態類作為公有資源使用,不允許產生多個實例。分詞系統同時為Lucene索引器、Lucene查詢分析器和Nutch分析器提供服務。詞庫選擇的好壞,直接影響著Lucene和Nutch的表現。對于Lucene來說,是否收入長詞語并沒有多大關系。因為Lucene可以將相對短的詞語進行索引
10、,查詢時,不會造成什么影響。例如,“中華人民共和國”這個詞語并不存在于詞庫中,而是“中華”,“人民”,“共和國”三個詞語存在。在索引時,這三個詞語被連續的索引。Lucene查詢分析器將“中華人民共和國”解釋為一個短語查詢對象(PhraseQuery),由三個TermQuery組成,分別是“中華”,“人民”,“共和國”。由于PhraseQuery查詢要求索引中的詞語順序必須與組成它的TermQuery的順序一致且必須連續,因此在查詢時同樣能正確的查到。如此一來,似乎可以不再需要詞庫,直接對每一個漢字做索引就可以了。這樣做當然沒有任何問題,有些搜索引擎就是這么做的。但是為了查準率,這樣做就有一個缺
11、點,即分詞中的交叉歧義和包含歧義問題。由于是在無語義的情況下分詞,只能作某些字符串運算(實際上是字符串模式匹配)來進行分詞,因此出現了不同的分詞策略。每一種策略的分詞結果可能不同,這完全依賴于詞庫。所有的分詞方法為:前向遞增最大匹配分詞、前向遞減最大匹配分詞、前向遞增最小匹配分詞、前向遞減最小匹配分詞、后向遞增最大匹配分詞、后向遞減最大匹配分詞、后向遞增最小匹配分詞和后向遞減最小匹配分詞,共計8種方法。系統實現了4種前向分詞方法,基本上就可以滿足需要。由于現代漢語文章中,充斥著大量的英文單詞甚至句子,尤其是計算機方面。鑒于英文是世界上使用最廣泛的語言,中文文章中含有另外的語言的可能性不大。英文
12、分詞是很簡單的,根據空格作為分隔符即可。但是,還有一些特殊的單詞,必須要考慮。另外涉及到一個重要問題,也是最復雜的一個問題,就是漢字之間的空格如何處理。一般來講,漢字之間不可能出現空格。在計算機中,有時候為明確區分漢字,也人為地加上空格。處理方法是決不可以把空格當作中文的詞語分隔符,因為空格一般恰恰是出現在詞語的中間。對于整個分詞系統來說,還應該允許用戶自由選擇需要的詞語,即提供過濾功能。系統允許用戶設置中文詞語,英文詞語,中文停止詞,英文停止詞分別是否要加入結果Word列表中。停止詞表示一種語言中的大量出現且無關緊要的通用詞語,例如助詞、嘆詞和介詞等。這些信息預先定義在WordDataBas
13、e中。對于中文來說,“的”,“地”,“得”等都可以作為停止詞。對于英文,則有“this”,“are”,“the”等。3.2 JavaCC分析JavaCC是集分詞和語法分析與一身的針對Java語言的文本自動分詞軟件包,類似于Unix系統中的LEX和YACC工具。JavaCC把這兩者的功能結合,形成了一個功能強大的分析工具。用戶只需寫出分析腳本,JavaCC就會生成符合用戶要求的類,用來進行詞法和語法分析。JavaCC使用了自動機的理論,而不是遞歸下降分析,Lucene和Nutch正是利用JavaCC這個十分強大的工具,生成系統的分詞器。JavaCC的語法定義是由正規式(Regular Expre
14、ssion)來完成的。在這里,指的是上下文無關文法。理解形式文法的定義,才能更好的理解和使用JavaCC。在一種語言中,存在非終結符和終結符兩種單詞。正規式就定義了一個非終結符怎樣被替換為另一個字符串。正規式可以描述一種語言,符合該正規式定義的所有句子都是這個語言的句子。或者,正規式描述了正規文法,又稱線性文法,或上下文無關文法。稱為線性,是因為這種文法可以從前到后順序的被指定為一個句子。JavaCC的語法定義功能十分強大,可以做幾乎所有的限制和指定。它提供了四種正規式類型regexpr_kind := "TOKEN" | "SPECIAL_TOKEN
15、" | "SKIP" | "MORE" TOKEN: 它表示語法中的單詞(Token),這個段中的正規式規定了這種語言中單詞的語法,即分詞的依據。單詞管理器(TokenManager)依據每一個正規式來匹配下一個單詞,這是按照最大匹配規則進行的。如果有多個匹配,那么選擇最長的單詞返回。如果有幾種正規式產生了相同長度的最長單詞,那么以較笨重正規式的順序,返回最先定義的正規式產生的單詞。單詞管理器匹配出要返回的單詞后,即返回給語法分析器。SPECIAL_TOKEN: 在SPECIAL_TOKEN段寫出的正規式規定了特殊單詞。
16、特殊單詞也是一種單詞,但是并不起實際的作用,也不能從getNextToken中訪問到。它的訪問方式是從Token類的specialToken屬性來讀取。對于一種語言,如果某些單詞不起語法的作用,但也是句子的一部分,那么可以使用特殊單詞。例如編程語言中的注釋。SKIP: 由SKIP段產生的單詞被跳過(即忽略)。當我們不惜望出現某種模式的單詞時,即可使用SKIP段。MORE: 當一個單詞不能一次被產生,而必須逐漸產生時,則使用MORE。未完成的Token被存儲在一個StringBuffer對象中,我們可以任意修改。所謂正規式,實際就是產生式。它的語法格式javacode_production :=
17、 "JAVACODE" java_return_type java_identifier "(" java_parameter_list ")" java_block JAVACODE產生式可以寫入任何Java代碼,也可以寫EBNF(擴展的Backus-Naur范式)。實際上,在某種程度上上下文無關語言就變成了上下文相關語言,因為Java代碼可以處理有關語境的信息。例如,在修改的腳本加入了代碼以后,就是一個上下文相關語言。有時候,當EBNF無法自行描述語法時,也可以借助“
18、無所不能的”Java代碼。例如下面的代碼,非終結符 "skip_to_matching_brace"的作用是跳過完整匹配的括號。實際上,這個工作是EBNF無法完成的,因為它描述的不是線性文法。但是,使用Java代碼可以很容易的解決 JAVACODE void skip_to_matching_brace() Token tok; int nesting = 1; while (true) tok = getToken(1); if (tok.kind = LBRACE) nesting+; if (tok.kind = RBRACE)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年廣東輕工職業技術大學招聘工作人員(12人)筆試備考試題含答案詳解(a卷)
- 撫順職業技術學院《檢體診斷D》2023-2024學年第二學期期末試卷
- 上海政法學院《自動控制原理俄》2023-2024學年第二學期期末試卷
- 南寧理工學院《廣告策劃與方案》2023-2024學年第二學期期末試卷
- 江蘇旅游職業學院《大學英語語法與寫作》2023-2024學年第二學期期末試卷
- 云南新興職業學院《影視概念設計》2023-2024學年第二學期期末試卷
- 邯鄲科技職業學院《學前兒童社會教育》2023-2024學年第二學期期末試卷
- 汝州職業技術學院《后期特效小組創作實踐》2023-2024學年第二學期期末試卷
- 上饒師范學院《數字化產品設計與工藝(二)》2023-2024學年第二學期期末試卷
- 長春汽車工業高等專科學校《統計計算與實驗》2023-2024學年第二學期期末試卷
- 2025年重慶市中考數學試卷真題(含標準答案)
- 農機耕地合同協議書范本
- 精裝分包勞務合同協議書
- T/CNESA 1203-2021壓縮空氣儲能系統性能測試規范
- T/CGMA 031003-2020一般用離心空氣壓縮機
- 2025年四年級下冊美術期末測試題附答案
- 店面借給別人合同協議書
- 圖像編輯基礎Photoshop試題及答案
- 計量經濟學知到智慧樹期末考試答案題庫2025年南開大學
- 宣城汽車精密零部件項目商業計劃書
- 2025至2030中國天文館行業投資前景研究與銷售戰略研究報告
評論
0/150
提交評論