目錄
- 認(rèn)識中文分詞包(下載、安裝及運(yùn)行)
- 分詞方法與效果分析
- 分詞算法學(xué)習(xí)
- 分詞結(jié)果提交(2017/5/24完善方法2)
- 基于分詞結(jié)果的詞云分析
1.認(rèn)識中文分詞包(下載、安裝及運(yùn)行)
1.1 簡介
mmseg4j 用 Chih-Hao Tsai 的 MMSeg 算法實(shí)現(xiàn)的中文分詞器,并實(shí)現(xiàn) lucene 的 analyzer 和 solr 的TokenizerFactory 以方便在Lucene和Solr中使用。
1.2 下載
mmseg4j的相關(guān)jar包已經(jīng)提交到Maven倉庫,可以在mmseg4j的Maven倉庫中找到需要的jar包,以及對應(yīng)的pom文件代碼。
下載鏈接:
mmseg4j-core-1.10.0.jar下載
mmseg4j-analysis-1.9.1.jar下載
mmseg4j-solr-2.4.0.jar下載
1.3 運(yùn)行(windows系統(tǒng)cmd中)
檢查java環(huán)境
f:
java -version
javac

運(yùn)行mmseg4j-core-1.10.0.jar
java -cp mmseg4j-core-1.10.0.jar com.chenlb.mmseg4j.example.MaxWord 字符串

可以看到,jar包啟動之后,系統(tǒng)加載了 ./data 目錄下的三個字典文件,分別是
chars.dic
words.dic
units.dic
分詞結(jié)果如下

2. 分詞方法與效果分析
mmseg4j分詞包提供了三種分詞方法
- Complex方法
- Simple方法
- MaxWord方法
分別使用三種方法進(jìn)行分析下面這段新聞:
2017年5月11日下午,美國亞利桑那州立大學(xué)圖書館資深館員Dan Stanton來訪我院,并于三教406教室為我院師生作了題為“美國政府信息服務(wù)”的學(xué)術(shù)報(bào)告。出席本次學(xué)術(shù)報(bào)告的有我院信息資源管理專業(yè)、圖書館學(xué)專業(yè)、檔案學(xué)專業(yè)的本科生、研究生,以及李桂華教授、楊峰副教授等教師。本次報(bào)告會由李桂華教授主持。 Stanton 先生曾任美國亞利桑那圖書館協(xié)會主席,并歷任亞利桑那州立大學(xué)人文與社會科學(xué)服務(wù)館員、政府信息服務(wù)館員、本地文獻(xiàn)館員等職位,對美國研究型圖書館的運(yùn)營有深刻理解。
Complex方法

Simple方法

MaxWord方法

對比分析:
Simple方法的分詞錯誤共有兩處:
正確分詞 錯誤分詞
李/桂/華/教授 李/桂/華教/授
為/我院 為/我院
MaxWord方法的分詞錯誤共有5處
正確分詞 錯誤分詞
圖書館 圖書/書館
美國政府 美國/國政/政府
學(xué)術(shù)報(bào)告 學(xué)術(shù)/報(bào)告
本科生 本科/生
研究生 研究/生
沒有適當(dāng)分析的特殊詞
亞利桑那州立大學(xué)(學(xué)校名)
三教(地名)
信息服務(wù)(專業(yè)術(shù)語)
信息資源管理專業(yè)(專業(yè)名)
圖書館學(xué)專業(yè)(專業(yè)名)
檔案學(xué)專業(yè)(專業(yè)名)
李桂華(人名)
楊峰(人名)
研究型(專業(yè)術(shù)語)
對比可知,分詞正確率最高的方法是Complex方法。
提高分詞正確率的方法有:增加自定義詞庫;算法優(yōu)化。這里主要介紹自定義詞庫。
友情鏈接:
搜狗細(xì)胞詞庫
詞庫scel格式轉(zhuǎn)txt工具(不打廣告親測可用,轉(zhuǎn)換之后需要記事本打開再手動轉(zhuǎn)utf-8,再改成dic)
自定義詞庫并打包成jar
這里還有其他方法比如配置mmseg4j solr的環(huán)境來修改詞庫等
下載mmseg4j-core源碼
我把自定義分詞放進(jìn)了words.dic
加入的自定義詞庫有:


