PHP中文关键词匹配实例代码

关键词匹配是比较常见的需求,如留言、弹幕及游戏聊天中的敏感词过滤,都需要对一段文字进行关键词匹配。提取到关键词后,再做进一步处理。 本类借助PHP高效的数组和mbstring扩展,来实现对中文关键词的匹配。主要思想是以关键词为key,构
关键词匹配是比较常见的需求,如留言、弹幕及游戏聊天中的敏感词过滤,都需要对一段文字进行关键词匹配。提取到关键词后,再做进一步处理。
本类借助PHP高效的数组和mbstring扩展,来实现对中文关键词的匹配。主要思想是以关键词为key,构建字典数组,这样便可以对每个关键词可实现常数级别的查找。
具体代码如下:
class WordMatcher {
    public $dict = [];
    public $wordMaxLen = 0;

    function __construct(){
        if(! extension_loaded('mbstring')) {
            exit('extension mbstring is not loaded');
        }
    }

    function addWord($word) {
        $len = mb_strlen($word, 'utf-8');
        $this->wordMaxLen = $len > $this->wordMaxLen ? $len : $this->wordMaxLen;
        $this->dict[$word] = 1;
    }

    function removeWord($word) {
        unset($this->dict[$word]);
    }

    function match($str, &$matched, $matchAll=false) {
        if(mb_strlen($str) < 1) {
            return;
        }

        $matchLen = 0;
        $len = $this->wordMaxLen;
        while($len>0) {
            $substr = mb_substr($str, 0, $len, 'utf-8');
            if(isset($this->dict[$substr])) {
                $matchLen = $len;
                $matched[] = $substr;
                break;
            } else {
                $len--;
            }
        }

        if(!$matchAll && $matchLen) {
            $str = mb_substr($str, $matchLen, null, 'utf-8');
        } else {
            $str = mb_substr($str, 1, null, 'utf-8');
        }

        $this->match($str, $matched, $matchAll);
    }
}

$matcher = new WordMatcher;
$matcher->addWord('PHP');
$matcher->addWord('语言');
$matcher->addWord('H');
$matcher->match('PHP是最好的语言', $matched);
本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

本文实例讲述了php中最简单的字符串匹配算法。分享给大家供大家参考。具体实现方法如下: ?php/*最简单字符串匹配算法php实现方式 T: ababcabcP: abc 0. 1. 2.ababcabc ababcabc ababcabc||| ||| |||abc abc abc(X) (X) (O) 3. 4. 5.ababcabc ababcabc ababcabc ||| ||| ||| abc abc abc
Ajax跨域请求PHP header设置,具体实例代码如下: header('Access-Control-Allow-Origin : *');header('Access-Control-Allow-Headers : Origin, X-Requested-With, Content-Type, Accept');header('Access-Control-Allow-Methods :PUT,POST,GET,DELETE,OPTIONS');//持久化sessionheader("Access
虽然php中的header()函数 下载文件不支持断点续传功能但有时我们还真需要此功能,如我们下载txt,图片文件时如果直接是个连接估计是直接打开了而不是下载了,那么我们可如何实现下载呢。 /*** 文件下载**/header("Content-type:text/html;charset=utf-8");d
PHP将HTML页面输出为word文档,具体实例代码如下: $html = include ('html文件');echo $html; ob_start(); //打开缓冲区 header("Cache-Control: public"); Header("Content-type: application/octet-stream"); Header("Accept-Ranges: bytes"); $riqi=date("Ymd"); if (strpos($_SERVER["HTTP_USER_A
phpword读取内容和样式 生成新的内容,目前有 rows cell textrun等样式,顺序不固定 可以设定,具体实例代码如下: ?phprequire 'vendor/autoload.php';use PhpOffice\PhpWord\PhpWord;use PhpOffice\PhpWord\IOFactory;use PhpOffice\PhpWord\Style\Font;use PhpOffice\PhpWord\Shared\ZipArchive;use
php实现富文本生成word文档,以下功能已被封装,目前百度到的生成的word文件打开会乱码报文件内容错误,这个解决了乱码的问题,具体php实例代码如下: /*** html内容转word文档并保存docx文件* $content 富文本内容*/ function generate_word($content){//文件名