php DFA算法 敏感词代码

2021-04-11 18:30:36


参考地址 herepy / dfa-filter

一个基于DFA算法的敏感词过滤插件

功能特性

  • 例用单利模式,保持整个项目实例一致

  • 导入敏感词文本采用yield生成器降低内存

  • 支持数组和文件导入两种方式添加敏感词,自定义文件导入时的敏感词分割符

  • 支持添加干扰因子来增强敏感词的识别能力

  • 自定义符号标记敏感词

  • 内置server,适用于api方式调用

  • 匹配模式模式分为最大最小两种,默认最小匹配模式

  • 检测词语是否是敏感词

  • 检测文本是否包含敏感词

  • 过滤文本中的敏感词

  • 单元测试覆盖率高

使用条件

PHP >= 5.5.0

安装说明

git方式安装:
    git clone https://github.com/herepy/dfa-filter.git     cd dfa-filter && composer install
composer方式安装
    composer require pengyu/dfa-filter
引入项目
    use Pengyu\DfaFilter\Filter;     require_once "vendor/autoload.php";     $filer=Filter::build();

如何使用:

初始化实例并设置敏感词库
$filter=Filter::build(); $filter->addSensitives(["测试","良好","通过"]); $filter->importSensitiveFile("words.txt");
添加干扰因子
$filter->addDisturbance("@"); $filter->addDisturbance(["?","%"]);
检查是否是独立的敏感词
$filter->isKey("测试呀"); $filter->isKey("测试"); $filter->isKey("@测?试");
检查是否包含敏感词
$filter->check("测试呀"); $filter->check("测试通?过了啊,感觉良?好%"); $filter->check("这次通不过了呀");
敏感词替换
$filter->filter("测试了一下,看看能不能@@通%%过了","^",Filter::DFA_MAX_MATCH); $filter->filter("简单的内容测?试,有敏感词"); $filter->filter("有很?多测@@试?的词,能?不能良%好?通??%过呢");
标记敏感词
$filter->mark("这里有一个敏感词通过,看看测@试%会不会过"); $filter->mark("这里有一个敏感词通过,看看测@试%会不会过",["<span>","</span>"],Filter::DFA_MAX_MATCH);
重置敏感词树和干扰因子
$filter->flushSensitives(); $filter->flushDisturbance();
查看当前敏感词树和干扰因子
$filter->getSensitivesTree(); $filter->getDisturbance();
启动内置server
php run.php

调用server api

curl -H "Content-Type: application/json" -X POST -d '{"action": "isKey", "data":{"word":"敏感词"} }'


  • 2021-01-12 22:15:46

    NSLog各种打印占位符

    打印CGRect : NSLog(@"%@",NSStringFromCGRect(someCGRect)); 或者CFShow(NSStringFromCGRect(someCGRect));

  • 2021-01-13 13:36:29

    shortid nodejs短id生成器

    短ID在实际运用中很广泛, 其中比较典型的运用就是短地址。 市面上肯定有不少开源的生成短ID库, 基于node.js的估计也不少。 鉴于本人已然是node.js的脑残粉(本职java开发), 很多业余项目从前端到后端都基于javascript开发, 加上npm和bower的包管理以及grunt的打包工具, 在项目开发过程中体验特别酸爽。 由于当时项目前后端都会用到短ID, 但没找到合适的库同时支持npm和bower的(可能孤陋寡闻). 因此自己乐此不疲地又造了个轮子js-shortid(夷,为什么会说又呢?!). 下面主要介绍它的实现方案, 自认为比较优雅简洁。

  • 2021-01-13 17:23:21

    CREATE TABLE 表名 AS SELECT 语句 快速复制表但是锁表

    注意Table2的主键约束,如果Table2有主键而且不为空,则 field1, field2…中必须包括主键 在执行语句的时候,MySQL是逐行加锁的(扫描一个锁一个),直至锁住所有符合条件的数据,执行完毕才释放锁。所以当业务在进行的时候,切忌使用这种方法。 在RR隔离级别下,还会加行锁和间隙锁

  • 2021-01-13 17:27:04

    Navicat配置mysql数据库用户权限

    用数据库的时候就会遇到有多个用户,分配用户权限的情况,有些用户只读,有些用户可以读写,有些用户只能操作一个或者多个数据库,如何给mysql的用户设置权限,我这里描述一下如何用navicat图形操作分配用户权限

  • 2021-01-14 06:15:04

    通过glide获取图片显示后的真正宽高

    有时候需要获取网络图片的宽高来设置图片显示的大小,很多人会直接利用Glide的加载监听去拿图片的宽高,但是这样拿到的不是图片真正的宽高,而是图片显示在ImageView后的宽高。如下:

  • 2021-01-14 09:38:57

    Chrome插件详细教程

    严格来讲,我们正在说的东西应该叫Chrome扩展(Chrome Extension),真正意义上的Chrome插件是更底层的浏览器功能扩展,可能需要对浏览器源码有一定掌握才有能力去开发。鉴于Chrome插件的叫法已经习惯,本文也全部采用这种叫法,但读者需深知本文所描述的Chrome插件实际上指的是Chrome扩展。