mmseg4j中文分詞包使用報告

目錄
  1. 認識中文分詞包(下載、安裝及運行)
  2. 分詞方法與效果分析
  3. 分詞算法學習
  4. 分詞結果提交(2017/5/24完善方法2)
  5. 基于分詞結果的詞云分析

1.認識中文分詞包(下載、安裝及運行)

1.1 簡介

mmseg4j 用 Chih-Hao Tsai 的 MMSeg 算法實現的中文分詞器,并實現 lucene 的 analyzer 和 solr 的TokenizerFactory 以方便在Lucene和Solr中使用。

1.2 下載

mmseg4j的相關jar包已經提交到Maven倉庫,可以在mmseg4j的Maven倉庫中找到需要的jar包,以及對應的pom文件代碼。
下載鏈接:
mmseg4j-core-1.10.0.jar下載
mmseg4j-analysis-1.9.1.jar下載
mmseg4j-solr-2.4.0.jar下載

1.3 運行(windows系統cmd中)

檢查java環境

f:
java -version
javac
java環境

運行mmseg4j-core-1.10.0.jar

java -cp mmseg4j-core-1.10.0.jar com.chenlb.mmseg4j.example.MaxWord 字符串
運行

可以看到,jar包啟動之后,系統加載了 ./data 目錄下的三個字典文件,分別是

chars.dic
words.dic
units.dic

分詞結果如下

分詞結果

2. 分詞方法與效果分析

mmseg4j分詞包提供了三種分詞方法

  • Complex方法
  • Simple方法
  • MaxWord方法

分別使用三種方法進行分析下面這段新聞:

2017年5月11日下午,美國亞利桑那州立大學圖書館資深館員Dan Stanton來訪我院,并于三教406教室為我院師生作了題為“美國政府信息服務”的學術報告。出席本次學術報告的有我院信息資源管理專業、圖書館學專業、檔案學專業的本科生、研究生,以及李桂華教授、楊峰副教授等教師。本次報告會由李桂華教授主持。 Stanton 先生曾任美國亞利桑那圖書館協會主席,并歷任亞利桑那州立大學人文與社會科學服務館員、政府信息服務館員、本地文獻館員等職位,對美國研究型圖書館的運營有深刻理解。

Complex方法

complex方法

Simple方法

simple方法

MaxWord方法

maxword方法

對比分析:
Simple方法的分詞錯誤共有兩處:

 正確分詞              錯誤分詞
李/桂/華/教授        李/桂/華教/授
為/我院                為/我院

MaxWord方法的分詞錯誤共有5處

正確分詞              錯誤分詞
圖書館                圖書/書館
美國政府              美國/國政/政府
學術報告              學術/報告
本科生                本科/生
研究生                研究/生

沒有適當分析的特殊詞

亞利桑那州立大學(學校名)
三教(地名)
信息服務(專業術語)
信息資源管理專業(專業名)
圖書館學專業(專業名)
檔案學專業(專業名)
李桂華(人名)
楊峰(人名)
研究型(專業術語)

對比可知,分詞正確率最高的方法是Complex方法。
提高分詞正確率的方法有:增加自定義詞庫;算法優化。這里主要介紹自定義詞庫。

友情鏈接:
搜狗細胞詞庫
詞庫scel格式轉txt工具(不打廣告親測可用,轉換之后需要記事本打開再手動轉utf-8,再改成dic)

自定義詞庫并打包成jar

這里還有其他方法比如配置mmseg4j solr的環境來修改詞庫等
下載mmseg4j-core源碼
我把自定義分詞放進了words.dic
加入的自定義詞庫有:

搜狗細胞詞庫
自定義

編譯項目并測試

mvn clean
mvn compile
mvn test-compile
mvn test
mvn test success

打包成jar

mvn jar:jar
mvn jar success

運行jar包,成功

分詞效果

友情鏈接:
mvn常用命令
maven的安裝和配置

3. 分詞算法學習

mmseg4j分詞包采用的主要算法是MMSEG正向最大匹配算法,基于詞典,運行速度快,以正向最大匹配為主,多種消除歧義的規則為輔。

匹配算法分類:
  • Simple
    在一串字符串中從開頭匹配子串,找到所有可能的匹配。舉例:
中國
中國人
中國人的
  • Complex
    在一串字符中,找到所有可能的三字塊開始匹配,尋找最大長度的字塊。舉例:
研_究_生
研_究_生命
研究生_命_起源
研究_生命_起源
消除歧義的規則:
  • 最大匹配。 簡單的最大匹配:選擇這個詞的最大長度。 復雜最大匹配:選擇第一個詞塊的最大長度。
  • 最大平均單詞長度
  • 單詞長度的最小方差
  • 最大的語素和自由的單字單詞

4. 分詞結果提交

由于mmseg4j源碼中沒有提供把分詞結果保存成文件的方法,可以選擇自己在源碼中修改,然后打包成jar。也可以選擇采用其他方法。
需要分詞的文件需要自行轉換txt純文本。
------------------------------2017/5/23 15:00完善---------------------------------------
完善后的代碼把讀取到的文件逐行輸入到控制臺,進行分詞后寫入mmseg4j.txt文件中,我放在了c盤下。
修改的代碼:


在控制臺編譯打包,具體方法和之前一樣。
運行jar包生成txt文件部分內容如下

分詞結果1
分詞結果2

-----------------------------------2017/5/24補充方法2-------------------------------------
新建一個java項目,引入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();
        
        //這里是格式轉換
        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();
        }

        
        //這里是分詞讀寫
        
        //這里原來讀取的是在控制臺輸入的文本,現在是ggnews.txt文件內的文本
        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();

    }
    
}

運行后生成change.txt和mmseg4j.txt,分詞結果與方法1相同

5. 基于分詞結果的詞云分析(詞頻統計+可視化)

圖悅在線詞云制作

詞頻統計

詞云
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 目錄: 1、認識中文分詞包(下載、安裝與運行)2、分詞方法與效果分析3、分詞包背后的分詞算法學習4、分詞結果提交5...
    Echo真二閱讀 1,857評論 0 2
  • 目錄 1.認識中文分詞包2.分詞方法與效果分析3.分詞包背后的分詞算法學習4.分詞結果提交5.基于分詞結果的詞云分...
    不明生物lei閱讀 1,337評論 0 1
  • 目錄## 1.安裝solr并整合MMseg4j分詞包 2.分詞方法與分詞效果分析 3.分詞包背后的分詞算法學習 4...
    貍貍深深閱讀 831評論 0 3
  • 我的靈魂是失落的 像是剛走過荊棘地 被尖刺挑出了憂傷 都市的霓虹很耀眼 可我只看見一種色彩 讓人眼花 頭昏 巷子...
    邇雅閱讀 197評論 0 2
  • 系統開發來講,安全驗證永遠是最重要的,從最原始的session、cookie驗證方式,到符合restful風格、滿...
    JoeWcc閱讀 1,436評論 0 8