测试.net开源敏感词检测库ToolGood.Words

news2024/12/24 11:14:46

  微信公众号“DotNet”看到介绍.net开源敏感词检测库ToolGood.Words的文章《.NET Core一款高性能敏感词检测开源库》,根据参考文献2中的测试,该库的检测效率比C#自带的正则效率高8.8倍,如果数量量越大性能优势越明显。
  ToolGood.Words的GitHub地址见参考文献1,除了支持非法词(敏感词)检测,其还支持繁体简体互换、全角半角互换、获取拼音首字母、获取拼音字母、拼音模糊搜索等功能。
  本文主要测试其关键词检索功能。

在这里插入图片描述
  ToolGood.Words库中的StringSearch、StringSearchEx、StringSearchEx2、WordsSearch、WordsSearchEx、WordsSearchEx2、IllegalWordsSearch等类都支持敏感词检测,区别在于String开头的类的检测函数返回值均为字符串类型,而Words开头的类的检测函数返回值为WordsSearchResult ,该类记录匹配检索条件的字符串的起始和结束位置,同时IllegalWordsSearch为过滤非法词(敏感词)专用类,可设置跳字长度,默认全角转半角,忽略大小写,跳词,重复词,黑名单等。
  除了固定检索词,上述检测类还支持有限的正则表达式(.(点)?(问号) (|)(括号与竖线))。本文中主要使用WordsSearch类进行敏感词检测测试,该类与WordsSearchEx、WordsSearchEx2相比性能最低,根据参考文献1中的介绍,性能从小到大 WordsSearch < WordsSearchEx < WordsSearchEx2 < WordsSearchEx3。
  WordsSearch的重要函数定义如下所示,本文中主要使用FindAll函数获取所有匹配项的具体信息。返回值类型WordsSearchResult的定义如下所示。

	public class WordsSearch 
    {
        //  判断文本是否包含关键字
        public bool ContainsAny(string text);

        // 在文本中查找第一个关键字
        public WordsSearchResult FindFirst(string text);
      
        //  在文本中查找所有的关键字
        public List<WordsSearchResult> FindAll(string text);
        
        //  在文本中替换所有的关键字
        public string Replace(string text, char replaceChar = '*');
		
		//设置搜索关键字,可为固定字符串,也可为正则表达式
		public virtual void SetKeywords(ICollection<string> keywords);
    }

	public class WordsSearchResult
    {
        //  匹配项的开始位置
        public int Start { get; private set; }

        //  匹配项的结束位置
        public int End { get; private set; }
        
        //  关键字
        public string Keyword { get; private set; }

        //   索引
        public int Index { get; private set; }

        //   匹配关键字
        public string MatchKeyword { get; private set; }
     }

  对照实际的值可以更直观地看出WordsSearchResult的各个属性的意义,如下图所示:
在这里插入图片描述
  本文的测试思路是加载本地的txt文件,设置多个关键词,然后高亮显示搜索结果,并能在各个搜索项之间切换。主要使用的是WordsSearch的检测功能,同时使用RichTextbox控件的高亮显示及跳转功能。主要代码如下:

            //检测并显示检测结果
 			WordsSearch ws = new WordsSearch();
            ws.SetKeywords(txtResearchWord.Text.Split(';',';'));
            List<WordsSearchResult> results = ws.FindAll(txtContent.Text);

            for(int i=0;i<results.Count;i++)
            {
                ListViewItem lvi = new ListViewItem(Convert.ToString(i + 1));
                lvi.SubItems.Add(results[i].MatchKeyword);
                lvi.SubItems.Add(string.Format("位置:{0}~{1}", results[i].Start, results[i].End));
                lvi.Tag = results[i];
                lstResult.Items.Add(lvi);

                txtContent.Select(results[i].Start, results[i].End-results[i].Start+1);
                txtContent.SelectionFont = new Font(txtContent.SelectionFont,FontStyle.Underline|FontStyle.Bold);
                txtContent.SelectionBackColor = Color.LightBlue;
            }

			//跳转到选中匹配项
			WordsSearchResult result = lstResult.SelectedItems[0].Tag as WordsSearchResult;
            txtContent.SelectionStart = result.Start;
            txtContent.ScrollToCaret();

  测试程序的运行效果如下图所示:
在这里插入图片描述
在这里插入图片描述

参考文献:
[1]https://github.com/toolgood/ToolGood.Words
[2]https://blog.csdn.net/daremeself/article/details/127522209

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/11946.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

英文Paper写作如何尽量避免抄袭?

说到英文Paper的写作&#xff0c;我们就不得不提到reference&#xff0c;中文称之为引用。在国外&#xff0c;合理正确的利用reference非常重要&#xff0c;国外对于知识产权的保护很严格&#xff0c;对于抄袭行为也是不能容忍的。学术表现差或是学术不诚实问题是造成学生被开除…

4.构造类型,类型转换

构造类型 由若干各个相同或不同类型的数据构成的集合&#xff0c;这种集合类型被称为构造类型 例&#xff1a;int a[10]; 数组、结构体、共用体、枚举 类型转换 数据有不同的类型&#xff0c;不同类型数据之间进行混合运算时必然涉及到类型转换的问题。 转换的方式有两种&am…

使用verdaccio搭建私有组件库

前言 最近公司需要根据现有的公用组件搭建一套私有组件库&#xff0c;方便其他项目使用&#xff0c;然后经过一系列尝试和走了许多坑&#xff0c;终于搭建成功了&#xff0c;这里记录下搭建步骤&#xff0c;希望对你有些帮助。 为什么选择verdaccio 由于公司组件库越来越多&…

