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

Python从入门到高手9.4节-基于字典树的敏感词识别算法

目录

9.4.1 什么是字典树?

9.4.2 字典树实现及使用场景

9.4.3 今天情人节,你为啥还单身?


9.4.1 什么是字典树?

字典树又称单词查找树,Trie树,是一种树形结构。字典树的三个基本性质:

(1) 根节点不包含字符,除根节点外每一个节点都只包含一个字符;

(2) 从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串;

(3) 每个节点的所有子节点包含的字符都不相同

下图所示的结构就是字典树: 

image.png

上图中的root表示根节点,红色的节点表示从根节点到该节点路径的所有字符构成一个完整的单词。比如图中的王八就是一个单词,王子文就是一个单词。王八和王子文有一个共同的前缀:王。这也是为什么使用字典树可以查找共同前缀。

9.4.2 字典树实现及使用场景

我们现在利用Python中的字典来构造这棵字典树:

"""
@author: 薯条老师
@desc: 实现字典树结构
"""names = ["王八", "王子文", "李唐"]
trie = {"root": {}}
for name in names:prev = trie_next = trie["root"]for ch in name:if ch not in trie_next:trie_next[ch] = {}prev = trie_nexttrie_next = trie_next[ch]else:# 键为None时即为红色节点prev[ch] = {None: 0}
print(trie)

字典树常用于字符串检索,以及查找字符串的公共前缀等。我们现在根据字典树结构,来写一个识别文本中的敏感词算法。Python代码如下:

"""
@author: 薯条老师
@desc: 根据字典树来识别文本中的敏感词
"""
# 定义敏感词列表,后续根据该列表来构造字典树
sensitive_words = ["他妈的", "你妹"]trie = {"root": {}}
for sensitive_word in sensitive_words:prev = trie_next = trie["root"]for ch in sensitive_word:if ch not in trie_next:trie_next[ch] = {}prev = trie_nexttrie_next = trie_next[ch]else:prev[ch] = {None: 0}# text系用户在某论坛发表的一些评论
text = "我跟他妈在街上偶遇,没想到被你妹妹看到了"
length_of_text = len(text)for index in range(length_of_text):pos = indexsensitive_word = ""trie_next = trie["root"]while text[pos] in trie_next and pos < length_of_text:sensitive_word += text[pos]trie_next = trie_next[text[pos]]if None in trie_next:print(f"发现了敏感词汇{sensitive_word}")breakpos += 1

9.4.3 今天情人节,你为啥还单身?

跟薯条老师学高级爬虫(JS逆向+安卓逆向),数据分析,数据科学,金融量化交易,以及机器学习+深度学习+大模型算法。坚持下去,你一定会成为高手。

薯条老师的学生在南方电网,林氏家居,京东,阿里等大厂。薯条老师的个人技术博客:Python神仙级入门教程-零基础学习数据分析,高级爬虫,机器学习+大模型算法。对本节教程有任何不懂的同学,亦可在评论区中进行评论。

http://www.xdnf.cn/news/1396081.html

相关文章:

  • 8月29日星期五今日早报简报微语报早读
  • 轮廓周长,面积,外接圆,外接矩形近似轮廓和模板匹配和argparse模块实现代码参数的动态配置
  • 【C++】掌握类模板:多参数实战技巧
  • 基于Net海洋生态环境保护系统的设计与实现(代码+数据库+LW)
  • MYSQL速通(2/5)
  • 小杰机器视觉(six)——模板匹配
  • UCIE Specification详解(十)
  • TypeScript: Symbol.iterator属性
  • WINTRUST!_GetMessage函数分析之CRYPT32!CryptSIPGetSignedDataMsg函数的作用是得到nt5inf.cat的信息
  • AI的“科学革命”:Karpathy吹响号角,从“经院哲学”走向“实验科学”
  • 基于STM32单片机的智能温室控制声光报警系统设计
  • Geocodify 的 API
  • CD71.【C++ Dev】二叉树的三种非递归遍历方式
  • 网络编程 反射【详解】 | Java 学习日志 | 第 15 天
  • 2025牛客暑期多校训练营4 G Ghost in the Parentheses 题解记录
  • Day17 Docker学习
  • uac播放与录制
  • 论文阅读:arixv 2025 WideSearch: Benchmarking Agentic Broad Info-Seeking
  • React Three Fiber
  • LBM——大型行为模型助力波士顿人形Atlas完成多任务灵巧操作:CLIP编码图像与语义,之后DiT去噪扩散生成动作
  • 编程速递:RAD Studio 13 即将到来的功能
  • Linux 线程调度核心要点
  • Shell 脚本基础教程
  • java序列化
  • Android系统框架知识系列(十九):Android安全架构深度剖析 - 从内核到应用的全栈防护
  • python学习打卡day48
  • “白月光”焦点何晟铭现身宁夏中宁,助力非遗与三农发展
  • 拎包入住搭建 Browser Use Agent:基于PPIO Model API +Agent 沙箱的一体化构建
  • 变量声明方式
  • linux学习-数据库