?? 說明.txt
字號:
近日,對中文分詞算法研究,用java寫了一個分詞程序,在此與大家一起分享。由于本人精力有限,希望大家能把在實際運行過程中出現的分詞不準確的部分回饋給我,也便于進一步的完善。下面簡要描述設計思路和算法。
1. 分詞的算法
分詞算法采用的是最大匹配算法,按從左至右正向最大匹配和從右到左反向最大匹配,當兩種分詞結果不一致時,按最少切分原則,取切分詞數最少的一種,如果兩種分詞結果切分的詞數一樣,取反向最大匹配作為分詞的結果,這種分詞的結果準確率在99%以上,可以滿足一般的應用和需求。
2. 程序設計
建立一個字典,字典由多個子字典組成,每個子字典的單詞字數相同且已經排序,以獨立文件的形式存儲于磁盤,字典支持新單詞的導入。對于要一段文字,首先過濾一次,把源文件按標點、英文字母、數字、其它符號分解成一個List,list中若包含中文的為要分詞的最小單位,如:你好,你是哪的ABC人,過濾的結果為 你好/,/你是哪的/ABC/人,要切分的部分有 你好 你是哪的 人 三部分,然后按分詞算法對這三個部分切分。
3. 使用方法
首先導入詞庫,詞庫是純文本文件,每個單詞一行,然后可以開始分詞,具體運行參見com.xq.Execute.java。詞庫我用的是“中文詞庫素材”,大家可以在網上搜到,在此非常感謝“中文詞庫素材”的作者。
4. 測試
沒有字典時,導入“中文詞庫素材3.2\詞庫\標準詞庫\去除拼音字母的標準詞庫213663詞條.TXT”這個文件用時17890毫秒,導入單詞數212512,z在這個字典上再導入“中文詞庫素材3.2\詞庫\專業擴充詞庫\區縣地名(大詞庫不包含).txt”用時500毫秒,導入單詞:1747,速度還是比較快的。對一篇兩千字的文章分詞用時110毫秒,準確率在99%以上,當詞庫越完善,準確率會更高??傮w來看,導入詞庫、分詞速度和準確度對于一般的應用是可接受的。測試電腦配置:P43.2,1G內存。
這次先寫到這,歡迎大家與我一起交流,如果大家覺得有必要,我將用幾期博客詳細解析所有的源代碼,我個人的研究方向是中文分詞,希望今后能帶給大家更好的分詞源碼。
在最近的幾期博客,解析中文分詞的源碼,希望大家能給予支持。
采用的最大匹配算法,按從左至右正向最大匹配和從右到左反向最大匹配,當兩種分詞結果不一致時,按最少切分原則,取切分詞數最少的一種,如果兩種分詞結果切分的詞數一樣,取反向最大匹配作為分詞的結果。
這次主要介紹com.xq.util包下的文件和com.xq包的Word.java和TextBlock.java 。
com.xq.util.File.java:
這個類提供幾個靜態的方法實現文件的列示和讀寫操作,比較簡單,在此不再詳述。
com.xq.util.Sort.java:
提供一個對整型數組實現冒泡排序的靜態方法。
com.xq.util.Sear.java:
封裝幾個二分查找的算法,binaryInsert方法在字典導入時用,返回新單詞插入的位置,binarySearch在匹配時用,查找在List中是否存在單詞。
com.xq.util. CharTest.java:
這個類檢查是否是有效字符,在分詞第一步過濾文本是用到,unicode值在19968——40869的是中文字符,數字0——9的unicode值是48——57(半角)和65296——65305(全角),另外還有字母的半角和全角,中文一至九的檢查,具體見代碼。
Word.java:
一個Word類的對象是一個單詞,每個單詞被封裝在一個Word類,成員變量content是單詞的內容,如“中國”,value是該詞的unicode值,“中國”的unicode值是42282,length是單詞的長度,長度相同的單詞存在同一個子字典文件中。在字典文件中只存單詞的內容,value是在單詞加載時計算的,這個類實現一個Comparable接口,在二分查找時用到,word類重載equals方法,比較兩個word是否完全一樣,兩個word相等條件應該是長度、值和內容完全一樣。
TextBlock.java:
在源代碼中類的注釋有誤,在此更正,這個類描述屬性相同的一段文本,文本屬性在CharTest.java中定義,主要有四種,中文字符、英文字符(包括全角)、數字(包括全角)和其它字符。分詞第一步對文本過濾,具有相同屬性的相鄰的文本放入同一個TextBlock對象,所有的TextBlock對象放入一個list,然后遍歷list,具有中文字符屬性的TextBlock被分詞。例如“國慶將至,大家準備去哪happy呢”,這句話會被拆分成5個TextBlock對象,分別是“國慶將至”,“,”,“大家準備去哪”,“happy”,“呢”。
今天介紹的是幾個簡單的基礎類,以后將介紹比較復雜的字典類和分詞類,歡迎大家繼續關注。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -