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

东莞网站建设最优/汨罗网站seo

东莞网站建设最优,汨罗网站seo,高级软件工程师,甜品网站设计与实现毕业设计目录 1. 建立敏感词数据库表2. 定时任务,读数据并建立敏感词树2.1 开启定时任务2.2 读数据并建立敏感词树 3. 使用 思路: 将敏感词都存到数据库表中定时读取数据到内存中,构建敏感词前缀树写工具方法,使用内存中的前缀树判断消息…

目录

  • 1. 建立敏感词数据库表
  • 2. 定时任务,读数据并建立敏感词树
    • 2.1 开启定时任务
    • 2.2 读数据并建立敏感词树
  • 3. 使用

思路:

  1. 将敏感词都存到数据库表中
  2. 定时读取数据到内存中,构建敏感词前缀树
  3. 写工具方法,使用内存中的前缀树判断消息中是否包含敏感词或完成替换操作

1. 建立敏感词数据库表

CREATE TABLE `bad_words` (`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键id',`content` text COMMENT '敏感词内容',`create_user_id`bigint(20) unsigned COMMENT '创建用户id',`extra` text COMMENT '扩展信息',`create_time` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',`modify_time` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '修改时间',`status` int DEFAULT 0 COMMENT '0存在,1删除',PRIMARY KEY (`id`)
) ENGINE=InnoDB CHARSET=utf8 COLLATE=utf8_general_ci;

2. 定时任务,读数据并建立敏感词树

项目启动的时候,开始执行这一块。

2.1 开启定时任务

var (ctx          context.ContextBadWordsTrie *BadWordsTrieNode
)func InitCronLoader() {var err errorctx = context.Background()err = getBadWordsAndInitBadWordsTrie() // 初始化敏感词树if err != nil {panic(err)}gocron.Every(3).Minutes().Do(getBadWordsAndInitBadWordsTrie)go func() {<-gocron.Start()}()
}

2.2 读数据并建立敏感词树

func getBadWordsAndInitBadWordsTrie() error {// 从数据库获取信息badWordsList := getBadWordsFromDB()// 初始化敏感词树BadWordsTrie = initTrie(badWordsList)return nil
}func getBadWordsFromDB() []string {badWords := make([]*models.BadWord, 0)caller.LyhTestDB.Debug().Table(models.TableNameBadWord).Where("status=0").Find(&badWords)badWordsList := make([]string, 0)for _, item := range badWords {if item.Content != "" {badWordsList = append(badWordsList, item.Content)}}return badWordsList
}func initTrie(badWordsList []string) *BadWordsTrieNode {root := &BadWordsTrieNode{}for _, word := range badWordsList {addWord(root, word)}return root
}type BadWordsTrieNode struct {Children map[rune]*BadWordsTrieNode
}func addWord(root *BadWordsTrieNode, word string) {node := rootfor _, char := range word {if node.Children == nil {node.Children = make(map[rune]*BadWordsTrieNode)}if _, ok := node.Children[char]; !ok {node.Children[char] = &BadWordsTrieNode{}}node = node.Children[char]}
}

3. 使用

可以写到工具中

// 检查是否包含敏感词
func CheckBadWords(message string) bool {return isContain(message, cronloader.BadWordsTrie)
}// 将敏感词字符替换为*
func CheckAndReplaceBadWords(message string) string {return replaceBadWords(message, '*', cronloader.BadWordsTrie)
}// 将敏感词字符替换为自定义字符
func CheckAndReplaceBadWordsWithSep(message string, sep rune) string {return replaceBadWords(message, sep, cronloader.BadWordsTrie)
}func isContain(message string, root *cronloader.BadWordsTrieNode) bool {message = strings.ToLower(message)runes := []rune(message)for i := 0; i < len(runes); i++ {p := rootj := ifor j < len(runes) && p.Children != nil {char := runes[j]if _, ok := p.Children[char]; ok {p = p.Children[char]j++} else {break}}if p.Children == nil {return true}}return false
}func replaceBadWords(message string, sep rune, root *cronloader.BadWordsTrieNode) string {message = strings.ToLower(message)runes := []rune(message)for i := 0; i < len(runes); i++ {p := rootj := ifor j < len(runes) && p.Children != nil {char := runes[j]if _, ok := p.Children[char]; ok {p = p.Children[char]j++} else {break}}if p.Children == nil {for k := i; k < j; k++ {runes[k] = sep}}}return string(runes)
}

相关文章:

敏感词过滤--golang

目录 1. 建立敏感词数据库表2. 定时任务&#xff0c;读数据并建立敏感词树2.1 开启定时任务2.2 读数据并建立敏感词树 3. 使用 思路&#xff1a; 将敏感词都存到数据库表中定时读取数据到内存中&#xff0c;构建敏感词前缀树写工具方法&#xff0c;使用内存中的前缀树判断消息…...

NVIDIA cuda安装时全部失败

查看了很多博客&#xff0c;有写的非常详细清楚的博客&#xff0c;csdn上真的是一个很好的学习平台&#xff0c;我在学习过程中遇到的好多bug&#xff0c;都能在这上面找到解决方法&#xff0c;就是一个老师的存在。 我安装NVIDIA cuda安装时失败了N次&#xff0c;数不清了&am…...

APScheduler-调度器AsyncIOScheduler

AsyncIOScheduler 是一个调度器&#xff0c;基于异步IO的库 AsyncIO。它允许你按照指定的时间表执行异步任务。 下面是实现 AsyncIOScheduler 的步骤&#xff0c;我将使用表格展示每个步骤以及需要做的事情。 1 导入必要的库2 创建异步函数3 创建调度器对象4 添加任务到调度器…...

二十三种设计模式全面解析-原型模式(Prototype Pattern)详解:创造对象的奇妙之道

在软件开发的世界中&#xff0c;创新和效率是永恒的追求。然而&#xff0c;频繁的对象实例化过程可能成为我们创新和效率的绊脚石。随着技术的不断进步&#xff0c;一种被广泛应用的设计模式——原型模式&#xff08;Prototype Pattern&#xff09;应运而生。通过克隆现有对象来…...

el-input 给icon图标绑定点击事件

选择suffix-icon&#xff0c;添加点击事件 <temeplate><el-form-item :label"$t(company[Company address])" prop"address"><el-input v-model"enterpriseForm.address"><i slot"suffix" class"el-icon-m…...

计算机网络——物理层

一、物理层的基本概念 &#xff08;一&#xff09;四大特征 机械特性 接口是怎样的 电器特性 用多少伏的电 功能特性 线路上电平电压的特性 过程特性 实现不同功能所发射的信号的顺序 &#xff08;二&#xff09;两种信号 &#xff08;三&#xff09;调制和编码 &#xff08…...

常用排序算法

目录 直接插入排序 希尔排序 ​编辑 选择排序 堆排序 冒泡排序 快速排序 hoare版 挖坑法 前后指针法 非递归 归并排序 非递归 计数排序 直接插入排序 直接插入排序跟依次模扑克牌一样&#xff0c;将最后一张牌依次与前面的牌比较&#xff0c;最后将牌插入到指定位…...

MGRE环境下的OSPF

实验拓扑 需求 1 R6为ISP只能配置IP地址&#xff0c;R1-R5的环回为私有网段 2 R1/4/5为全连的MGRE结构&#xff0c;R1/2/3为星型的拓扑结构&#xff0c;R1为中心站点 3 所有私有网段可以互相通讯&#xff0c;私有网段使用OSPF完成。 IP规划 配置IP R1 # interface GigabitEt…...

【计算机毕设】微信小程序案例-学生签到系统

前言&#xff1a;我是IT源码社&#xff0c;从事计算机开发行业数年&#xff0c;专注Java领域&#xff0c;专业提供程序设计开发、源码分享、技术指导讲解、定制和毕业设计服务 &#x1f449;IT源码社-SpringBoot优质案例推荐&#x1f448; &#x1f449;IT源码社-小程序优质案例…...

【数据分析】上市公司半年报数据分析

前言 前文介绍过使用网络技术获取上市公司半年报数据的方法&#xff0c;本文将对获取到的数据进行简要的数据分析。 获取数据的代码介绍在下面的两篇文章中 【java爬虫】使用selenium获取某交易所公司半年报数据-CSDN博客 【java爬虫】公司半年报数据展示-CSDN博客 全量数…...

【C++初阶】类和对象——操作符重载const成员函数取地址重载日期类的实现

个人主页点击直达&#xff1a;小白不是程序媛 C系列专栏&#xff1a;C头疼记 目录 前言&#xff1a; 运算符重载 运算符重载 赋值运算符重载 前置和后置重载 const成员 取地址及const取地址操作符重载 使用函数操作符重载完成日期类的实现 前言&#xff1a; 上篇文…...

JAVA中的垃圾回收器(2)

一)G1垃圾回收器: 垃圾收集器迭代停顿时间越少越好&#xff0c;但是垃圾回收的总时间会增多&#xff0c;默认暂停时间默认是200ms 一)垃圾收集器介绍 1)G1垃圾回收器是一款面向服务器的垃圾收集器&#xff0c;主要针对的是配备多颗处理器以及大容量内存的机器&#xff0c;以极高…...

mac 安装homebrew ,golang

mac 安装homebrew ,golang 安装homebrew安装golang选择 apple arm 版本安装配置环境变量 安装homebrew /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"回车执行指令后&#xff0c;根据提示操作。具体包括以下提示操作&am…...

李沐——论文阅读——VIT(VIsionTransformer)

一、终极结论&#xff1a; 如果在足够多的数据上面去做预训练&#xff0c;那么&#xff0c;我们也可以不用 卷积神经网络&#xff0c;而是直接用 自然语言处理那边搬过来的 Transformer&#xff0c;也能够把视觉问题解决的很好 &#xff08;tips&#xff1a;paperswithcode.co…...

uniapp表单验证

以下是一个简单的uniapp表单验证示例&#xff1a; <template><view class"uni-form"><view class"uni-form-item"><view class"uni-form-label">用户名</view><input type"text" v-model"user…...

Crawler4j实例爬取爱奇艺热播剧案例

前言 热播剧数据在戏剧娱乐产业中扮演着着名的角色。热了解播剧的观众喜好和趋势&#xff0c;对于制作方和广告商来说都具有重要的参考价值。然而&#xff0c;手动收集和整理这些数据是在本文中&#xff0c;我们将介绍如何利用 Python 爬虫技术和 Crawler4j 实例来自动化爬取爱…...

uniapp项目APP端安卓ios权限检测教程

导语:在 APP 的日常开发过程中,权限检测与授权是不可避免的一项重要的功能,下面就简单介绍一下如何检测和授权的方法。 目录 原理方法实战原理 此授权方法主要是依托于 HTML5 产业联盟的HTML5+规范实现的。 HTML5 产业联盟官网 获取当前操作系统名称 可以使用uni.getSys…...

java多进程间(父进程与子进程)通信

一般我们在java中运行其它类中的方法时&#xff0c;无论是静态调用&#xff0c;还是动态调用&#xff0c;都是在当前的进程中执行的&#xff0c;也就是说&#xff0c;只有一个java虚拟机实例在运行。而有的时候&#xff0c;我们需要通过java代码启动多个java子进程。这样做虽然…...

【从0到1设计一个网关】整合Nacos-服务注册与服务订阅的实现

文章目录 Nacos定义服务注册与订阅方法服务信息加载与配置实现将网关注册到注册中心实现服务的订阅 Nacos Nacos提供了许多强大的功能&#xff1a; 比如服务发现、健康检测。 Nacos支持基于DNS和基于RPC的服务发现。 同时Nacos提供对服务的实时的健康检查&#xff0c;阻止向不…...

【uniapp】短信验证码输入框

需求是短信验证码需要格子输入框 如图 网上找了一个案例改吧改吧 直接上代码 结构 <template><view class"verify-code"><!-- 输入框 --><input id"input" :value"code" class"input" :focus"isFocus"…...

负载均衡的综合部署练习(hproxy+keepalived和lvs-DR+keepalived+nginx+Tomcat)

一、haproxykeepalived haproxy 2台 20.0.0.21 20.0.0.22 nginx 2台 20.0.0.23 20.0.0.24 客户机 1台 20.0.0.30 这里没有haproxy不是集群的概念&#xff0c;他只是代理服务器。 访问他直接可以直接访问后端服务器 关闭防火墙 安装haproxy和环境&#xff1a; yum in…...

设计模式——策略模式(Strategy Pattern)+ Spring相关源码

文章目录 一、策略模式定义二、例子1. 菜鸟教程例子&#xff08;略有改动&#xff09;1.1 、定义。1.2、定义加法策略类1.3、定义乘法策略类1.4、创建 Context 类1.5、使用 2、JDK awt包——BufferStrategy3、Spring源码 —— InstantiatorStrategy4、Spring源码 —— Instanti…...

ORB-SLAM3算法2之开源数据集运行ORB-SLAM3生成轨迹并用evo工具评估轨迹

文章目录 0 引言1 数据和真值1.1 TUM1.2 EuRoc1.3 KITTI2 ORB-SLAM3的EuRoc示例3 ORB-SLAM3的TUM-VI示例4 ORB-SLAM3的ROS各版本示例4.1 单目4.2 单目和IMU4.3 双目4.4 双目和IMU4.5 RGB-D0 引言 ORB-SLAM3算法1 已成功编译安装ORB-SLAM3到本地,本篇目的是用TUM、EuRoc和KITT…...

Qt 序列化函数和反序列化函数

文章目录 界面学生类序列化函数反序列化函数刷新所选择的下拉表值添加 界面 学生类 // 创建学生信息类 class studentInfo { public:QString id; // 学号QString name; // 学生姓名QString age; // 学生年龄// 重写QDataStream& operator<<操作符&…...

Linux之线程池

线程池 线程池概念线程池的应用场景线程池实现原理单例模式下线程池实现STL、智能指针和线程安全其他常见的各种锁 线程池概念 线程池&#xff1a;一种线程使用模式。 线程过多会带来调度开销&#xff0c;进而影响缓存局部性和整体性能。而线程池维护着多个线程&#xff0c;等待…...

MAC安装stable diffusion

./webui.sh --precision full --no-half-vae --disable-nan-check --api Command: "/Users/xxxx/aigc/stable-diffusion-webui/venv/bin/python3" -m pip install torch2.0.1 torchvision0.15.2 Error code: 2 执行命令&#xff1a; pip install torch2.0.1 torchvi…...

FPGA_状态机工作原理

FPGA_状态机介绍和工作原理 状态机工作原理Mealy 状态机模型Moore 状态机模型状态机描述方式代码格式 总结 状态机工作原理 状态机全称是有限状态机&#xff08;Finite State Machine、FSM&#xff09;&#xff0c;是表示有限个状态以及在这些状态之间的转移和动作等行为的数学…...

【python练习】python斐波那契数列超时问题

计算斐波那契数列第n项的数字 Description计算斐波那契数列第n项的数字&#xff0c;其中f(1)f(2)1,f(n)f(n-1)f(n-2)&#xff0c;如1&#xff0c;1&#xff0c;2&#xff0c;3&#xff0c;5,......Input 正整数n(n<100)Output 一个整数f(n)Sample Input 1 8 Sample Output 1…...

SpringCloud 微服务全栈体系(五)

第七章 Feign 远程调用 先来看我们以前利用 RestTemplate 发起远程调用的代码&#xff1a; 存在下面的问题&#xff1a; 代码可读性差&#xff0c;编程体验不统一 参数复杂 URL 难以维护 Feign 是一个声明式的 http 客户端&#xff0c;官方地址&#xff1a;https://github.…...

msvcp140.dll丢失的正确解决方法

在使用电脑中我们经常会遇到一些错误提示&#xff0c;其中之一就是“msvcp140.dll丢失”。这个错误通常会导致某些应用程序无法正常运行。为了解决这个问题&#xff0c;我们需要采取一些措施来修复丢失的msvcp140.dll文件。本文将介绍6个不同的解决方法&#xff0c;帮助读者解决…...