欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于PHP實現(xiàn)敏感詞過濾功能

 更新時間:2023年10月27日 10:06:46   作者:小柳666  
后端同學(xué)在做一些社區(qū)論壇類型項目時候,可能會繞不開敏感詞的過濾這個功能,特別是在微信小程序中,如果主營類目被定義為【社交】 那么敏感詞、圖片、視頻的各種過濾功能是逃不掉的,否則是無法上線的,下面就以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)文章

最新評論