ZZNUOJ_Java软件的下载安装和写代码

ZZNUOJ_Java软件的下载安装和写代码一、Java软件myeclipse图标二、下载安装的步骤三、使用myeclipse软件1、创建项目名和类名的步骤2、写代码和运行结果一、Java软件 myeclipse图标 二、下载安装的步骤 第一步骤&#xff1a;下载myeclipse&#xff1a;myeclipse 第二步骤&…

怎么把旧电脑的用户配置文件迁移到新电脑

您购买了一台新笔记本电脑&#xff0c;但不想花大量时间重新下载、编辑、备份旧电脑上的所有文件&#xff0c;也不想重新安装常用的软件&#xff0c;更不想重新配置电脑账户&#xff0c;那么&#xff0c;应该怎么把旧电脑的用户配置文件迁移到新电脑&#xff1f; 一、如何迁移用…

[附源码]java毕业设计基于疫情防控物流管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

BDP 581/591 azide,Bodipy581/591标记叠氮,2183473-20-1

产品名称&#xff1a;Bodipy581/591标记叠氮 英文名称&#xff1a;BDP 581/591 azide CAS&#xff1a;2183473-20-1 BDP 581/591是一种相对疏水的明亮且多用途的荧光团。 结构式&#xff1a; General properties Appearance: dark solid Molecular weight: 474.31 分子式…

中台深入剖析和实现技巧

什么是中台 中台发展史 无共享架构-大烟囱架构 共享架构模式 IaaS架构 PaaS架构 SaaS架构 中台架构 中台定义 中台就是“企业级的能力复用平台”-Thoughtworks 首席咨询师王健 中台是将系统的通用化能力进行打包整合&#xff0c;通过接口的形式赋能到外部系统&#xff0c;从…

jsp教育培训系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 教育培训系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql&#xff0c;使用jav…

[附源码]java毕业设计教务系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

计算机网络:IEEE 802.11无线局域网

文章目录1.无线局域网的组成(1)有固定基础设施无线局域网(2)无固定基础设施移动自组织网络2.802.11局域网的MAC帧1.无线局域网的组成 无线局域网可分为两大类:有固定基础设施的无线局域网和无固定基础设施的移动自组织网络。所谓“固定基础设施”&#xff0c;是指预先建立的、…

[附源码]java毕业设计基于智能推荐的房屋租赁系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Docker(狂神)

Docker概述 Docker为什么出现&#xff1f; 一款产品&#xff1a;开发&#xff0c;上线&#xff0c;两套环境&#xff0c;应用环境&#xff0c;应用配置 开发&#xff0c;运维 环境配置十分麻烦&#xff0c;每一个机器都要部署环境&#xff0c;费时费力。 发布一个项目&#xff…

数据流与重定向,vim练习,grep过滤练习,cut练习

今日作业&#xff1a; 1、重定向练习&#xff1a;将根目录下的文件的文件名写入/test/file文件中&#xff08;先切换到根目录&#xff0c;再查看根目录下的文件名&#xff0c;进行数据重定向&#xff0c;最后查看/test/file文件&#xff09; 2、vim命令练习&#xff1a;将/root…

景区讲解小程序,扫码轻松获取多语言讲解服务

中国旅游研究院连续40个季度监测&#xff0c;提取了游客对景区的五大负面评价关键词。 分别是&#xff1a; 1、空间拥堵 2、体验感下降 3、人性化服务不足 4、纪念品和旅游购物同质化 5、娱乐项目不够丰富 这些评价词也为景区的升级转型、服务提升指明了方向。 其中“体验感下…

RESTful+统一响应体+API自动文档的SprinBoot项目

一、项目要求 实验环境&#xff1a;IdeamysqlJDKTomcatMaven将上一周个人作业用 RESTful 接口实现&#xff1b;&#xff08;上周的SpringBootMybatisCRUD项目&#xff09;配置统一响应体&#xff1b;配置Swagger&#xff0c;生成API自动文档&#xff1b;对 RESTful 接口用Post…

同态加密开源框架整理

开放隐私计算 2022-11-16 19:17 发表于浙江 以下文章来源于隐私计算研习社 &#xff0c;作者庄智廉 隐私计算研习社. 开放隐私计算社区 开放隐私计算 开放隐私计算OpenMPC是国内第一个且影响力最大的隐私计算开放社区。社区秉承开放共享的精神&#xff0c;专注于隐私计算行业…

2022年数维杯国际赛D题 极端天气损失评估与应对策略

2022年7月至8月&#xff0c;中国南方许多城市经历了多日的炎热天气&#xff0c;而北方部分地区也出现了大 规模的强降水。此外&#xff0c;许多欧洲国家也经历了历史上罕见的干旱灾害。无论是南部的高温天气 &#xff0c;北方的强降水&#xff0c;还是欧洲的干旱天气&#x…

算法部署经验实操:手把手教你掌握Atlas移植和算法推理

华为Atlas智能边缘解决方案已广泛应用于安防、交通、社区、商超等复杂环境区域的AI需求&#xff0c;在算法部署落地过程中&#xff0c;具备算法异构能力已经成为算法开发者的加分项。 本次特训营由极市平台、昇腾社区联合主办&#xff0c;启用行业专家导师结合算法实际落地应用…

Jekyll 选项(options)和子命令(subcommand)小手册

建议直接通过侧边栏进行跳转查询。 本文将列出并介绍一些常用的 Jekyll 的命令选项&#xff08;options&#xff09;和子命令&#xff08;subcommand&#xff09;&#xff0c;这样方便快速查看。如果你想找的这里没有列出&#xff0c;可以查看官方文档 《Configuration Option…