关键词过滤扩展,用于检查一段文本中是否出现敏感词,基于Double-Array Trie 树实现
这个是libdatrie的依赖项
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
tar zxvf libiconv-1.14.tar.gz
cd libiconv-1.14
./configure
make
make install
(http://linux.thai.net/~thep/datrie/datrie.html#Download) 这个网站下不了了,所以我把文件放在我的网站,大家可以下载
wget http://www.az1314.cn/uploads/libdatrie.gz
tar zxvf libdatrie.gz
cd libdatrie-0.2.4
./configure --prefix=/usr/local/libdatrie
make
make install
由于官方trie_filter扩展对中文支持的不是很好,所以在git上找到了一个在官方扩展上面改写的扩展经过测试没有问题
由于该作者很忙(懒),没有做php7.0以上版本的兼容,所以找到一个修改兼容php7的版本,根据自己的php版本去对应的下载
php5.3~5.6 https://github.com/wulijun/php-ext-trie-filter
php7.0~7.1 https://github.com/zzjin/php-ext-trie-filter
git clone https://github.com/zzjin/php-ext-trie-filter
cd php-ext-trie-filter
phpize
./configure --with-php-config=/usr/local/php/bin/php-config --with-trie_filter=/usr/local/libdatrie
make
make install
修改php.ini,然后增加一行:extension=trie_filter.so,保存配置并重启php
命令行输入php -m 查看是否扩展加进来了
由于上面下载的源码包中并没有带生成词典的命令,所以我们用php写一个函数用于生成
<?php
function dirty_words()
{
//敏感词数组 可以录读第五部分的词库 然后生成敏感词文件
$words = array('傻逼','艹尼玛','你妈');
//创建一个空的trie tree
$tire = \trie_filter_new();
//向trie tree中添加敏感词
foreach ($words as $k => $v) {
trie_filter_store($tire, $v);
}
//生成敏感词文件
trie_filter_save($tire,'./dirty_words.dic');
//释放trie资源
trie_filter_free($tire);
}
<?php
// 加载敏感词文件
$tire = trie_filter_load('./dirty_words.dic');
//准备要过滤的文本
$content = '傻逼草拟吗 哈哈哈';
//该函数的返回值是一个数组,第一个值为脏字出现的位置,第二个值为脏字的长度,拿到返回值后,可以用substr等函数获取脏字
$res = trie_filter_search($tire, $content);
print_r(substr($content, $res[0], $res[1])); //傻逼
print_r(str_replace($content,substr($content, $res[0], $res[1]), '****'));
//在文本中查找所有的脏字
$res = trie_filter_search_all($tire, $content);
print_r($res);
//释放trie资源
trie_filter_free($tire);
转载请注明来自小文blog,本文标题:敏感词过滤-php扩展trie-filter安装使用