LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

C# 高性能敏感词过滤神器!性能超 Regex 8.8 万倍

admin
2025年7月22日 18:43 本文热度 63

ToolGood.Words 是一个基于 C# 实现的高性能非法词(敏感词)检测组件,具备以下核心功能:

  • • 敏感词过滤(支持通配符)
  • • 繁体/简体互换
  • • 全角/半角互换
  • • 获取拼音(全拼、首字母)
  • • 拼音模糊匹配
  • • 数字与中文大写转换

在 48k 敏感词库下,使用 StringSearchEx2.Replace 进行过滤,速度可超过 3 亿字符/秒(测试环境:i7-8750H CPU)。


核心组件说明

非法词(敏感词)检测类

类名
特点
StringSearch
 / StringSearchEx / StringSearchEx2
返回 string 类型结果
WordsSearch
 / WordsSearchEx / WordsSearchEx2
返回 WordsSearchResult 类型,包含位置、序号等信息
IllegalWordsSearch
专为非法词过滤设计,支持跳词、黑名单、忽略大小写等高级功能

常用方法

  • • SetKeywords:设置敏感词库
  • • ContainsAny:判断是否包含敏感词
  • • FindFirst:查找第一个敏感词
  • • FindAll:查找所有敏感词
  • • Replace:替换敏感词为指定字符

示例代码

var iwords = new StringSearch();
iwords.SetKeywords("中国|国人|zg人".Split('|'));

bool contains = iwords.ContainsAny("我是中国人"); // true
string replaced = iwords.Replace("我是中国人"'*'); // "我是***"

支持通配符的检测类

类名
特点
StringMatch
 / StringMatchEx
支持部分正则表达式语法,如 .?[], `(
WordsMatch
 / WordsMatchEx
返回 WordsMatchResult,包含匹配词、原始词、位置等信息

示例代码

var wordsSearch = new WordsMatch();
wordsSearch.SetKeywords(".[中美]国|国人|zg人".Split('|'));

var result = wordsSearch.FindFirst("我是中国人");
// result.Keyword => "是中国"
// result.MatchKeyword => ".[中美]国"

辅助功能

繁简转换与字符处理

WordsHelper.ToSimplifiedChinese("我愛中國"); // "我爱中国"
WordsHelper.ToTraditionalChinese("我爱中国"); // "我愛中國"
WordsHelper.ToSBC("abc"); // 全角:abc
WordsHelper.ToDBC("abc"); // 半角:abc

拼音处理

WordsHelper.GetPinyin("我爱中国"); // "WoAiZhongGuo"
WordsHelper.GetFirstPinyin("我爱中国"); // "WAZG"
WordsHelper.GetAllPinyin('传'); // "Chuan,Zhuan"

数字与中文转换

WordsHelper.ToChineseRMB(12345678901.12); // "壹佰贰拾叁亿肆仟伍佰陆拾柒万捌仟玖佰零壹元壹角贰分"
WordsHelper.ToNumber("壹佰贰拾叁亿肆仟伍佰陆拾柒万捌仟玖佰零壹元壹角贰分"); // 12345678901.12

拼音模糊匹配

使用 PinyinMatch 和 PinyinMatch<T> 可实现拼音模糊搜索,适用于地址、姓名等场景。

var match = new PinyinMatch();
match.SetKeywords("北京|天津|河北|辽宁|吉林|黑龙江|山东|江苏|上海|浙江|安徽|福建|江西|广东|广西|海南|河南|湖南|湖北|山西|内蒙古|宁夏|青海|陕西|甘肃|新疆|四川|贵州|云南|重庆|西藏|香港|澳门|台湾".Split('|').ToList());

var result = match.Find("BJ"); // ["北京"]

性能对比

在 10 万次测试中,StringSearchEx2.ContainsAny 的性能远超 C# 自带正则表达式,效率是其 8.8 万倍以上(与敏感词数量相关)。

⚠️ 注意:Regex.Matches 仅检测出 11 个敏感词,而 StringSearch 检测出 14 个。


多语言实现

  • • Lua 版本:由 wenlifan 实现

开源地址

https://gitee.com/toolgood/ToolGood.Words

 


··············  END  ··············


该文章在 2025/7/23 12:10:01 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved