php实现简单的基于DFA算法的敏感词过滤
来源:互联网 发布:qq邮箱软件 编辑:程序博客网 时间:2024/06/10 23:07
最近一个学Go语言朋友,给我发了一篇文章http://blog.csdn.net/chenssy/article/details/26961957,讲的是使用DFA(即Deterministic Finite Automaton,有穷自动机)算法实现敏感词的过滤。问我能不能使用php来实现,感谢chenssy的精彩文章,下面是我仿照版本的php实现。
<?phpheader("Content-type:text/html; charset=utf-8");class MyMap{ public function get($key) { return isset($this->$key) ? $this->$key : null; } public function put($key, $value) { $this->$key = $value; }}class MyFilter{ public $map = null; public function addWordToMap($word) { $len = mb_strlen($word); if (is_null($this->map)) { $map = new MyMap(); $map->put('isEnd', 0); } else { $map = $this->map; } $tmp = $map; for ($i = 0; $i < $len; $i++) { $nowWord = mb_substr($word, $i, 1); $nowMap = $map->get($nowWord); if (!is_null($nowMap)) { $map = $nowMap; } else { $newMap = new MyMap(); $newMap->put('isEnd', 0); $map->put($nowWord, $newMap); $map = $newMap; } if ($i == ($len - 1)) { $map->put('isEnd', 1); } } $this->map = $tmp; } //仅支持最大匹配 public function searchFromMap($string) { $len = mb_strlen($string); $tmp = $this->map; $map = $this->map; $str = ''; $result = []; for ($i = 0; $i < $len; $i++) { $nowWord = mb_substr($string, $i, 1); $nowMap = $map->get($nowWord); if (!is_null($nowMap)) { $str .= $nowWord; if ($nowMap->get('isEnd')) { array_push($result, $str); $str = ''; $map = $tmp; } else { $map = $nowMap; } } else { if (!empty($str)) { $i--; } $str = ''; $map = $tmp; } } return $result; }}$example = new MyFilter();$example->addWordToMap('中国人');$example->addWordToMap('中国男人');$example->addWordToMap('女人');$result = $example->searchFromMap('我是中国人,我爱中国,中国男人是最优秀的,中国女人是最漂亮的');//var_dump($example->map);var_dump($result);
个人博客地址
github源码地址
阅读全文
0 0
- php实现简单的基于DFA算法的敏感词过滤
- 基于DFA算法实现过滤敏感词
- iOS敏感词过滤,DFA算法的OC实现
- 基于DFA实现的敏感词过滤算法及在JFinal中的应用
- 简单实现java DFA算法对敏感词过滤
- Java DFA算法实现敏感词过滤
- DFA敏感词过滤算法
- 基于DFA敏感词查询的算法简析
- 基于DFA敏感词查询的算法简析
- DFA 算法实现敏感词过滤(python 实现)
- Java实现DFA算法 实现敏感词过滤
- java实现敏感词过滤 dfa算法实现
- java敏感词过滤-使用HashMap实现DFA算法
- java敏感词过滤-使用HashMap实现DFA算法
- java敏感词过滤-使用HashMap实现DFA算法
- 高效敏感词过滤JAVA实现(DFA算法)
- java敏感词过滤-使用HashMap实现DFA算法
- Java实现DFA算法对敏感词、广告词过滤功能
- 这 12 个趋势,将引爆 2018 用户体验设计潮流
- 乂学教育、朋友印象创始人栗浩洋:这轮 AI 风潮中谁会杀死 BAT? | WISE2017新商业大会
- 外媒评2017年科技滑铁卢:亚马逊Key、HomePod、Uber纷纷上榜
- Eclipse+GitHub的安装与使用教程(亲测可用)
- c/c++实现将cef的一堆dll单独放在一个文件夹,与程序exe目录区分开
- php实现简单的基于DFA算法的敏感词过滤
- 既要会买,也要会卖——交易时机的选择
- uboot详解——cpu内部,外部和软件看门狗
- 氪星晚报 | 周鸿祎拿比特币悬赏“幕后指使人”;乐视全面从易到退出;吉利买完沃尔沃买奔驰
- 新风向文娱主题演讲:小众逆袭大众,戏精才会吸金(上) | WISE2017新商业大会
- 富途证券邬必伟:互联网券商有用户,而传统券商只有客户 | WISE2017新商业大会
- 混合高斯模型
- 用例图
- 我用「天猫汽车自动贩卖机」买了一辆车,这篇文章用来解答你所有的疑惑