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. 基于分词结果的词云分析(词频统计+可视化)

图悦在线词云制作

词频统计

词云
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容

  • 目录: 1、认识中文分词包(下载、安装与运行)2、分词方法与效果分析3、分词包背后的分词算法学习4、分词结果提交5...
    Echo真二阅读 1,675评论 0 2
  • 目录 1.认识中文分词包2.分词方法与效果分析3.分词包背后的分词算法学习4.分词结果提交5.基于分词结果的词云分...
    不明生物lei阅读 1,287评论 0 1
  • 目录## 1.安装solr并整合MMseg4j分词包 2.分词方法与分词效果分析 3.分词包背后的分词算法学习 4...
    狸狸深深阅读 766评论 0 3
  • 我的灵魂是失落的 像是刚走过荆棘地 被尖刺挑出了忧伤 都市的霓虹很耀眼 可我只看见一种色彩 让人眼花 头昏 巷子...
    迩雅阅读 162评论 0 2
  • 系统开发来讲,安全验证永远是最重要的,从最原始的session、cookie验证方式,到符合restful风格、满...
    JoeWcc阅读 1,399评论 0 8