一种词库的比对、保存方式

news2024/12/29 11:22:39

一种词库的比对、保存方式

词库以树状链表存储,示意图如下:

对于词库:{A,AB,ABC,ADE}可以按以下方式存储

注:每个链表在末尾添加\0表示结束

1 数组形式存储的空间复杂度为O(N^2)   即O(N*M) -N为敏感词长度,M是敏感词个数

2 而用这个树状链表 空间复杂度为 O( N)  即O( K*N) -k为字符种类数为常数,N敏感词长度。

在检索时:

1 数组形式检索 时间复杂度为 O(N^3);

这时用三重循环

  1. 第一重 是遍历文章,
  2. 第二重 是从第i个字出发,与之后j个字组成词。
  3. 第三重 是将词与敏感词比对。

2 将文章和树状链表的关键词比对,时间复杂度为 O(f(N^2))

详细为O(f(K*N*M)) K为常数,是单个字符的种类数;N是文章的字数,M是关键词的长度

算法采用两重循环:

  1. 第一重 是遍历文章
  2. 第二重 是同时从文章第i位开始和 和树状链表的中 同时提取出j长度的词来对比。

具体代码如下:

树状链表如下:

    public class WordNode
    {
        public char word;
        public List<WordNode> children;
    }

比对方法如下:

        /// <summary>
        /// 查找敏感词
        /// </summary>
        /// <param name="txt">要处理的文章</param>
        /// <returns>处理后的文章</returns>
		public string HandleTxt(string txt)
        {
            _txt_Compare = txt;

            for (int i = 0; i < txt.Length; i++)
            {
                int len = IsMacthTree2(i, _wordTree);
                if (len > 0)
                {
					// 对i开始,长度len的敏感词处理。
                }
            }			
            return txt;
        }
		
		/// <summary>
        /// 树状结构的敏感词库
        /// </summary>
        private List<WordNode> _wordTree
        {
            get; set;
        }

        // 用于递归比较方法中的 记录文章变量。用索引分割,避免递归中截取大量字符变量
        private string _txt_Compare;       

        /// <summary>
        /// 检测文本中是否存在敏感词
        /// </summary>
        /// <param name="txtStart">从文章的txtStart位开始匹配</param>
        /// <param name="tree">敏感词库</param>
        /// <returns>敏感词长度</returns>
        private int IsMacthTree(int txtStart, List<WordNode> tree)
        {
            // txtStart 已经位于文章结束位置。即文章已经检查完。
            if (txtStart > _txt_Compare.Length - 1)
                return 0;

            // 在最大K常量的数组中查找
            int idx = tree.FindIndex(t => t.word == _txt_Compare[txtStart]);

            // 字不匹配,也就是:abe abc 这种情况
            if (idx == -1)
            {
                return 0;// 这轮递归,没有匹配
            }
			
            // 如果有\0 即敏感词比对结束
            if (tree[idx].children[0] == Thesaurus.EndSign)
            {
                return 1; // 这轮递归,匹配了一个字
            }

            // 文字或关键字未结束,也就是:ab* ab* 这种情况,继续递归
            int templen = IsMacthTree2(txtStart + 1, tree[idx].children);
            // 有一个不匹配 就固定为0
            if (templen == 0)
            {
                return 0; //匹配失败
            }
            else
            {
                return 1 + templen;  // 递归匹配成功,然后加上本轮匹配的一个字再返回。
            }
        }

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

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

相关文章

vscode配置linux私钥远程免密登录

安装romote-ssh 将linux下的 ssh-keygen -t rsa 生成的密钥id_rsa放到windows的目录下&#xff1a; 在vscode中配置文件路径&#xff1a; 修改配置文件的权限为666&#xff1a; chmod 666 id_rsa_179

电脑录屏快捷键是什么?电脑录屏是什么键

​在日常的生活之中&#xff0c;电脑录屏是比较常用的功能。有些小伙伴知道如何使用电脑自带的录屏软件&#xff0c;可普通的操作步骤实在是有些繁琐&#xff0c;想要通过录屏快捷键&#xff0c;快速进行录屏操作。那么电脑录屏快捷键是什么&#xff1f;电脑录屏是什么键&#…

【SpringMVC】提问问题汇总

【SpringMVC】提问问题汇总&#xff08;1&#xff09;什么是Spring MVC &#xff1f;对springMVC的理解?&#xff08;2&#xff09;SpringMVC的流程&#xff1f;&#xff08;3&#xff09;Springmvc的重要组件&#xff08;3&#xff09;Springmvc的优点&#xff08;设计模式&a…

工程机械流通行业BI经营分析框架(一)四大关注方向

工程机械流通行业的商业智能BI经营分析框架大体可以从四大方向出发来进行整体规划&#xff0c;厂商目标、业务经营目标、战略目标和行业数据这四部分内容。核心还是企业的业务经营目标&#xff0c;但是和其它三类也有很大的关系&#xff0c;所以这四部分需要放在一起去看、去规…

Java多线程(二)

目录 一、线程的使用 Thread类的有关方法 线程的调度 调度策略&#xff1a; java的调度方法 线程的优先级 线程的优先等级 如何获取优先级 线程有关方法及线程优先级练习 线程的分类 二、线程的生命周期 三、线程的同步&#xff08;一&#xff09;&#xff08;线程安…

【Linux】基本指令(二)

文章目录rmdir&&rm 指令nano 指令whoami 指令man 指令cp 指令mv 指令echo 指令cat 指令wc 指令more 指令less 指令head 指令tail 指令date 指令cal 指令rmdir&&rm 指令 &#x1f495; rmdir是一个与mkdir相对应的命令。 mkdir是建立目录&#xff0c;而rmdir是…

