当前位置: 首页 > 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.dtcms.com/a/356237.html

相关文章:

  • 使用Python脚本执行Git命令
  • React 状态丢失:组件 key 用错引发的渲染异常
  • Rust 安装与运行指南
  • Custom SRP - LOD and Reflections
  • 柳州市委常委、统战部部长,副市长潘展东率队首访深兰科技集团新总部,共探 AI 赋能制造大市与东盟合作新局
  • Claude Code 完整手册:从入门、配置到高级自动化
  • 【python】相机输出图片时保留时间戳数据
  • Linux学习——sqlite3
  • 179-183动画
  • IntelliJ IDEA2025+启动项目提示 Failed to instantiate SLF4J LoggerFactory
  • 零基础json入门教程(基于vscode的json配置文件)
  • 【贪心算法】day4
  • HTML 核心标签全解析:从文本排版到媒体嵌入
  • 联想打印机2268w安装
  • 根据并发和响应延迟,实现语音识别接口自动切换需求
  • IP v 6
  • Linux下的软件编程——数据库
  • 编程与数学 03-004 数据库系统概论 06_需求分析
  • 【Flask】测试平台开发,初始化管理第一个页面开发-第三篇
  • Charles打开后,Pc电脑端浏览器显示Not implemented或没有网络
  • Linux Shell 脚本基础002
  • 使用 Java 替换和修改 PDF 文本的方法
  • 命令行操作:逻辑运算符、重定向与管道
  • TensorFlow 深度学习 | 使用子类 API 实现 Wide Deep 模型
  • 20250829_编写10.1.11.213MySQL8.0异地备份传输脚本+在服务器上创建cron任务+测试成功
  • MySQL-索引(下)
  • Linux -- 进程间通信【命名管道】
  • 基于博客系统的自动化测试项目
  • 使用TensorFlow Lite Mirco 跑mirco_speech语音识别yes/no
  • DVWA靶场通关笔记-命令执行(Impossible级别)