创新实训(7)——中文分词器:jcseg

Jcseg简介

Jcseg是基于mmseg算法的一个轻量级中文分词器,同时集成了关键字提取,关键短语提取,关键句子提取和文章自动摘要等功能,并且提供了一个基于Jetty的web服务器,方便各大语言直接http调用,同时提供了最新版本的lucene, solr, elasticsearch的分词接口!Jcseg自带了一个 jcseg.properties文件用于快速配置而得到适合不同场合的分词应用,例如:最大匹配词长,是否开启中文人名识别,是否追加拼音,是否追加同义词等!

下载地址

https://gitee.com/lionsoul/jcseg

Jcseg核心功能

  • 中文分词:mmseg算法 + Jcseg 独创的优化算法,七种切分模式。
  • 关键字提取:基于textRank算法。
  • 关键短语提取:基于textRank算法。
  • 关键句子提取:基于textRank算法。
  • 文章自动摘要:基于BM25+textRank算法。
  • 自动词性标注:基于词库+(统计歧义去除计划),目前效果不是很理想,对词性标注结果要求较高的应用不建议使用。
  • 命名实体标注:基于词库+(统计歧义去除计划),电子邮件,网址,大陆手机号码,地名,人名,货币,datetime时间,长度,面积,距离单位等。
  • Restful api:嵌入jetty提供了一个绝对高性能的server模块,包含全部功能的http接口,标准化json输出格式,方便各种语言客户端直接调用。

Jcseg中文分词

切分模式

  • 简易模式:FMM算法,适合速度要求场合。
  • 复杂模式:MMSEG四种过滤算法,具有较高的歧义去除,分词准确率达到了98.41%。
  • 检测模式:只返回词库中已有的词条,很适合某些应用场合。
  • 最多模式:细粒度切分,专为检索而生,除了中文处理外(不具备中文的人名,数字识别等智能功能)其他与复杂模式一致(英文,组合词等)。
  • 分隔符模式:按照给定的字符切分词条,默认是空格,特定场合的应用。
  • NLP模式:继承自复杂模式,更改了数字,单位等词条的组合方式,增加电子邮件,大陆手机号码,网址,人名,地名,货币等以及无限种自定义实体的识别与返回。
  • n-gram模式:CJK和拉丁系字符的通用n-gram切分实现。

Jcseg配置与使用

Maven仓库

  • jcseg-core
<dependency>
    <groupId>org.lionsoul</groupId>
    <artifactId>jcseg-core</artifactId>
    <version>2.6.2</version>
</dependency>
  • jcseg-analyzer (lucene或者solr)
<dependency>
    <groupId>org.lionsoul</groupId>
    <artifactId>jcseg-analyzer</artifactId>
    <version>2.6.2</version>
</dependency>
  • jcseg-elasticsearch
<dependency>
    <groupId>org.lionsoul</groupId>
    <artifactId>jcseg-elasticsearch</artifactId>
    <version>2.6.2</version>
</dependency>
  • jcseg-server (独立的应用服务器)
<dependency>
    <groupId>org.lionsoul</groupId>
    <artifactId>jcseg-server</artifactId>
    <version>2.6.2</version>
</dependency>

solr分词接口

将jcseg-core-{version}.jar和jcseg-analyzer-{version}.jar 复制到solr 的类库目录中。
在solr的scheme.xml加入如下配置:

<!-- 复杂模式分词: -->
<fieldtype name="textComplex" class="solr.TextField">
    <analyzer>
        <tokenizer class="org.lionsoul.jcseg.analyzer.JcsegTokenizerFactory" mode="complex"/>
    </analyzer>
</fieldtype>
<!-- 简易模式分词: -->
<fieldtype name="textSimple" class="solr.TextField">
    <analyzer>
        <tokenizer class="org.lionsoul.jcseg.analyzer.JcsegTokenizerFactory" mode="simple"/>
    </analyzer>
</fieldtype>
<!-- 检测模式分词: -->
<fieldtype name="textDetect" class="solr.TextField">
    <analyzer>
        <tokenizer class="org.lionsoul.jcseg.analyzer.JcsegTokenizerFactory" mode="detect"/>
    </analyzer>
</fieldtype>
<!-- 检索模式分词: -->
<fieldtype name="textSearch" class="solr.TextField">
    <analyzer>
        <tokenizer class="org.lionsoul.jcseg.analyzer.JcsegTokenizerFactory" mode="most"/>
    </analyzer>
</fieldtype>
<!-- NLP模式分词: -->
<fieldtype name="textSearch" class="solr.TextField">
    <analyzer>
        <tokenizer class="org.lionsoul.jcseg.analyzer.JcsegTokenizerFactory" mode="nlp"/>
    </analyzer>
</fieldtype>
<!-- 空格分隔符模式分词: -->
<fieldtype name="textSearch" class="solr.TextField">
    <analyzer>
        <tokenizer class="org.lionsoul.jcseg.analyzer.JcsegTokenizerFactory" mode="delimiter"/>
    </analyzer>
</fieldtype>
<!-- n-gram模式分词: -->
<fieldtype name="textSearch" class="solr.TextField">
    <analyzer>
        <tokenizer class="org.lionsoul.jcseg.analyzer.JcsegTokenizerFactory" mode="ngram"/>
    </analyzer>
</fieldtype>

对于需要分词的field,需要设置其分词类型

    <field name="title" type="textNLP" indexed="true" stored="true"/>
    <field name="bookname" type="textNLP" indexed="true" stored="true"/>

分词效果

查询结果

查询title字段为“春”
在这里插入图片描述
能够分出“春”的title都被查出来了
事实上,分词结果如下:
在这里插入图片描述

在这里插入图片描述

局限性

但是,自带的NLP分词是有局限性的,如我们搜索bookname为“唐”的数据
在这里插入图片描述
如上图所示,仅仅能查出《唐选》,那么《全唐文》为何查不到?
尝试查看分词结果
在这里插入图片描述
在这里插入图片描述

发现“唐文”作为一个整体,只有查询这两个字才可以查到,这也是jcseg自带的NLP分词工具的局限性,不过jcseg支持定制化,后续可以自定义分词规则

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

来看看小兔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值