【Java】jieba结巴分词器自定义分词词典 超详细完整版

发现一款很轻量好用的分词器->结巴分词器 分享给大家
不仅可以对常规语句分词,还可以自定义分词内容,很强大!!

源码地址:https://github.com/huaban/jieba-analysis

简单使用

如果是常规的语句,使用这种方式没有问题,如果是复杂语句或带有专业名词的语句请看 下方“复杂语句分词”

1.引入依赖

<dependency>
       <groupId>com.huabangroupId>
    <artifactId>jieba-analysisartifactId>
     <version>1.0.2version>
 dependency>

2.使用方法

	@Test
    public void demo() {
        String content = "中华人民共和国万岁,世界人民大团结万岁";
        JiebaSegmenter segmenter = new JiebaSegmenter();
        List<String> result = segmenter.sentenceProcess(content);
        System.out.println("分词:" + result );
        //分词结果->分词:中华人民共和国 万岁  世界 人民 大团结 万岁
    }

复杂语句分词

自定义分词,适合对带有专业名词的语句分词

问题复现

使用上方代码如果我对“使用前对yb清洗后,将妇科凝胶推进器伸入yd,将妇科凝胶推入yd深处。每日1次,每次1支。”分词 ;

结果为:分词:[使用, 前, 对, yb, 清洗, 后, ,, 将, 妇科, 凝胶, 推进器, 伸入, yd, ,, 将, 妇科, 凝胶, 推入, yd, 深处, 。, 每日, 1, 次, ,, 每次, 1, 支, 。] ;
妇科凝胶是一个专业名词,很显然不符合我分词的需求 另外我还想把每日1次每次1支合并在一起

自定义分词

	@Test
    public void demo() {
   		String content = "使用前对yb清洗后,将妇科凝胶推进器伸入yd,将妇科凝胶推入yd深处。每日1次,每次1支。";
        JiebaSegmenter segmenter = new JiebaSegmenter();
        List<String> result = segmenter.sentenceProcess(content);
        System.out.println("分词:" + result);
        //↓↓↓↓自定义分词器↓↓↓↓↓
        Path path = Paths.get("D:\\资料\\fkck.txt");
        WordDictionary.getInstance().loadUserDict(path);
        List<String> result2 = segmenter.sentenceProcess(content);
        System.out.println("自定义分词:" + result2);
        //自定义分词:[使用, 前, 对, yb, 清洗, 后, ,, 将, 妇科凝胶, 推进器, 伸入, yd, ,, 将, 妇科凝胶, 推入, yd, 深处, 。, 每日1次, ,, 每次1支, 。]
        //可以看到妇科凝胶和每日1次,每次1支都正确的进行了分词
}

fkck.txt内容

【Java】jieba结巴分词器自定义分词词典 超详细完整版_第1张图片

妇科凝胶 1 n
每日1次 1 num
每次1支 1 num

格式为:一个词占一行;每一行分三部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒。

去掉标点符号

用正则表达式,把分词后的结果中所有的标点符号全部去除

result.toString().replaceAll("[\\pP‘’“”]", "")

觉得好用点个赞吧

你可能感兴趣的:(java,开发语言,servlet)