汉字转拼音 敏感词过滤 禁用词查找 提高程序效率另外一种思路:反向思维
2014-12-16 15:17
351 查看
汉字转拼音
敏感词过滤
禁用词查找
这些很常用的互联网需求大家出道时是怎么做的?
大家偷懒时是怎么做的?
常规算法 - 从数据库到用户提交内容去匹配:
把数据库中所有数据压到大数组中(这时数据越多,与数据库连接时间越长)根据用户提交的内容对大数组进行foreach(这时数据越多,占有服务器内存越大)
根据上述结果,进行相应的返回、处理(这时数据越多,与数据库连接时间越长)
优点:
逻辑简单,实施方便,开发成本低,人算素质要求低 缺点:
程序效率低,数据库压力大,速度慢有bug,比如数据库中禁用词是shop,但是用户提交的是bookshop,那么就会匹配到shop,形成bug
值此圣诞节来临之举,http://my.oschina.net/cart/向大家推荐一种新的反向思维解决思路:
新算法:用户提交数据分词算法 - 从用户提交内容到数据库去匹配
1.根据用户提交的信息进行分词function cutWord($str){ $temp = array(); $len = mb_strlen($str, 'utf-8'); for($i=0; $i<=$len; $i++){ for($j=$len-$i; $j>0; $j--){ $temp[] = mb_substr($str, $i, $j, 'utf-8'); } } return $temp; } $str = '管理员'; var_dump(cutWord($str));
分词后,我们得到以下数据,当然,上述算法是分割到最后一个词的
如果需要最低2个词的组合,因为1个字构不成实体意义,一般不会成为禁用词,那么可以限制最少2个字。
太长的分词,比如已经超过5个字的词,是不会发生的,那么你也可以限制最多5个字。
掌握的是思想、原理,算法可以灵活改动。
array(6) { [0]=> string(9) "管理员" [1]=> string(6) "管理" [2]=> string(3) "管" [3]=> string(6) "理员" [4]=> string(3) "理" [5]=> string(3) "员" }
2.根据上述分词结果,使用事务批量提交到Redis,或者查找到1个禁用词后,立即退出,提高效率
如果是关系型数据库,如Mysql,分词后可以拼接SQL语句形如(word字段建立了唯一索引):
where word LIKE '管' OR word LIKE '理' OR word LIKE '管理' OR ..... LIMIT 0,1;
1句基于索引且找到就停止了(LIMIT 0,1)的SQL就搞定!效率也是杠杠的!
function isDisableWord($str){ $redis = new \redis(你的IP, 你的端口); //$result = array(); //$redis->multi(); foreach($this->cutWord($str) as $v){ //$result[] = $redis->SISMEMBER('nameList', $v); if($redis->SISMEMBER('nameList', $v)){ return $v; } } //$redis->exec(); //return $result; return false; }
$name = trim('弗兰克鲁宾逊'); if(isDisableWord($name) === false){ echo '1.OK!'; }else{ echo '1.禁止词语是:'; var_dump(isDisableWord($name)); }
优点:
1.事务提交(主键索引、无大数据占有内存),一次性数据库操作数据库压力小,运行速度快缺点:
1.对开发人员素质要求较高相关文章推荐
- 使用谓词(NSPredicate)来提高集合遍历与过滤查找的效率
- 提供一种提高开发效率的思路。(IIS + wget)
- Collection -&gt; .Net集合类型大全,只要灵活运用可以节省很多开发时间和提高程序运行效率
- 提高程序项目开发效率
- c++实现查找汉字拼音首字母
- 类库------对一些字符串进行操作的类1.判断输入是否数字2.截取字符串函数3.过滤输入信息4.生成随机数5.生成验证码图片6.获取汉字第一个拼音7.半角转全角8.全角转半角
- 换一种思路:解决Ajax程序与IE7不兼容的问题
- 巧用头脑思考,提高软件运行效率-浅谈程序算法
- Collection -> .Net集合类型大全,只要灵活运用可以节省很多开发时间和提高程序运行效率
- 提高程序开发效率的文章
- 如何提高写程序的效率与减少 bug 的错误率
- 换一种思路:解决Ajax程序与IE7不兼容的问题
- 一个ASP.NET中汉字转拼音的程序
- C/C++中利用空指针(NULL),提高程序运行效率
- 一个ASP.NET中汉字转拼音的程序
- .Net集合类型大全,只要灵活运用可以节省很多开发时间和提高程序运行效率
- 提高flash程序效率得方法
- 提高Java程序内存效率
- perl work-answer程序结构大概如此,另外,查找那几个判断,你再看看,我手上没有资料,不太确定
- 利用render事件来提高程序的运行效率。