ES小知识:IKSegmenter ,实现自定义分词器

代码记录:

private static final Pattern SPECIAL_CHAR_PATTERN = Pattern.compile(".*[`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}【】\\-‘;:”“’。,、?\\\\]+.*");
/**
 * 自定义分词器
 */
private String customIk(String text) {
    StringBuilder word2Frequency = new StringBuilder();
    // 使用 IKSegmenter 初始化文本信息并加载词典
    IKSegmenter ikSegmenter = new IKSegmenter(new StringReader(text), true);
    Lexeme lex;
    while (true) {
        try {
            if ((lex = ikSegmenter.next()) == null) {
                break;
            }
            String word = StringUtils.trimToEmpty(lex.getLexemeText());
            if (StringUtils.isBlank(word)) {
                continue;
            } // 过滤一些高频率的符号
            else if (word.length() < 3 && SPECIAL_CHAR_PATTERN.matcher(word).matches()) {
                continue;
            }
            // 此处过滤长度为1&&不是数字的str,可以根据自己需求定义
            else if (word.length() < 2 && !Character.isDigit(word.charAt(0))) {
                continue;
            }
            word2Frequency.append(word).append(",");
        } catch (IOException e) {
            log.error("customIk.自定义分词异常", e);
        }
    }
    if(word2Frequency.length() == 0){
        word2Frequency.append(text);
    }
    log.info("customIk.自定义分词结果={}", word2Frequency);
    return word2Frequency.toString();
}
  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值