[原创] Trie树 php 实现敏感词过滤
目录 背景 简介 存储结构 PHP 其他语言 字符串分割 示例代码 php 优化 缓存字典树 常驻服务 参考文章 背景 项目中需要过滤用户发送的聊天文本, 由于敏感词有将近2W条, 如果用 str_replace 来处理会炸掉的. 网上了解了一下, 在性能要求不高的情况下, 可以自行构造 Trie树(字典树), 这就是本文的由来. 简介 Trie树是一种搜索树, 也叫字典树、单词查找树. DFA可以理解为DFA(Deterministic Finite Automaton), 即 这里借用一张图来解释Trie树的结构: Trie可以理解为确定有限状态自动机,即DFA。在Trie树中,每个节点表示一个状态,每条边表示一个字符,从根节点到叶子节点经过的边即表示一个词条。查找一个词条最多耗费的时间只受词条长度影响,因此Trie的查找性能是很高的,跟哈希算法的性能相当。 上面实际保存了 abcd abd b bcd efg hij 特点: 所有词条的公共前缀只存储一份 只需遍历一次待检测文本 查找消耗时间只跟待检测文本长度有关, 跟字典大小无关 存储结构 PHP 在PHP中, 可以很方便地使用数组来存储树形结构, 以以下敏感词字典为例: 大傻子 大傻 傻子 ↑ 内容纯粹是为了举例...游戏聊天日常屏蔽内容 则存储结构为 { "大": { "傻": { "end": true "子": {