基于PHP實現(xiàn)敏感詞過濾功能
需求分析
既然是敏感詞過濾,那么肯定是需要有一張敏感詞的數(shù)據(jù)表的。
大概就是上面這個樣子。
思路一
剛拿到需求我的第一實現(xiàn)思路就是,當(dāng)獲取到用戶提交的評論內(nèi)容以后,把數(shù)據(jù)庫中的每一個屏蔽詞都用正則去匹配一下。如果匹配到數(shù)據(jù),那么就把匹配到的問題替換成 ** ,最后就把原文跟匹配完成的文字進(jìn)行存儲即可。大體的代碼可能是下面這個樣子。
$str = '我愛中國,我是賣qiang的,請與我聯(lián)系'; $pattern = '/賣qiang/i'; $replacement = '**'; echo preg_replace($pattern,$replacement,$str); // 輸出 我愛中國,我是**的,請與我聯(lián)系
上面的代碼是正確的,但是假如屏蔽詞的數(shù)量有幾千條,那么每一個詞都需要跟待匹配的文字匹配一遍,那就是幾千次,程序的執(zhí)行效率太差。
思路二 一次匹配多個詞
既然一次匹配一個詞效率太低,那可以嘗試一次匹配多個詞。大致修改的代碼是下面這個樣子。
$str = '我愛中國,我是賣qiang的,請與我聯(lián)系'; $pattern = '/賣qiang|與我|非法|動物|系/i'; //這里會追加很多個詞 $replacement = '**'; echo preg_replace($pattern,$replacement,$str); // 我愛中國,我是**的,請**聯(lián)**
這樣的話,幾千個屏蔽詞組成一個正則。匹配一次就可以完成字符串的替換。但是假如屏蔽詞的數(shù)量有十萬,那正則的這個變量肯定超出內(nèi)存報錯了。這種情況下就需要分組進(jìn)行處理數(shù)據(jù)了。
$str = '我愛中國,我是賣qiang的,請與我聯(lián)系'; $block_arr = ['1','2','3',...,'100000']; $sm_list = array_chunk($block_list, 1000); foreach ($sm_list as $key => $value) { $pattern = "/" . implode("|", array_column($list, 'word')) . "/i"; //這里會追加很多個詞 $replacement = '**'; $str = preg_replace($pattern,$replacement,$str); } echo $str; // 我愛中國,我是**的,請**聯(lián)**
上面的代碼中,我們將一個無比巨大的數(shù)組,以1000為單位進(jìn)行拆分。然后批量的去替換掉目標(biāo)數(shù)據(jù)中可能存在的敏感詞。這樣就完成了敏感詞的過濾功能。
優(yōu)化選項
- 敏感詞是一次查詢,數(shù)據(jù)量多的情況下每次都會很耗費資源。所以我們是需要把查詢出來的敏感詞放到redis緩存之中的。
- 敏感詞匹配中,要先匹配長的,然后采取匹配短的。sql語句的排序 ->orderRaw('LENGTH(word) desc')
到此這篇關(guān)于基于PHP實現(xiàn)敏感詞過濾功能的文章就介紹到這了,更多相關(guān)PHP敏感詞過濾內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
PHP傳輸base64數(shù)據(jù)不完整的解決方法
最近在做OCR增值稅務(wù)處理時,接口是通過圖片轉(zhuǎn)base64提交處理然后返回數(shù)據(jù)的,通過在線工具進(jìn)行測試,發(fā)現(xiàn)傳遞過去的數(shù)據(jù)可以使用,接收到的數(shù)據(jù)卻提示損壞,所以本文給大家介紹了PHP傳輸base64數(shù)據(jù)不完整的解決方法,需要的朋友可以參考下2024-05-05WordPress中獲取頁面鏈接和標(biāo)題的相關(guān)PHP函數(shù)用法解析
這篇文章主要介紹了WordPress中獲取頁面鏈接和標(biāo)題的相關(guān)PHP函數(shù)用法解析,分別為get_permalink()和wp_title()函數(shù)的使用,需要的朋友可以參考下2015-12-12PHP實現(xiàn)XML與數(shù)據(jù)格式進(jìn)行轉(zhuǎn)換類實例
這篇文章主要介紹了PHP實現(xiàn)XML與數(shù)據(jù)格式進(jìn)行轉(zhuǎn)換類,實例分析了php進(jìn)行XML格式數(shù)據(jù)的方法,具有一定參考借鑒價值,需要的朋友可以參考下2015-07-07php實現(xiàn)查詢百度google收錄情況(示例代碼)
對了貌似查google pr的東西只是file一個地址而已,如此說了就沒有什么難度了。完整代碼如下2013-08-08php中配置文件操作 如config.php文件的讀取修改等操作
對形如config.php文件的讀取,修改等操作的代碼,需要的朋友可以參考下2012-07-07