2019独角兽企业重金招聘Python工程师标准>>>

敏感词过滤是我朝程序员必须具备的一种特殊技能,随着敏感词越来越多,是时候写个扩展来快速的进行敏感词检测了
使用说明

1. 安装 libdatrie
tar zxf libdatrie-0.2.4.tar.gz
cd libdatrie-0.2.4
./configure --prefix=/usr/local
make
make install

2. 安装 trie_filter 扩展
tar zxf trie_filter-1.0.0.tar.gz
cd trie_filter-1.0.0
/usr/local/php/bin/phpize

./configure  --with-php-config=/usr/local/php/bin/php-config
make
make install
记得修改你的 php.ini 文件,启用 trie_filter 扩展。extension=trie_filter.so

3. 生成词典预处理工具(dpp.c 在 trie_filter-1.0.0 里面)
gcc -o dpp dpp.c -ldatrie

4. 生成敏感词词典
首先你需要把需要检测的敏感词写入到一个文本文件中(如:minganci.txt),每行一个敏感词,然后使用上一步生成的 dpp 程序处理这个文本文件来生成词典
./dpp txt_file_path dict_file_path

(例:./dpp  /home/like/software/minganci.txt  minganci.dic

出现如下错误:

./dpp: error while loading shared libraries: libdatrie.so.1: cannot open shared object file: No such file or directory

解决方法:

#vi /etc/ld.so.conf  在里面加入:/usr/local/lib
然后运行:#/sbin/ldconfig,即解决

最后再:./dpp  /home/like/software/minganci.txt  minganci  )

5. 使用扩展
扩展接口很简单,只有两个函数:
1) trie_filter_load($path_to_dict)
用来载入词典,成功返回一个 Trie_Filter 资源句柄,失败返回 NULL
2) trie_filter_search($trie, $text)
用来检测一段文本中是否含有词典中定义的敏感词,$trie 是上一个函数返回的 Trie Filter 句柄,$text 是欲检测的文本
如果检测到敏感词则返回一个数组,数组第一个元素指出检测到的敏感词在 $text 中的偏移量,第二个元素指出该敏感词的长度(bytes)
如果没有检测到敏感词,则返回一个空数组

扩展的速度怎么样

一个字,很快!扩展的检测算法基于 Double Array Trie Tree,查找单一关键字的时间复杂度为 O(1),查找整段文本的时间复杂度为 O(n),n 为文本的长度,而且检测的速度不会因为敏感词的增加而降低。

注意事项

1. 扩展把词典和要检测的文本都当做平凡的字节流处理,因此可以无视字符集的问题。但需要注意的是词典的编码需要和检测文本的编码一致(我曾经犯过这样的错误:词典编码和文本编码不一样,生成的词典用不了),例如词典为 UTF-8 编码而你需要检测的文本为 GBK 编码,这就要求你在调用 trie_filter_search() 函数之前通过 iconv 或者 mb_xxx 函数转换一下编码
2. 目前只在 linux + php-5.2 环境下测试通过,不支持 windows,也没有支持的计划

trie_filter-1.0.0.tar

libdatrie-0.2.4.tar

转载于:https://my.oschina.net/mickelfeng/blog/133349

用于检测敏感词的 PHP 扩展相关推荐

  1. 基于PaddleOCR和ToolGood.Words测试从图片中检测敏感词

      <测试.net开源敏感词检测库ToolGood.Words>介绍了基于ToolGood.Words实现敏感词检测的基本用法,而之前学习过使用PaddleOCR测试图片文字识别,于是想结 ...

  2. vue中检测敏感词,锚点

    当发布文章的时候,标题有敏感词 则检测有敏感词的接口成功的时候,写锚点 eg: _this .$alert("检测到标题有敏感词,请修改后再发布", "提示", ...

  3. 一种基于DFA算法的敏感词检测JAVA程序片段

    本文章提供一种基于DFA算法的敏感词检测JAVA程序片段,如下: 1.构造多叉树数据结构 import org.jetbrains.annotations.NotNull;/*** 多叉树* @aut ...

  4. 敏感词过滤工具类(DFA算法匹配字典)

    直接调用方法:wordFilter package com.util;import java.io.BufferedReader; import java.io.FileNotFoundExcepti ...

  5. java过滤器敏感字的拦截_【JavaWeb】94:如何屏蔽敏感词?

    今天是刘小爱自学Java的第94天. 感谢你的观看,谢谢你. 话不多说,开始今天的学习: 一.用户评论功能 网络上很多平台都会有敏感词屏蔽,有些词语打出来会被和谐掉. 虽说现在主张言论自由,但我大中华 ...

  6. 网上发不出去的那些敏感词,是如何被屏蔽掉的?

    目录 一.用户评论功能 二.敏感词汇获取 三.过滤代码编写 最后 今天是刘小爱自学Java的第94天. 感谢你的观看,谢谢你. 话不多说,开始今天的学习: 一.用户评论功能 网络上很多平台都会有敏感词 ...

  7. 对敏感词过滤(DFA算法)的思考与理解

    对敏感词过滤的思考与理解 一.技术概述 1.这个技术是干什么用的? 2.学习这个技术的原因 3.技术的难点在哪 二.技术详述 1.流程图 2.代码 三.技术过程中遇见的问题和解决过程 四.总结 五.参 ...

  8. 基于DFA算法实现文章敏感词过滤

    最近公司要出一个论坛系统 因为最近貌似xxx查的也比较严,所以图片和文字安全一样要注意 其中文字就涉及到敏感字过滤的问题 目前大概流传两种解决办法: 1.利用分词器分词实现过滤 比如见得比较多的 IK ...

  9. DFA算法实现敏感词过滤

    写项目时,得到一个新的需求,即实现敏感词的过滤,上网查了下,有几种实现方法,采取了DFA算法,即确定的有穷自动机算法,当初学习编译原理的时候为啥没想到DFA还能这么做,看来眼界和意识还是不够,得锻炼. ...

最新文章

  1. mac安装brew(亲测有效)
  2. unmappable character for encoding UTF8
  3. ICC_lab总结——ICC_lab4:时钟树综合
  4. SpringCloud创建Eureka Client服务注册
  5. linux让新生成的文件自动加锁,Linux_实用技巧一则 Linux系统对文件进行加锁,当有多个工作线程要同时对一 - phpStudy...
  6. 520礼包 | 情感分析算法从原理到PaddlePaddle实战全解
  7. 关于Linux系统下若干易混淆目录的分析
  8. LeetCode 712. Minimum ASCII Delete Sum for Two Strings
  9. 小程序按钮调用扫一扫_他在一个小程序“按钮”上动了个手脚,生意大火,赢得美人归!...
  10. 信息技术专项习题汇总
  11. T3及报税软件报表使用无线打印机打印凭证没反应
  12. 发射功率 接收灵敏度 RF射频传输 原理 介绍 三分钟看懂 详解!
  13. 【科研人必备】各大英文期刊投稿必备搜索/文章相关推荐投稿搜索方法
  14. 硬盘出现“文件或目录损坏且无法读取”的故障,怎么解决?
  15. android OTA更新
  16. 我的世界服务器成就系统的其他成就是什么,大量的成就奖励亟待领取!《我的世界》【PC版】Hypixel服务器成就系统来啦~...
  17. 【转】Coherence Step by Step
  18. WEB:Wife_wife
  19. Kafka:Docker Compose部署Kafka集群
  20. uni App多图片上传,java后台接收

热门文章

  1. linux qtcreator输入中文,新版QT creator下解决fcitx无法输入中文问题(QTcreatorV4.1.0)...
  2. android 活动传递数据,如何在Android应用程序的“活动”之间传递数据?
  3. 类库java_Java类库和常用类库介绍
  4. ps3无线无法与服务器通信,psp上网出现无法与服务器通信(8001006F)
  5. MySQL命令梳理_MySQL操作命令梳理(2)
  6. python 整除的数组_计算和可被整除的所有子数组
  7. ORA-00907:missing right parenthesis缺少右括号
  8. mysql event使用,用MySQL的Event设置定时任务执行sql语句 | 老疯子
  9. android按钮置于顶层,如何把按键显示在最顶层窗口上(屏幕最顶上)
  10. Eclipse继承HttpServlet出现:HttpServlet cannot be resolved to a type的错误的解决方案