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

文字敏感词审核实现(本地实现)

一、创建SNS服务

1.使用golang的gin作为HTTP框架监听指定端口,使用post方式进行请求

请求/回应格式为:

type CheckWordReq struct { Content string } type CheckWordRsp struct { Status pb.StatusCode }
2.gin框架方法注册路由
func (server *SnsServer) initHttpEngine() error { gin.SetMode(gin.ReleaseMode) engine := gin.New() // 第一个参数是通过的日志处理,第二个是panic engine.Use(log.Gin, gin.RecoveryWithWriter(common.GinRecoverWriter{})) group := engine.Group("/sns") group.POST("check_word", server.OnCheckWord) server.httpEngine = engine return nil }

二、SNS本地审核实现

1、本地SNS检查器的结构
//检查器实体 type WordCheckerLocal struct { trie *Trie omitRune map[rune]struct{} // 忽略字符串中的这些干扰字符 } //对Node进行管理,管理整棵树的生命周期 type Trie struct { root *Node } //代表单个文字 type Node struct { IsEnd bool //是否是检查树的终点|确认和前面字符是敏感词了 IsAllLetter bool //检查期间是否全是字母 Children map[rune]*Node //后续字符 }
2、检查方法

所有检查器实现检查方法

// HasBadWord 检查是否包含敏感词 true 包含 func (checker *WordCheckerLocal) HasBadWord(s string) pb.StatusCode { if checker.trie.Has(s, checker.omitRune) { return pb.StatusCode_StatusCode_BAD_WORD } return pb.StatusCode_StatusCode_OK } // Has 检查是否包含敏感词,返回是否找到和匹配的词 func (trie *Trie) Has(s string, omitRune map[rune]struct{}) bool { node := trie.root end := utf8.RuneCountInString(s) - 1 rs := []rune(strings.ToLower(s)) start := 0 // 记录当前匹配路径 var currentMatch []rune for i := 0; i < len(rs); i++ { r := rs[i] c, ok := node.Children[r] if !ok { if _, ok := omitRune[r]; ok { currentMatch = append(currentMatch, r) continue } node = trie.root currentMatch = []rune{} i = start start++ continue } if c.IsEnd { currentMatch = append(currentMatch, r) //log.Debug("check end", log.String("r", string(r)), log.Bool("isAllLetter", c.IsAllLetter)) if !c.IsAllLetter { log.Debug("find bad word", log.String("match word", string(currentMatch)), log.String("word", s)) return true } // 单词需要完全匹配 避免hello匹配到hell if i == end || !unicode.IsLetter(rs[i+1]) || unicode.Is(unicode.Han, rs[i+1]) { log.Debug("find bad word", log.String("word", string(currentMatch)), log.String("word", s)) return true } if _, ok := c.Children[rs[i+1]]; ok { node = c continue } node = trie.root currentMatch = []rune{} i = start start++ continue } currentMatch = append(currentMatch, r) node = c } return false }
3、提供外层方法供gin路由调用
func (server *SnsServer) OnCheckWord(c *gin.Context) { bodyBytes, err := io.ReadAll(c.Request.Body) rsp := vo.CheckWordRsp{ Status: pb.StatusCode_StatusCode_OK, } if err != nil { log.Warn("read", log.Err(err)) rsp.Status = pb.StatusCode_StatusCode_FAIL goto END } { var req vo.CheckWordReq err = util.JsonUnmarshal(bodyBytes, &req) if err != nil { log.Warn("unmarshal", log.Err(err)) rsp.Status = pb.StatusCode_StatusCode_FAIL goto END } log.Debug("check", log.String("Content", req.Content)) if status := server.wordChecker.HasBadWord(req.Content); status != pb.StatusCode_StatusCode_OK { log.Warn("wordChecker status not ok", log.Any("status", status), log.String("Content", req.Content)) rsp.Status = status goto END } } END: c.JSON(http.StatusOK, rsp) }

三、本地敏感词词库文件

http://www.jsqmd.com/news/1151650/

相关文章:

  • J-Link RTT Viewer 与 MobaXterm 对比评测:2种方案连接速度与功能实测
  • Product Hunt 每日热榜 | 2026-07-08
  • 复杂网络中的最短路径搜索算法性能分析7
  • 张家口专业的GEO企业优化企业找哪家公司
  • 2026年AI智能体软件技术演进趋势与厂商能力深度对比评测排名
  • ChinaTest闭门会:AI原生质量工程,正在重构软件测试的下一站
  • 内核模块开发:module_init 与模块机制详解
  • Bloome多AI智能体协作平台:构建高效AI团队的技术实践
  • 03 module.json5 配置文件全解:能力声明、权限申请与设备支持
  • 从分布式视角看 SFT【直接提供考试答案给学生背下来,学生只能应对背过答案的考试试卷】、RL 以及OPD(On-Policy Distillation)【学生先自己做题,老师批改,学生修改提高能力】
  • Windows下关于flutter在cmd进行version或者doctor卡死的情况
  • 盲目扫描易踩红线,一文弄懂主动渗透和被动渗透
  • AI 赋能门诊场景:核心应用与实效展示
  • 平面变压器到底跑在什么频率上?
  • 基于STM32单片机智能温控风扇系统PWM调速 人体红外 蓝牙 成品31(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_
  • Capvidia宣布发布2026 R1软件版本,以增强MBD准备就绪能力、QIF工作流以及数字主线自动化
  • OpenAI text-embedding-3-large 模型实战:构建10万条PDF文档向量知识库
  • 【计算机大数据毕业设计案例】基于 Django 的宁波五金电商线上销售营销可视化平台的设计与实现 基于时序数据统计的宁波五金电商营销热度分析系统(程序+文档+讲解+定制)
  • ChatGPT 学术写作 Prompt 工程:10个指令覆盖论文全流程,实测提升效率40%
  • Linux动态壁纸革命:告别静态桌面,拥抱沉浸式视觉体验
  • 2026 桌面AI实战!从零开发菜谱小程序:30分钟完成原本一天的工作量
  • dp 与 hdmi
  • 工业预诊:10 未来:全厂自愈系统
  • 基于睡眠脑电数据的认知流形几何特征初探——对认知统一场论的间接验证(世毫九实验室原创研究)
  • web结课大作业成果展示
  • 【计算机大数据毕业设计案例】基于 Django 的微博热门事件数据采集与分析系统的设计与实现 基于舆情挖掘的微博热点事件智能分析系统(程序+文档+讲解+定制)
  • DLSS Swapper完整指南:如何一键智能管理游戏DLSS版本
  • 【199管理类联考】写作(第一轮复习)
  • React Fiber 渲染性能优化
  • 【大数据课程设计/毕业设计】基于电商大数据的宁波五金线上营销决策辅助系统的设计与实现 基于可视化展示的宁波五金电商推广运营分析系统【附源码、数据库、万字文档】