您的位置:首页 > 编程语言 > PHP开发

敏感词(DFA算法) PHP实现

2018-01-31 16:07 225 查看
PHP实现DFA算法

<?php

$obj = new DFA();
$obj->addKeyWord('王八蛋');
$obj->addKeyWord('王八羔子');
$obj->addKeyWord('香烟');
$obj->addKeyWord('狗儿子');
$obj->getHashMap();

var_dump($obj->searchKey('王八蛋'));
var_dump($obj->searchKey('王八'));

class DFA
{
private $arrHashMap = [];

public function getHashMap() {
print_r($this->arrHashMap);
}

public function addKeyWord($strWord) {
$len = mb_strlen($strWord, 'UTF-8');

// 传址
$arrHashMap = &$this->arrHashMap;
for ($i=0; $i < $len; $i++) {
$word = mb_substr($strWord, $i, 1, 'UTF-8');
// 已存在
if (isset($arrHashMap[$word])) {
if ($i == ($len - 1)) {
$arrHashMap[$word]['end'] = 1;
}
} else {
// 不存在
if ($i == ($len - 1)) {
$arrHashMap[$word] = [];
$arrHashMap[$word]['end'] = 1;
} else {
$arrHashMap[$word] = [];
$arrHashMap[$word]['end'] = 0;
}
}
// 传址
$arrHashMap = &$arrHashMap[$word];
}
}

public function searchKey($strWord) {
$len = mb_strlen($strWord, 'UTF-8');
$arrHashMap = $this->arrHashMap;
for ($i=0; $i < $len; $i++) {
$word = mb_substr($strWord, $i, 1, 'UTF-8');
if (!isset($arrHashMap[$word])) {
// reset hashmap
$arrHashMap = $this->arrHashMap;
continue;
}
if ($arrHashMap[$word]['end']) {
return true;
}
$arrHashMap = $arrHashMap[$word];
}
return false;
}
}




敏感词过滤的算法原理之DFA算法 http://www.cnblogs.com/zyguo/p/4705086.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: