java 分词搜索_基于JAVA的小型中文分词系统
摘要:互聯網信息飛速增長,網絡資源不斷增加,于是搜索引擎應運而生,它的出現為我們在網絡上搜集我們所需要的資源提供了很大的方便,但是人們并不滿足于早期的搜索引擎的功能和速度,于是搜索引擎開始不斷地被更新和完善,而分詞對于搜索引擎的更新和完善起著很重要的作用。分詞作為搜索引擎的重要組成部分,對搜索引擎的查找正確率以及查找速度具有很大的影響。它將用戶輸入的語句分割成一個個詞語和單字,這樣檢索程序就能很容易地理解用戶所需要的信息,從而為用戶返回正確且有價值的信息資料。本文通過對正向最大匹配、逆向最大匹配等分詞算法以及詞典的整詞二分、TRIE索引樹、逐字二分和雙哈希構造方法進行理論分析,了解各種分詞算法和詞典構造方法的優點和缺點,并用Java編程實現正向最大匹配、逆向最大匹配的分詞算法以及一維線性表、首字哈希、雙哈希三種詞典構造方法,最終整合實現了Java分詞系統。
關鍵詞:中文分詞;詞典;最大匹配;雙哈希
中圖分類號:G642.0 文獻標志碼:A 文章編號:1674-9324(2013)24-0151-04
一、緒論
對于搜索引擎來說,最重要的并不是找到所有結果,因為在上百億的網頁中找到所有結果沒有太多的意義,也沒有人能看得完,最重要的是把最相關的結果排在最前面,這也稱為相關度排序。中文分詞的準確與否,常常直接影響到對搜索結果的相關度排序。例如在搜索引擎上輸入“和服”,得到的結果中就發現了下面這句話“通信信息報:卡巴斯基以技術和服務開拓網絡安全市場”,這就是由于分詞不準確所造成的問題。從這里看到中文分詞的準確度,對搜索引擎結果相關性和準確性有相當大的關系。另外,在整個搜索過程中進場要進行詞典的查詢,所以分詞對于搜索引擎的速度也是有影響的。
二、分詞的方法
1.分詞的意義。由于中文語句沒有自然的將詞語分開,所以計算機無法了解用戶輸入文字串的意思,我們需要將用戶輸入的內容拆分成詞,這樣計算機才能通過詞語的比對來實現對信息的檢索和查找。而這個將用戶輸入文字串拆分成詞的過程就是分詞。
2.目前的分詞算法?,F有的分詞算法可分為三大類:基于字符串匹配、基于理解和基于統計的分詞算法。基于字符串匹配的分詞算法又叫做機械分詞算法,它是按照一定的策略將待分析的漢字串與一個“充分大的”機器詞典中的詞條進行匹配,若在詞典中找到某個字符串,則匹配成功(識別出一個詞)。常用的幾種機械分詞算法有正向最大匹配法、逆向最大匹配法、最少切分。一般說來,逆向匹配的切分精度略高于正向匹配,遇到的歧義現象也較少。這種分詞方法目前使用較多,我的程序也使用的是這種分詞算法。
三、分詞詞典的構造
1.詞典的作用。為了進行分詞,我們首先要構建一個文本文件,這個文本文件中存放用來構造具體的詞典所用的詞,這些詞可以通過詞典程序構造一個詞典,再通過分詞程序的加載進行輸入文本的分詞操作。
2.目前的幾種詞典構造方法、簡介及優缺點。目前分詞主要有以下幾種實現方法:整詞二分法、TRIE索引樹、逐字二分法、雙哈希算法。我最終使用的是雙哈希算法,所以我詳細介紹雙哈希算法,其他算法就不做介紹了。經分析發現中文詞語中多字詞較少,利用這種情況,我們得到了如下兩種雙哈希算法:第一種是建立首字哈希索引,然后再對次字建立哈希索引,后面的字組成類似于“整詞二分”的“詞典正文”的構造(如圖3-1)。下面我們舉例看一下雙哈希查找詞語的方法。例如查詢“吃一塹長一智MP4行業標準年底即將出臺?!敝袕摹俺浴弊珠_始的最長詞。①首先在首字Hash索引I1中通過Hash定位得到以“吃”字開頭的索引項E1。②因為E1中的“是否為詞”項值為“T”,所以“吃”是一個詞。再由E1的“指針”項得到以“吃”字開頭的所有詞的次字哈希索引I2并通過類似(1)中的查找,找到“一”字相關信息,并找到剩余字串組W。③在W中查找第一個字為“塹”的詞,得到范圍W1而后逐字搜索后續的字“長”、“一”、“智”并縮小范圍,最終得到語句S中從“吃”字開始的最長詞為“吃一塹長一智”。
第二種是先對文字長度進行哈希索引,再進行首字哈希索引。這個結構類似于上面一種方法,就不做圖片和舉例介紹了。
雙哈希算法,速度雖和TRIE差不多,但是維護更為簡潔方便,所以是一種比較好的算法。
四、系統實現
1.系統的實現。為了讓看程序的人能夠一目了然,我把詞典和分詞所用到的類和接口分別放在兩個包中,他們分別建立在包processor和包dictionary中,兩個包之間通過接口聯系,在每個包中將不同的實現方法分別構造自己的類文件。具體我們設置兩個包文件,我們分別在兩個包中各建立一個接口,分別為DictionaryImpl和SegmentProcessorImpl。
2.兩個包的UML圖。下面分別畫出詞典包的UML圖(圖4-1)和分詞包的UML圖(圖4-2)。
3.程序運行效果。程序運行環境:操作系統:Windows Vista JAVA環境:Java Development Kit 6.0。
WEB環境:Tomcat 5.5.20首先輸入待分詞文本:“在某些方面,Hashtable對象非常類似于ArrayList……”點擊進行分詞后輸出結果:“在某些方面,hashtable,對象,非常,類似于,arraylist……”程序運行效果圖如下(分詞前效果如圖4-3,分詞后效果如圖4-4)。
4.程序運行效率。測試文字長度:2491字。測試效率如下:①正向最大匹配出現錯誤詞語26個。②逆向最大匹配出弧錯誤詞語14個。③單哈希結構使用時間0分42.39秒。④雙哈希結構使用時間0分18.42秒。
五、畢業設計總結
搜索引擎技術在目前越來越受到關注和重視,作為其重要組成部分的分詞技術也是目前互聯網研究方面的一個重要話題。通過這次對分詞技術的研究使我對分詞以及搜索引擎技術都有了很深的了解,同時也加深了我對Java語言的了解,還掌握了很多相關的知識技術,這是我離開學校前學校給我上的一堂很重要的課程,為我將從課本學到的知識運用的實際應用中又提供了很好的實踐經驗。本次設計也使我了解到自己在Java方面的不足,需要在以后多進行編程練習。
致謝:在我的畢業設計過程中,我的指導老師趙洋和劉博老師對我的畢業設計有很大的幫助。他們幫我分析設計思路,幫我找參考資料,耐心解答我在查看資料中遇到的不懂的問題,還幫助我完善程序。他們的耐心講解以及嚴格要求為我順利地完成我的畢業設計鋪平了道路。同時,學校給提供的良好的設計環境以及同學之間的互相幫助也為我能夠順利完成畢業設計提供了很好的支持。在此向我的輔導老師趙洋和劉博老師,以及在畢業設中幫助我的老師和同學表示衷心的感謝,同時也衷心感謝學校給我提供這次有意義的實踐機會,為我成功地步入社會增加了寶貴的經驗。
參考文獻:
[1]嚴蔚敏,吳偉民.數據結構(C語言版)[M].北京:清華大學出版社,2003.
[2]耿祥義,張躍平.JAVA2實用教程(修訂)[M].北京:清華大學出版社,2003.
[3]Thomas H.Cormen,Charles E.Leiserson,Ronald L.Rivest,Clifferd Stein.Introduction to Algorithms(Second Edition)[M].Americon:The Massachusetts Institute of Technology,2001.
[4]李江波,周強,陳祖舜.漢語詞典的快速查詢算法研究[J].中文信息學報,200,20:31.
[5]孫茂松,左正平,黃昌寧.漢語自動分詞詞典機制的實驗研究[J].中文信息學報,1999,14:1.
[6]李慶虎,陳玉健,孫家廣.一種中文分詞詞典新機制——雙字哈希機制[J].中文信息學報,2002,17:13.
[7]陳小荷.自動分詞中未登錄詞問題的一攬子解決方案[J].語言文字應用,1999,31:103.
總結
以上是生活随笔為你收集整理的java 分词搜索_基于JAVA的小型中文分词系统的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机断电后黑屏怎么办,电脑断电黑屏怎么
- 下一篇: OA系统简介