mmseg4j中文分詞包使用報(bào)告

目錄
  1. 認(rèn)識中文分詞包(下載、安裝及運(yùn)行)
  2. 分詞方法與效果分析
  3. 分詞算法學(xué)習(xí)
  4. 分詞結(jié)果提交(2017/5/24完善方法2)
  5. 基于分詞結(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
java環(huán)境

運(yùn)行mmseg4j-core-1.10.0.jar

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

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

chars.dic
words.dic
units.dic

分詞結(jié)果如下

分詞結(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方法

complex方法

Simple方法

simple方法

MaxWord方法

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
加入的自定義詞庫有:

搜狗細(xì)胞詞庫
自定義

編譯項(xiàng)目并測試

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

打包成jar

mvn jar:jar
mvn jar success

運(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)容如下

分詞結(jié)果1
分詞結(jié)果2

-----------------------------------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ì)+可視化)

圖悅在線詞云制作

詞頻統(tǒng)計(jì)

詞云
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容