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