Ahocorasick keyword match

____ __ ______ ___ __ __ __ ___

/ __ \/ / / / __ \/ | / //_// |/ /

/ /_/ / /_/ / /_/ / /| | / ,< / /|_/ /

/ ____/ __ / ____/ ___ |/ /| |/ / / /

/_/ /_/ /_/_/ /_/ |_/_/ |_/_/ /_/

关键字快速查找匹配

编译安装

$ git clone https://github.com/imaben/php-akm.git

$ cd php-akm

$ phpize

$ ./configure

$ make

$ sudo make install

php.ini配置

[akm]

extension=akm.so

akm.enable=On|Off

akm.dict_dir=/home/dict

说明:

akm.enable表示扩展启用或关闭

akm.dict_dir用来指定关键词词典所在的文件夹

函数说明

akm_match

关键词匹配

array akm_match(string $dict_name, string $text)

参数说明

dict_name:字典名称,即akm.dict_dir配置所在文件夹下的字典库名称(文件名)

text:待匹配的文本

返回值

返回匹配含有keyword、offset、extension字段数组列表的二维数组,如:

[

{

"keyword" : "敏感词",

"offset": 123,

"extension": "扩展文本"

},

{

"keyword" : "敏感词2",

"offset": 1231,

"extension": "扩展文本"

}

]

说明:

keyword:敏感词

offset:敏感词所在文本中的位置

extension:扩展文本

akm_replace

关键词替换

int akm_replace(string $dict_name, string &$text, callable $callback)

参数说明

dict_name: 字典名称,即akm.dict_dir配置所在文件夹下的字典库名称(文件名)

text:待替换文本

callback:处理匹配字符串的回调,接受三个参数

string keyword:匹配出的关键词

int index:关键词在文本中的位置

string extension:扩展文本

如回调中返回一个字符串,则把匹配到的关键词替换成返回值。如无返回值,则不做任何处理

返回值

返回成功匹配的关键词个数

akm_get_dict_list

获取词典列表

array akm_get_dict_list()

返回值

返回已索引的词典名称列表

字典数据结构

关键词|扩展文本

keyword1|extension_text1

keyword2|extension_text2

keyword3|extension_text3

说明:

“|”为关键词和扩展文本之间的分割符

“|”只对首行第一个有效,例“发票|政治|敏感”,则认定发票为关键词,政治|敏感为扩展文本

如无“|”符,则整行被认为一个关键词,返回时无扩展文本

每行定义一个关键词,空行自动跳过

性能测试

PC配置:

CPU:Intel(R) Core(TM) i5-4590 CPU @ 3.30GHz

内存:4GB*3 1600MHz

硬盘:东芝Q300

操作系统:Linux 4.6.4-1-ARCH

测试代码:

$dict_name = 'dict';

$text = file_get_contents("text.txt");

$start = microtime(true);;

$result = akm_match($dict_name, $text);

$end = microtime(true);;

echo '耗时' . ($end - $start) . "毫秒\n";

echo '内存占用:' . memory_get_usage() / 1024 / 1024 . "MB\n";

关键词数量:45423条

测试文本大小:8KB

测试结果:

第一次:

耗时0.488毫秒

内存占用:0.365MB

第二次:

耗时0.491毫秒

内存占用:0.365MB

第三次:

耗时0.462毫秒

内存占用:0.365MB

