一個高效的敏感詞過濾方法(PHP)


效率對比(12688個字符,替換1次): 

  • str_replace: 0.109937906265秒
  • strtr: 0.0306839942932秒

 

替換結果對比  
  • 比如:「張三」、「張三豐」、「張三豐田」 均為違禁詞 (為何會有這樣的區分?請參見 「法X」、「法Xgong」) 
  • 原文:「我今天開着張三豐田去上班 」 
  • strtr:「我今天開着****去上班 」(四個詞均替換為了*) 
  • str_replace:「我今天開着**豐田去上班 」(僅僅替換了第一個匹配項) 
所以使用str_replace替換,是不能本質上解決問題。 


時間對比: 
關鍵詞數量:6712 (無重復)
<?php
$badword = array( '張三','張三豐','張三豐田');
?>
 
測試文件demo.php
<?php
require('badword.php');
$badword1 =array_combine($badword,array_fill(0,count($badword),'*'));
$bb = '我今天開着張三豐田上班';
$str = strtr($bb,$badword1);
echo $str;
?>


 
測試結果:我今天開着*上班
分析:strtr函數比str_replace和正則的效率高。
 
 
<?php
// 測試文件demo.php
$badword = array(
    '張三','張三豐','張三豐田'
);
// array_combine() 函數通過合並兩個數組來創建一個新數組,其中的一個數組是鍵名,另一個數組的值為鍵值。如果其中一個數組為空,或者兩個數組的元素個數不同,則該函數返回 false。
// array_fill() 函數用給定的值填充數組,返回的數組有 number 個元素,值為 value。返回的數組使用數字索引,從 start 位置開始並遞增。如果 number 為 0 或小於 0,就會出錯。
$badword1 = array_combine($badword,array_fill(0,count($badword),'*'));
 
$bb = '我今天開着張三豐田上班';
$str = strtr($bb, $badword1);
echo $str;
// 測試結果: 我今天開着*上班
// 分析: strtr函數比str_replace和正則的效率高。
?>

整理的一份敏感詞sql, 共計6500多條。 經過幾次整改,可以直接使用。

github 下載地址: https://github.com/daidailin/sensitiveWork

轉載:https://blog.csdn.net/qq_30057893/article/details/54409587


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM