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

embedded/2024/10/21 19:44:37/

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

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

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

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

        <dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency>

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

    public static Long ikword(String str){String url = "http://你自己的服务器ip:9200/_analyze"; // Elasticsearch地址// 创建JSONObject并设置analyzerJSONObject 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的索引,检索与集合中词汇对应的敏感词

    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就是存在违规词汇,进行相关操作即可

    public static void main(String[] args) {//分词Long ikword = EsIkword.ikword("xx傻逼,口齿不清,右边脸明显动不了");//用返回值做判断,如果返回值大于0,则存在违规数据词汇if (ikword > 0) {log.info("存在违规数据词汇");} else {log.info("不存在违规数据词汇");}}

 


http://www.ppmy.cn/embedded/104101.html

相关文章

Pandas 9-绘制柱状图

1. 准备数据 首先&#xff0c;需要准备一个DataFrame。 import pandas as pd # 创建一个DataFrame data { Name: [Alice, Bob, Charlie, David], Age: [24, 27, 22, 32], City: [New York, Los Angeles, Chicago, Houston], Score: [85, 92, 78, 88]} df pd.…

《机器学习》【项目】 爬虫爬取数据、数据分词、贝叶斯算法、判断分类 <完整实战详解> (全篇完结)

目录 一、回顾爬虫 1、什么是爬虫 2、实操爬虫 1&#xff09;寻找标签位置 2&#xff09;爬取苏某某购产品好评数据 运行代码&#xff1a; 3&#xff09;爬取差评内容 二、数据分词 1、将获取到的好评和差评数据进行初步分词 1&#xff09;初步分词 2&#xff09;内…

【超详细】深度学习的Hello World:使用pytroch训练一个自定义的手写体数字识别模型完整流程【附数据集与完整源码】

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发…

【C++】深入理解C++模板:从基础到进阶

文章目录 深入理解C模板&#xff1a;从基础到进阶1. 模板的基础1.1 什么是模板&#xff1f;1.2 函数模板1.3 类模板 2. 进阶模板特性2.1 模板特化2.2 模板元编程2.3 变参模板 3. 模板的最佳实践 深入理解C模板&#xff1a;从基础到进阶 C模板是C语言中最强大且复杂的特性之一。…

Spring--AOP案例以及使用介绍

AOP案例 1 案例-测量业务层接口万次执行效率 问题导入 能不能描述一下环绕通知里面的实现步骤&#xff1f; 1.1 需求和分析 需求&#xff1a;任意业务层接口执行均可显示其执行效率&#xff08;执行时长&#xff09; 分析&#xff1a; ​ ①&#xff1a;业务功能&#x…

线性约束最小方差准则(LCMV)波束形成算法及MATLAB深入仿真分析

阵列信号处理——线性约束最小方差准则(LCMV)波束形成算法及MATLAB深入仿真分析 目录 前言 一、LCMV算法 二、仿真参数设置 三、抗干扰权值计算仿真 四、不同干扰方位下抗干扰性能仿真 五、不同信噪比和干噪比下抗干扰性能仿真 总结 前言 在信号处理模块中&#xff0c;通…

监控Nginx负载均衡后端服务器状态的策略与实践

在Nginx负载均衡的部署中&#xff0c;监控后端服务器的状态对于确保高可用性和服务连续性至关重要。通过检测后端服务器的状态&#xff0c;可以及时发现问题并采取措施&#xff0c;如故障转移或服务重启。本文将详细介绍如何检测Nginx负载均衡后端服务器的状态&#xff0c;包括…

Vue setup语法糖

未使用setup语法糖 <script lang"ts">export default {name: "App",setup() {let name "张三"let age 20function handleClick() {age 1}return {name,age,handleClick,}}} </script><template><div class"class&…