____ __ ______ ___ __ __ __ ___
/ __ \/ / / / __ \/ | / //_// |/ /
/ /_/ / /_/ / /_/ / /| | / ,< / /|_/ /
/ ____/ __ / ____/ ___ |/ /| |/ / / /
/_/ /_/ /_/_/ /_/ |_/_/ |_/_/ /_/
关键字快速查找匹配
$ git clone https://github.com/imaben/php-akm.git
$ cd php-akm
$ phpize
$ ./configure
$ make
$ sudo make install
[akm]
extension=akm.so
akm.enable=On|Off
akm.dict_dir=/home/dict说明:
akm.enable表示扩展启用或关闭akm.dict_dir用来指定关键词词典所在的文件夹
关键词匹配
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:扩展文本
关键词替换
int akm_replace(string $dict_name, string &$text, callable $callback)参数说明
-
dict_name: 字典名称,即akm.dict_dir配置所在文件夹下的字典库名称(文件名) -
text:待替换文本 -
callback:处理匹配字符串的回调,接受三个参数- string
keyword:匹配出的关键词 - int
index:关键词在文本中的位置 - string
extension:扩展文本
如回调中返回一个字符串,则把匹配到的关键词替换成返回值。如无返回值,则不做任何处理
- string
返回值
返回成功匹配的关键词个数
获取词典列表
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
测试代码:
<?php
$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