UML之类图

概要 类图以反映类的结构(属性、操作)以及类之间的关系为主要目的&#xff0c;描述了软件系统的结构&#xff0c;是一种静态建模方法。类图中的“类”与面向对象语言中的“类”的概念是对应的&#xff0c;是对现实世界中的事物的抽象。元素解析 类 从上到下分为三部分&#…

Jetson Nx 串口接收数据丢失首字节问题

1 问题描述 I write a uart program using c on Jetson Nx(Jetpack 4.6.1,Ubuntu version 18.04 LTS) to communicate with a PC. On PC there’s a uart simulator( as below figure 1) sending data at a period of one second, 30 bytes data are : EB90021112131415161718…

VUE综合数据库编程

VUE综合数据库编程 案例要求 基于node expressvue clielementUImysql&#xff0c;在如图8.14所示的功能的基础上增加一个输入框用于输入商品的id&#xff0c;增加一个“删除”按钮&#xff0c;完成根据id删除商品的功能&#xff08;删除后的结果通过查看数据表goods的最新数据…

LinkedIn领英怎么避免封号?封号怎么解决?(建议收藏)

使用领英的朋友都知道&#xff0c;领英是很容易封号的。辛辛苦苦经营到上千好友的账号&#xff0c;第二天登录&#xff0c;提示“您的账号受到限制&#xff0c;暂时无法使用”。 例如1&#xff1a; 例如2&#xff1a; Linkedin如何避免封号&#xff1f; 大家肯定不愿看到这…

【JavaSE】Comparable接口和Comparator接口

文章目录一、Comparable接口二、Comparator接口一、Comparable接口 当我们要比较两个类的大小时&#xff0c;我们该如何比较呢&#xff0c;是这样吗&#xff1f; 这样写是错误的&#xff0c;所以我们需要用到接口Comparable的CompareTo方法。 而ComparaTo是抽象方法&#x…

74cms骑士人才招聘系统源码SE版 v3.16.0

介绍&#xff1a; 74cms骑士人才招聘系统是一项基于PHPMYSQL为核心开发的一套专业人才招聘系统。骑士人才系统拥有十多年的人才招聘系统运营解决方案&#xff0c;同时我们提供智能化招聘系统、招考系统等全方位系统化解决方案。 74cms骑士人才招聘系统SE版&#xff1a; 更懂运…

Redhat(9)-磁盘分区-parted-swap-lvm-stratis-vdo-tuned

1.parted 2.swap 3.lvm 4.stratis 5.vdo 6.tuned 1.MBR: MASTER BOOT LOADER 逻辑分区&#xff1a;可以直接格式化使用 扩展分区&#xff1a;不可以直接格式化使用 2.GPT分区 1.parted 2.swap 虚拟内存 linux vmmemoryswap Hibernate :内存 3.lvm 3.1实现的功能和优点&…

前三强重磅揭晓!华秋第八届硬创大赛-全国总决赛路演活动成功举办!

11月19日&#xff0c;华秋第八届硬创大赛-全国总决赛路演活动在深圳高交会成功举办。此次项目路演活动是在深圳市福田区科技创新局指导下&#xff0c;由深圳华秋电子有限公司主办&#xff0c;深圳高交会联合主办的硬件创新领域专业赛事。共13个硬科技领域的优秀项目从众多报名项…

零基础入门JavaWeb——Web基本概念

一、服务器和客户端的概念 1.1 客户端的作用 与用户进行交互&#xff0c;用于接收用户的输入、展示服务器端的数据以及向服务器端传递数据。 1.2 服务器的作用 与客户端进行交互&#xff0c;接收客户端的数据、处理具体的业务逻辑、传递给客户端需要的数据。 1.3 什么是服务…

王道考研——操作系统(第二章 进程管理)

一、进程的概念、组成、特征 进程的概念 进程的组成——PCB 进程的组成——程序段、数据段 知识滚雪球&#xff1a;程序是如何运行的&#xff1f; 进程的组成 进程的特征 知识回顾与重要考点 二、进程的状态与转换 进程的状态——创建态、就绪态 进程的状态——运行态 进程的…

5G+北斗:人员定位系统为化工厂定位赋能

人员定位系统是集计算机软硬件、信息采集处理、无线数据传输、网络数据通讯、自动控制等技术多学科综合应用为一体的自动识别信息技术产品&#xff0c;可以实现对不同人、物在不同状态下的智能识别。 物联网时代&#xff0c;人们以感知为目的实现人与人、人与物、物与物全面互联…

【栈和队列的相互转换】

目录&#xff1a;前言一、 用队列实现栈&#xff08;一&#xff09; 题目分析1.队列基本操作2.画图分析3.翻译图解&#xff08;二&#xff09;整体代码二、用栈实现队列&#xff08;一&#xff09; 题目分析1.栈基本操作2.画图分析3.翻译图解&#xff08;二&#xff09;整体代码…

wy的leetcode刷题记录_Day47

wy的leetcode刷题记录_Day47 声明 本文章的所有题目信息都来源于leetcode 如有侵权请联系我删掉! 时间&#xff1a;2022-11-20 前言 补 目录wy的leetcode刷题记录_Day47声明前言799. 香槟塔题目介绍思路代码收获105. 从前序与中序遍历序列构造二叉树题目介绍思路代码收获79…

优思学院|精益六西格玛的成本效益怎么样?

所有精益六西格玛的实施都以项目工作为中心&#xff0c;因此可以用投资回报率&#xff08;ROI&#xff09;确定成本效益。项目可以集中在通过改善营收或降低成本&#xff08;或两者&#xff09;来提高净利润。 它们也可以侧重于通过减少资产&#xff08;通常是库存或应收账款&…