利用PHP擴充套件trie filter做敏感詞過濾

2021-06-19 08:00:59 字數 2564 閱讀 2245

使用說明

1. 安裝 libdatrie

tar zxf libdatrie-0.2.4.tar.gz

cd libdatrie-0.2.4

./configure --prefix=/usr/local

make

make install

2. 安裝 trie_filter 擴充套件

tar zxf trie_filter-1.0.0.tar.gz

cd trie_filter-1.0.0

/usr/local/php/bin/phpize

./configure  --with-php-config=/usr/local/php/bin/php-config

make

make install

記得修改你的 php.ini 檔案,啟用 trie_filter 擴充套件。extension=trie_filter.so

3. 生成詞典預處理工具(***.c 在 trie_filter-1.0.0 裡面)

gcc -o *** ***.c -ldatrie

4. 生成敏感詞詞典

首先你需要把需要檢測的敏感詞寫入到乙個文字檔案中(如:minganci.txt),每行乙個敏感詞,然後使用上一步生成的 *** 程式處理這個文字檔案來生成詞典

./*** txt_file_path dict_file_path     

(例:./***  /home/like/software/minganci.txt  minganci.dic

出現如下錯誤:

./***: error while loading shared libraries: libdatrie.so.1: cannot open shared object file: no such file or directory

解決方法:

#vi /etc/ld.so.conf  在裡面加入:/usr/local/lib

然後執行:#/sbin/ldconfig,即解決

最後再:./***  /home/like/software/minganci.txt  minganci  )

5. 使用擴充套件

擴充套件介面很簡單,只有兩個函式:

1) trie_filter_load($path_to_dict)

用來載入詞典,成功返回乙個 trie_filter 資源控制代碼,失敗返回 null

2) trie_filter_search($trie, $text)

用來檢測一段文字中是否含有詞典中定義的敏感詞,$trie 是上乙個函式返回的 trie filter 控制代碼,$text 是欲檢測的文字

如果檢測到敏感詞則返回乙個陣列,陣列第乙個元素指出檢測到的敏感詞在 $text 中的偏移量,第二個元素指出該敏感詞的長度(bytes)

如果沒有檢測到敏感詞,則返回乙個空陣列

擴充套件的速度怎麼樣

乙個字,很快!擴充套件的檢測演算法基於 double array trie tree,查詢單一關鍵字的時間複雜度為 o(1),查詢整段文字的時間複雜度為 o(n),n 為文字的長度,而且檢測的速度不會因為敏感詞的增加而降低。

注意事項

1. 擴充套件把詞典和要檢測的文字都當做平凡的位元組流處理,因此可以無視字符集的問題。但需要注意的是詞典的編碼需要和檢測文字的編碼一致(我曾經犯過這樣的錯誤:詞典編碼和文字編碼不一樣,生成的詞典用不了),例如詞典為 utf-8 編碼而你需要檢測的文字為 gbk 編碼,這就要求你在呼叫 trie_filter_search() 函式之前通過 iconv 或者 mb_*** 函式轉換一下編碼

2. 目前只在 linux + php-5.2 環境下測試通過,不支援 windows,也沒有支援的計畫

<?php  

/**

* trie_filter 敏感詞過濾示例

* * @author flyer0126

* @since 2013/08/26

**/

// 載入詞典,成功返回乙個 trie_filter 資源控制代碼,失敗返回 null

$file = trie_filter_load('/usr/local/src/trie_filter/mgc.dic');

var_dump($file);

$str1 = '今天利用trie_filter做敏感詞過濾示例';

$str2 = '今天利用trie_filter做過濾示例';

// 檢測文字中是否含有詞典中定義的敏感詞(假設敏感詞設定為:『敏感詞』)

$res1 = trie_filter_search($file, $str1);

$res2 = trie_filter_search($file, $str2);

echo $res1 ? '存在敏感詞' : '不存在敏感詞';

echo "

";

echo $res2 ? '存在敏感詞' : '不存在敏感詞';

/**

resource(1) of type (trie tree filter)

存在敏感詞

不存在敏感詞

**/

利用phpize安裝php擴充套件模組

cd extname 進入擴充套件模組的原始碼目錄下 usr local php bin phpize 舉例而已,具體路徑依實際情況而定 configure 根據不同的擴充套件模組,增加不同的引數 make make install 上邊的步驟將生成 extname.so檔案 修改php.ini e...

利用PHP擴充套件trie filter做敏感詞過濾

早就想研究下敏感詞過濾問題,今天有些時間,正好實踐一下。1.安裝 libdatrie tar zxf libdatrie 0.2.4.tar.gz cd libdatrie 0.2.4 configure prefix usr local make make install 2.安裝 trie fi...

php uuid 擴充套件,PHP 擴充套件

編譯安裝時候沒有啟用下面擴充套件的,可以單獨安裝 php關鍵性擴充套件安裝 www lanmps 假設 套件 安裝目錄 www lanmps php 7.0.11 假設 php 安裝目錄 1.fileinfo 擴充套件 它應用於檔案處理的改進 進入套件解壓縮後目錄 假設套件目錄為 root lanm...