編譯項(xiàng)目并測試
mvn clean
mvn compile
mvn test-compile
mvn test

打包成jar
mvn jar:jar

運(yùn)行jar包,成功

友情鏈接:
mvn常用命令
maven的安裝和配置
3. 分詞算法學(xué)習(xí)
mmseg4j分詞包采用的主要算法是MMSEG正向最大匹配算法,基于詞典,運(yùn)行速度快,以正向最大匹配為主,多種消除歧義的規(guī)則為輔。
匹配算法分類:
- Simple
在一串字符串中從開頭匹配子串,找到所有可能的匹配。舉例:
中國
中國人
中國人的
- Complex
在一串字符中,找到所有可能的三字塊開始匹配,尋找最大長度的字塊。舉例:
研_究_生
研_究_生命
研究生_命_起源
研究_生命_起源
消除歧義的規(guī)則:
- 最大匹配。 簡單的最大匹配:選擇這個詞的最大長度。 復(fù)雜最大匹配:選擇第一個詞塊的最大長度。
- 最大平均單詞長度
- 單詞長度的最小方差
- 最大的語素和自由的單字單詞
4. 分詞結(jié)果提交
由于mmseg4j源碼中沒有提供把分詞結(jié)果保存成文件的方法,可以選擇自己在源碼中修改,然后打包成jar。也可以選擇采用其他方法。
需要分詞的文件需要自行轉(zhuǎn)換txt純文本。
------------------------------2017/5/23 15:00完善---------------------------------------
完善后的代碼把讀取到的文件逐行輸入到控制臺,進(jìn)行分詞后寫入mmseg4j.txt文件中,我放在了c盤下。
修改的代碼:
在控制臺編譯打包,具體方法和之前一樣。
運(yùn)行jar包生成txt文件部分內(nèi)容如下


-----------------------------------2017/5/24補(bǔ)充方法2-------------------------------------
新建一個java項(xiàng)目,引入mmseg4j-core-1.10.0.jar和tika-app-1.14.jar

編寫test.java
import com.chenlb.mmseg4j.*;
import com.chenlb.mmseg4j.example.*;
import org.apache.tika.*;
import java.io.*;
public class test {
public static void main(String[] args) throws Exception{
String fnread = "c:/ggnews.xml";
String fnread2 = "c:/change.txt";
String fnwrite = "c:/mmseg4j.txt";
Complex segW = new Complex();
Tika tika = new Tika();
//這里是格式轉(zhuǎn)換
File fchange = new File(fnread);
String filecontent = tika.parseToString(fchange);
//讀取的文件路徑
File readf = new File(fnread2);
try{
if(!fchange.exists()){
fchange.createNewFile();
}
FileWriter fw1 = new FileWriter(readf.getAbsoluteFile());
BufferedWriter bw1 = new BufferedWriter(fw1);
bw1.write(filecontent);
bw1.close();
System.out.println("Done");
}catch(IOException e){
e.printStackTrace();
}
//這里是分詞讀寫
//這里原來讀取的是在控制臺輸入的文本,現(xiàn)在是ggnews.txt文件內(nèi)的文本
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(readf),"UTF-8"));
String inputStr = null;
//保存的文件路徑
File writef =new File(fnwrite);
if(!writef.exists()){
writef.createNewFile();
}
FileWriter fw = new FileWriter(writef.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
while((inputStr = br.readLine()) != null) {
String words = segW.segWords(inputStr, "|");
try{
//把逐行讀取的文件寫入mmseg4j.txt
bw.write(words);
}catch(IOException e){
e.printStackTrace();
}
}
br.close();
bw.close();
}
}
運(yùn)行后生成change.txt和mmseg4j.txt,分詞結(jié)果與方法1相同
5. 基于分詞結(jié)果的詞云分析(詞頻統(tǒng)計(jì)+可視化)

