IK分词器加入全词

论坛 期权论坛 脚本     
匿名网站用户   2020-12-21 11:19   2917   0

IK在进行分词的时候,如果分词结果中没有全词匹配的词,如果业务需求需要有全词,那么我们就要把全词加入到分词结果中,假如对”中华人民共和国万岁”进行分词,分词结果如下:
这里写图片描述
如果我们搜索的时候把”中华人民共和国万岁”放入了IK的词库中,就会产生有些数据没有这个分词结果,通过全词去搜索的时候是搜索不到这个数据的,那么就需要把整个词放入分词结果中。
修改AnalyzeContext.class类的outputToResult方法,该方法的作用是推送分词结果到结果集合:

       void outputToResult(){
        int index = 0;
        for( ; index <= this.cursor ;){
            //跳过非CJK字符
            if(CharacterUtil.CHAR_USELESS == this.charTypes[index]){
                index++;
                continue;
            }
            //从pathMap找出对应index位置的LexemePath
            LexemePath path = this.pathMap.get(index);
            if(path != null){
                //输出LexemePath中的lexeme到results集合
                Lexeme l = path.pollFirst();
                while(l != null){
                    this.results.add(l);
                    //将index移至lexeme后
                    index = l.getBegin() + l.getLength();                   
                    l = path.pollFirst();
                    if(l != null){
                        //输出path内部,词元间遗漏的单字
                        for(;index < l.getBegin();index++){
                            this.outputSingleCJK(index);
                        }
                    }
                }
            }else{//pathMap中找不到index对应的LexemePath
                //单字输出
                this.outputSingleCJK(index);
                index++;
            }
        }
        // lexeme类中的第一个参数是分词开始的偏移位置,第二个参数是开始的位置,第三个参数是结束的位置,第四个参数表示中文单字的方式获取
        Lexeme singleCharLexeme = new Lexeme(0 , 0 , this.available , Lexeme.TYPE_CNCHAR);
        boolean hasMax = true;
        for (Lexeme lex : results) {
            // 判断结果集合中是否已经存在全词
          if (singleCharLexeme.equals(lex)) {
            hasMax = false;
          }
        }
        // 如果不存在就把全词放入分词结果中
        if (hasMax) {
          this.results.add(singleCharLexeme);
        }
        //-------------------------
        //清空当前的Map
        this.pathMap.clear();
    }

分词测试:
这里写图片描述
这里写图片描述

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1136255
帖子:227251
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP