Java 结合elasticsearch-ik分词器,实现评论的违规词汇脱敏等操作

IK分词(IK Analyzer)是一款基于Java开发的中文分词工具,它结合了词典分词和基于统计的分词方法,旨在为用户提供高效、准确、灵活的中文分词服务。

注意:需要自己建立一个敏感词库,然后自己选择方式同步到elasticsearch中,方便比对操作

话不多说,直接上后台代码

这个依赖是我使用的,可以结合自己的情况自己选择适用版本的相关依赖

java 复制代码
        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>

我直接给相关核心代码封装成了工具类,上半部分代码是用于做分词的,会返回一个集合,这个集合里面存放的都是根据入参分出来的词

java 复制代码
    public static Long ikword(String str){
        String url = "http://你自己的服务器ip:9200/_analyze"; // Elasticsearch地址
        // 创建JSONObject并设置analyzer
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("analyzer", "ik_max_word");
        // 创建一个JSONObject用于存放text字段
        jsonObject.put("text", str);

        // 将JSONObject转换为JSON字符串
        String json = jsonObject.toString();
        CloseableHttpClient httpClient = HttpClients.createDefault();
        HttpPost httpPost = new HttpPost(url);

        ArrayList<String> list = new ArrayList<>();
        try {
            StringEntity entity = new StringEntity(json, "UTF-8");
            entity.setContentType("application/json");
            httpPost.setEntity(entity);

            CloseableHttpResponse response = httpClient.execute(httpPost);
            try {
                HttpEntity responseEntity = response.getEntity();
                String result = EntityUtils.toString(responseEntity, "UTF-8");

                ObjectMapper mapper = new ObjectMapper();
                JsonNode rootNode = mapper.readTree(result);
                JsonNode tokensNode = rootNode.path("tokens");

                if (tokensNode.isArray()) {
                    for (JsonNode token : tokensNode) {
                        list.add(token.path("token").asText());
                    }
                }
            } finally {
                response.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                httpClient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        Long aLong = ikword1(list);


        return aLong;
    }

下半部分是根据分出来的词做一个检索操作,根据es的索引,检索与集合中词汇对应的敏感词

java 复制代码
    public static Long ikword1(List<String> list){
        Long count = 0L;

        // 创建客户端连接
        try (RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(
                        new HttpHost("你自己的服务器ip", 9200, "http")))) {

            // 创建搜索请求
            SearchRequest searchRequest = new SearchRequest("hyposensitization"); // 替换为你的索引名
            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();

            BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();

            // 构建match查询(注意这里使用了matchQuery而不是termsQuery)
            for (String term : list) {
                boolQueryBuilder.should(QueryBuilders.matchQuery("content", term));
            }

            // 将查询添加到SearchSourceBuilder中
            searchSourceBuilder.query(boolQueryBuilder);

            // 将查询设置到搜索请求中
            searchRequest.source(searchSourceBuilder);

            // 执行搜索并获取响应
            SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);

            // 处理搜索结果
            count = searchResponse.getHits().getTotalHits().value;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return count;
    }

然后可以直接在业务代码中使用工具类即可,注意入参是String,这里我的判断条件是大于0就是存在违规词汇,进行相关操作即可

java 复制代码
    public static void main(String[] args) {
        //分词
        Long ikword = EsIkword.ikword("xx傻逼,口齿不清,右边脸明显动不了");
        //用返回值做判断,如果返回值大于0,则存在违规数据词汇
        if (ikword > 0) {
            log.info("存在违规数据词汇");
        } else {
            log.info("不存在违规数据词汇");
        }
    }
相关推荐
supericeice42 分钟前
创邻科技 AI智算一体机:支持 DeepSeek 671B 与 Qwen3 单机部署,覆盖纯CPU到多GPU多机扩展
大数据·人工智能·科技
智慧景区与市集主理人1 小时前
巨有科技云票务,破解景区五一运营的入园难“效率瓶颈”
大数据·人工智能·科技
媒介发稿小能手1 小时前
技术视角下的品牌传播范式迁移:当“搜索引擎优化”让位于“媒体收录逻辑”
大数据·搜索引擎·ai·产品运营·媒体
2501_933329551 小时前
企业媒体发布与舆情管理实战:Infoseek舆情系统技术架构与落地解析
大数据·开发语言·人工智能·数据库开发
Are_You_Okkk_1 小时前
AI原生与外挂的区别:开源知识库的优势及优化方向
大数据·人工智能·开源
KKKlucifer1 小时前
非结构化 / 半结构化数据的深度语义解析与精准分类分级技术
大数据·分类·数据挖掘
他们叫我技术总监1 小时前
零依赖!FineReport11 快速对接 TDengine 数据库:从驱动部署到报表实现
大数据·数据库·ai·tdengine
TDengine (老段)1 小时前
TDengine IDMP 可视化 —— 定时报告
大数据·数据库·人工智能·物联网·时序数据库·tdengine·涛思数据
jikemaoshiyanshi2 小时前
B2B企业GEO服务商哪家好?深度解析径硕科技(JINGdigital)及其JINGEO产品为何是首选
大数据·运维·人工智能·科技
Elastic 中国社区官方博客2 小时前
使用 Jina-VLM 小型多语言视觉语言模型来和图片对话
大数据·人工智能·elasticsearch·语言模型·自然语言处理·jina