aho-corasick php,GitHub - coralh/php-akm: Ahocorasick keyword match. Supports php7 and php5相关推荐

  1. TypeScript:Aho–Corasick算法实现敏感词过滤

    敏感词过滤应该是许多后端同事经常会遇到的需求,无论是评论.弹幕.文章,都需要做敏感词过滤处理来规避风险.在前端开发中,使用replace函数来替换字符串是我们的常规操作,在这之前我思考过如果用Java ...

  2. ac自动机 匹配最长前缀_Aho Corasick自动机结合DoubleArrayTrie极速多模式匹配

    本文使用Double Array Trie实现了一个性能极高的Aho Corasick自动机,应用于分词可以取得1400万字每秒,约合27MB/s的分词速度.其中词典为150万词,构建耗时1801 m ...

  3. Aho-Corasick算法

    2018-03-15 10:25:02 在计算机科学中,Aho–Corasick算法是由Alfred V. Aho和Margaret J.Corasick 发明的字符串搜索算法,用于在输入的一串字符串 ...

  4. aho-corasick php,更快的Aho-Corasick PHP实现

    在 PHP中是否有一个 Aho–Corasick的工作实现?维基百科文章中提到了一个 Aho-Corasick string matching in PHP: /* This class perfor ...

  5. 如何开始在 github 上学习东西?

    恭喜你发现了一个宝藏网站!! 先明确自己想要学什么,然后利用好Github的搜索 基础版 比较粗粒度,比如:想学习Go,那就直接检索 'go tutorial' 优先看「star高」+「更新及时」的r ...

  6. Aho-Corasick 多模式匹配算法(AC自动机) 的算法详解及具体实现

    多模式匹配 多模式匹配就是有多个模式串P1,P2,P3-,Pm,求出所有这些模式串在连续文本T1-.n中的所有可能出现的位置. 例如:求出模式集合{"nihao","ha ...

  7. github php项目,12月份GitHub上最热门的PHP项目

    原标题:12月份GitHub上最热门的PHP项目 开源最前线(ID:OpenSourceTop) 猿妹整编 链接:https://www.itcodemonkey.com/article/1913.h ...

  8. 抢答网页PHP,GitHub - zhaiwenjun/vie-to-answer: 用于小型多人的线下知识竞赛活动的在线抢答器...

    云抢答系统 用于小型多人的线下知识竞赛活动的在线抢答器,过去的一年间曾多次在厦门集美中学校园活动中使用. 使用该系统你需要一台电脑作为服务器和显示屏,然后让参与者的手机连接到这台电脑上,访问对应的地址 ...

  9. GitHub 上排名前 100 的 Android 开源库介绍

    转自:http://www.codeceo.com/article/github-top-100-android-libs.html 本项目主要对目前 GitHub 上排名前 100 的 Androi ...

最新文章

  1. iOS 模糊效果相关
  2. runtime error: invalid memory address or nil pointer dereference
  3. zone.js在bootstrap阶段对window对象里一些标准方法的注入逻辑
  4. FileZilla 安装配置参考
  5. 利用SVN的post-commit钩子实现多项目自动同步
  6. 北京最值得逛的50个地方:后海、798、簋街...
  7. Open vSwitch流表应用实战
  8. Hadoop Hive与Hbase关系 整合
  9. win10 mysql zip 安装教程_windows10+mysql8.0.11zip安装教程详解
  10. WAF Bypass数据库特性(Oracle探索篇)
  11. Win7如何硬盘安装Ubuntu实现双系统
  12. 石河子大学计算机研究生好考吗,石河子大学2020考研经验分享
  13. C# libUSBDotNet 操作USB
  14. win10系统服务器不能创建对象,win10系统Activex部件不能创建对象的详细技巧
  15. Python练手项目之微信机器人、恢复被撤回的微信消息
  16. 密码学简史(一)--- 谍战中的古典密码学
  17. win7计算机未连接网络,Win7无线网络显示未连接但可以上网的解决办法
  18. Ubuntu登录界面键盘鼠标失灵
  19. 大厂面试:一个四年多经验程序员的BAT面经(转载)
  20. 学习第1天:认识Linux系统和红帽认证

热门文章

  1. 皮一皮:当你和朋友只打算玩一盘游戏放松时...
  2. Spring Boot 2.x基础教程:快速入门
  3. 电子工程可以报考二建_电子科学与技术专业能报考二级建造师吗?
  4. mysql workbench pdm_MySQL Workbench
  5. 3rd_party/flatbuffers/tmp/flatc: No such file or directory
  6. VS2019 Android .so开发
  7. _findnext()调试中断,发生访问错误,错误定位到ntdll.dll
  8. win10 窗口无边框
  9. android操作ui线程
  10. NMS和roi pooling 实现以及加速