敏感词过滤-php扩展trie-filter安装使用

小文blog小文 2018-02-01 16:55 3313人围观

关键词过滤扩展,用于检查一段文本中是否出现敏感词,基于Double-Array Trie 树实现

一、安装libiconv

这个是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

二、安装libdatrie 

(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扩展

由于官方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写一个函数用于生成

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');
}

五、测试

// 加载敏感词文件
$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);

六 、字典库

http://vdisk.weibo.com/s/u7m7v7tUJtAIn


转载请注明来自小文blog,本文标题:敏感词过滤-php扩展trie-filter安装使用

发布评论
生活是一场戏,主角当累了,你亦可成为观众,停下脚步,歇一歇