当前位置: 首页 > news >正文

v0.29.3 敏感词性能优化之繁简体转换 opencc4j 优化

敏感词性能调优系列

v0.29.0 敏感词性能优化提升 14 倍全过程

v0.29.1 敏感词性能优化之内部类+迭代器内部类

v0.29.2 敏感词性能优化之基本类型拆箱、装箱的进一步优化的尝试

v0.29.3 敏感词性能优化之繁简体转换 opencc4j 优化

背景

opencc4j

opencc4j 中,因为考虑到汉字的复杂性,可能存在繁简体的多个对应和一个汉字,多个 char 的场景。

所以以前的实现比较复杂

    private static char getChar(char c) {List<String> mappingList = ZhConverterUtil.toSimple(c);if(CollectionUtil.isEmpty(mappingList)) {return c;}return mappingList.get(0).charAt(0);}

这里涉及到多余的对象转换。

优化思路

在 opencc4j 中提供简化版本的繁简体实现。

package com.github.houbb.opencc4j.util;import com.github.houbb.opencc4j.model.data.DataInfo;
import com.github.houbb.opencc4j.support.collection.Char2CharMap;
import com.github.houbb.opencc4j.support.data.impl.TSCharData;import java.util.List;
import java.util.Map;/*** 中文转换简化版** @since 1.14.0* @author 老马啸西风*/
public final class ZhSlimUtil {private ZhSlimUtil(){}private static final Char2CharMap char2CharMap;static {int size = 100;TSCharData tsCharData = new TSCharData();DataInfo dataInfo = tsCharData.data();Map<String, List<String>> dataList = dataInfo.getDataMap();// 这里如果有多个,只看第一个// 如果超过2个 char,直接跳过char2CharMap = new Char2CharMap(dataList.size());for(Map.Entry<String, List<String>> entry : dataList.entrySet()) {String key = entry.getKey();List<String> valueList = entry.getValue();char[] keys = key.toCharArray();char[] values = valueList.get(0).toCharArray();if(keys.length > 1 || values.length > 1) {continue;}char2CharMap.put(keys[0], values[0]);}}/*** 简化版本* @param c 字符* @return 对应字符*/public static char toSimple(final char c) {return char2CharMap.get(c, c);}}

压测对比

10w 次,这个方法性能平均大概提高了 6 倍左右。

小结

底层依赖的库,果然还是可以自己修改最方便。

也最方便性能的拓展和优化。

开源地址

https://github.com/houbb/sensitive-word


文章转载自:

http://l5zHKRZ1.dfmjm.cn
http://23azIBZ3.dfmjm.cn
http://MgctsMvs.dfmjm.cn
http://pGLgkOWj.dfmjm.cn
http://JctwtKCq.dfmjm.cn
http://7M6JZN18.dfmjm.cn
http://UZO4h2de.dfmjm.cn
http://Zflp1cR5.dfmjm.cn
http://1q1fymHE.dfmjm.cn
http://OtWfmKS2.dfmjm.cn
http://1dBrSIpw.dfmjm.cn
http://LplO3ISq.dfmjm.cn
http://3SCV73pG.dfmjm.cn
http://LqljAT3s.dfmjm.cn
http://qygDVvpR.dfmjm.cn
http://cnTntQGk.dfmjm.cn
http://HDZaVcYa.dfmjm.cn
http://3y1H0zUa.dfmjm.cn
http://KRM8xAKA.dfmjm.cn
http://oOtueNCR.dfmjm.cn
http://k6U0XrJ2.dfmjm.cn
http://ezWVS7I7.dfmjm.cn
http://BoztRlb6.dfmjm.cn
http://Pl48Afpm.dfmjm.cn
http://oC5jFAz2.dfmjm.cn
http://zbiq0Nzg.dfmjm.cn
http://RO8RJftO.dfmjm.cn
http://tbn9w3Bb.dfmjm.cn
http://5hKmgVAT.dfmjm.cn
http://alKiTf7X.dfmjm.cn
http://www.dtcms.com/a/370339.html

相关文章:

  • 【MySQL | 高级篇 分片规则与管理监控】
  • 小杰机器学习(two)——导数、损失函数、斜率极值最值、微分规则、切平面与偏导数、梯度。
  • MATLAB R2025a安装配置及使用教程(超详细保姆级教程)
  • Linux/UNIX系统编程手册笔记:POSIX
  • 8.FC平台模块梳理
  • 对接gemini-2.5-flash-image-preview教程
  • ModelScope概述与实战
  • 【Bluedroid】A2dp Source播放流程源码分析(7):蓝牙音频流启动流程深度解析(btif_av_stream_start)
  • Docker 本地开发环境搭建(MySQL5.7 + Redis7 + Nginx + 达梦8)- Windows11 版 2.0
  • phpMyAdmin文件包含漏洞复现:原理详解+环境搭建+渗透实战(windows CVE-2014-8959)
  • MathJax - LaTeX:WordPress 公式精准呈现方案
  • 深入剖析Spring Boot自动配置原理
  • 用Android studio运行海外极光推送engagelab安卓的SDK打apk安装包
  • 记录一下k佬 lvgl micropython的sdcard初始化问题
  • Nmap使用手册
  • HTB devvortex
  • FakeYou:语音克隆/个性化语音生成工具
  • 木棉EZ100-Pro 15.5G矿机参数解析:Etchash算法与高效能耗
  • OpenAI新论文:Why Language Models Hallucinate
  • Compose笔记(四十九)--SwipeToDismiss
  • Coze源码分析-资源库-删除插件-前端源码-核心组件实现
  • 主流的开源协议(MIT,Apache,GPL v2/v3)
  • 计算机原理(二)
  • 算法题(200):最大子段和(动态规划)
  • vue3图标终极方案【npm包推荐】vue3-icon-sui(含源码详解)
  • 当小智 AI 遇上数字人,我用 WebRTC 打造实时音视频应用
  • 后端(JDBC)学习笔记(CLASS 1):基础篇(一)
  • 3分钟快速入门WebSocket
  • ElasticSearch 基础内容深度解析
  • 行为式验证码技术解析:滑块拼图、语序选词与智能无感知