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

目录

[9.4.1 什么是字典树?](#9.4.1 什么是字典树?)

[9.4.2 字典树实现及使用场景](#9.4.2 字典树实现及使用场景)

[9.4.3 今天情人节,你为啥还单身?](#9.4.3 今天情人节,你为啥还单身?)


9.4.1 什么是字典树?

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

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

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

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

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

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

9.4.2 字典树实现及使用场景

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

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_next
        trie_next = trie_next[ch]
    else:
        # 键为None时即为红色节点
        prev[ch] = {None: 0}
print(trie)

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

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_next
        trie_next = trie_next[ch]
    else:
        prev[ch] = {None: 0}
        
# text系用户在某论坛发表的一些评论
text = "我跟他妈在街上偶遇,没想到被你妹妹看到了"
length_of_text = len(text)

for index in range(length_of_text):
    pos = index
    sensitive_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}")
            break
        pos += 1

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

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

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

相关推荐
冷雨夜中漫步8 小时前
Python快速入门(6)——for/if/while语句
开发语言·经验分享·笔记·python
郝学胜-神的一滴8 小时前
深入解析Python字典的继承关系:从abc模块看设计之美
网络·数据结构·python·程序人生
百锦再9 小时前
Reactive编程入门:Project Reactor 深度指南
前端·javascript·python·react.js·django·前端框架·reactjs
李慕婉学姐9 小时前
【开题答辩过程】以《基于社交网络用户兴趣大数据分析》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
数据挖掘·数据分析
yLDeveloper10 小时前
从模型评估、梯度难题到科学初始化:一步步解析深度学习的训练问题
深度学习
喵手10 小时前
Python爬虫实战:旅游数据采集实战 - 携程&去哪儿酒店机票价格监控完整方案(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集结果csv导出·旅游数据采集·携程/去哪儿酒店机票价格监控
Coder_Boy_10 小时前
技术让开发更轻松的底层矛盾
java·大数据·数据库·人工智能·深度学习
2501_9449347310 小时前
高职大数据技术专业,CDA和Python认证优先考哪个?
大数据·开发语言·python
helloworldandy10 小时前
使用Pandas进行数据分析:从数据清洗到可视化
jvm·数据库·python
2401_8362358610 小时前
中安未来SDK15:以AI之眼,解锁企业档案的数字化基因
人工智能·科技·深度学习·ocr·生活