jcseg分词器的基本使用
Jcseg是什么?
Jcseg是基于mmseg算法的一个轻量级中文分词器,同时集成了关键字提取,关键短语提取,关键句子提取和文章自动摘要等功能,并且提供了一个基于Jetty的web服务器,方便各大语言直接http调用,同时提供了最新版本的lucene, solr, elasticsearch/opensearch的分词接口!Jcseg自带了一个 jcseg.properties文件用于快速配置而得到适合不同场合的分词应用,例如:最大匹配词长,是否开启中文人名识别,是否追加拼音,是否追加同义词等!
官方网址:https://gitee.com/lionsoul/jcseg
maven
<dependencies>
<dependency>
<groupId>org.lionsoul</groupId>
<artifactId>jcseg-core</artifactId>
<version>2.6.3</version>
</dependency>
</dependencies>
工具类
package org.example;
import org.lionsoul.jcseg.ISegment;
import org.lionsoul.jcseg.IWord;
import org.lionsoul.jcseg.dic.ADictionary;
import org.lionsoul.jcseg.dic.DictionaryFactory;
import org.lionsoul.jcseg.extractor.SummaryExtractor;
import org.lionsoul.jcseg.extractor.impl.TextRankSummaryExtractor;
import org.lionsoul.jcseg.segmenter.SegmenterConfig;
import org.lionsoul.jcseg.sentence.SentenceSeg;
import java.io.IOException;
import java.io.StringReader;
public class TextUtils {
private static final SegmenterConfig config;
private static final ADictionary dic;
private static final ISegment seg;
static {
// 创建配置实例,使用默认配置传递true
config = new SegmenterConfig(true);
//创建默认单例词库实现,并且按照config配置加载词库
dic = DictionaryFactory.createSingletonDictionary(config);
//依据给定的ADictionary和SegmenterConfig来创建ISegment
//这里创建的是NLP切分模式,它基于复杂模式添加人名、邮箱、电话等等切分
seg = ISegment.NLP.factory.create(config, dic);
}
/**
* 分词
* @param text 文本
* @return 分词结果
* @throws IOException io异常
*/
public static String wordSegmentation(String text) throws IOException {
//备注:以下代码可以反复调用,seg为非线程安全
//设置要被分词的文本
seg.reset(new StringReader(text));
//获取分词结果
IWord word;
StringBuilder sb = new StringBuilder();
while ((word = seg.next()) != null) {
sb.append(word.getValue()).append("|");
}
return sb.substring(0, sb.length() - 1);
}
/**
* 截取摘要
* @param text 文本
* @param length 摘要长度
* @return 摘要
* @throws IOException io异常
*/
public static String getSummary(String text, int length) throws IOException {
SummaryExtractor extractor = new TextRankSummaryExtractor(seg, new SentenceSeg());
return extractor.getSummary(new StringReader(text), length);
}
}
使用
package org.example;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
String text = TextUtils.wordSegmentation("我是张三,来自黑龙江哈尔冰。性别男,爱好女,联系方式16666661234。");
System.out.println(text);
String summary = TextUtils.getSummary("路上只我一个人,背着手踱着。这一片天地好像是我的;我也像超出了平常旳自己,到了另一世界里。我爱热闹,也爱冷静;爱群居,也爱独处。像今晚上,一个人在这苍茫旳月下,什么都可以想,什么都可以不想,便觉是个自由的人。白天里一定要做的事,一定要说的话,现在都可不理。这是独处的妙处,我且受用这无边的荷香月色好了。\n" +
"\n" +
"曲曲折折的荷塘上面,弥望旳是田田的叶子。叶子出水很高,像亭亭旳舞女旳裙。层层的叶子中间,零星地点缀着些白花,有袅娜(niǎo,nuó)地开着旳,有羞涩地打着朵儿旳;正如一粒粒的明珠,又如碧天里的星星,又如刚出浴的美人。微风过处,送来缕缕清香,仿佛远处高楼上渺茫的歌声似的。这时候叶子与花也有一丝的颤动,像闪电般,霎时传过荷塘的那边去了。叶子本是肩并肩密密地挨着,这便宛然有了一道凝碧的波痕。叶子底下是脉脉(mò)的流水,遮住了,不能见一些颜色;而叶子却更见风致了。\n" +
"\n" +
"月光如流水一般,静静地泻在这一片叶子和花上。薄薄的青雾浮起在荷塘里。叶子和花仿佛在牛乳中洗过一样;又像笼着轻纱的梦。虽然是满月,天上却有一层淡淡的云,所以不能朗照;但我以为这恰是到了好处——酣眠固不可少,小睡也别有风味的。月光是隔了树照过来的,高处丛生的灌木,落下参差的斑驳的黑影,峭楞楞如鬼一般;弯弯的杨柳的稀疏的倩影,却又像是画在荷叶上。塘中的月色并不均匀;但光与影有着和谐的旋律,如梵婀(ē)玲(英语violin小提琴的译音)上奏着的名曲。\n" +
"\n" +
"荷塘的四面,远远近近,高高低低都是树,而杨柳最多。这些树将一片荷塘重重围住;只在小路一旁,漏着几段空隙,像是特为月光留下的。树色一例是阴阴的,乍看像一团烟雾;但杨柳的丰姿,便在烟雾里也辨得出。树梢上隐隐约约的是一带远山,只有些大意罢了。树缝里也漏着一两点路灯光,没精打采的,是渴睡人的眼。这时候最热闹的,要数树上的蝉声与水里的蛙声;但热闹是它们的,我什么也没有。", 64);
System.out.println(summary);
}
}
结果
我|是|张三|,|来自|黑龙江|哈|尔|冰|。|性别|男|,|爱好|女|,|联系方式|16666661234|。
月光是隔了树照过来的,高处丛生的灌木,落下参差的斑驳的黑影,峭楞楞如鬼一般;弯弯的杨柳的稀疏的倩影,却又像是画在荷叶上。