技术开发 频道

关键字过滤算法

本故事根据现实经历改造,数据等比例缩放,并非真实数据。故事内容纯属虚构,如有雷同,纯属巧合。

[IT168 技术文档]今天的大整顿也太紧急了点,竟然在下午3点多收到信说要明天下午5点之前做好关键字过滤工作。天啊!自己假设一个小网站闹一下,虽然小打小闹,也有十几万篇文章。要是人工审核肯定要疯了——就我一个人不吃不喝不拉不撒不睡觉,连续审他个24小时,假设是15W篇,那就需要平均每秒审1.74篇。疯了……

之前也没有管这些,只好临时抱佛脚,赶紧写一个小程序对关键字做过滤。对方发了一个关键字的文本文件,根据这些文字作过滤就OK了。

OK,说干就干,这个时候再到网上找什么算法是来不及了,只好自己来做。

Version1: string[] xxxList = GetList(); foreach(Article article in GetAllArticles()) { foreach(string xxxWord in xxxList) { if (article.Text.Contains(xxxWord)) { article.NeedManualAudit = true; article.Update(); break; } } }

不管了,先运行一下,能查多少先查多少吧。再说了,我还要整理一下那个该死的关键字列表。
十分钟后一看,乖乖龙地动!平均超过一分钟才搜索完一篇文章……比亲自上阵还要糟糕!
稍微分析了一下,发现如下几个问题:
1、关键词文件内容混乱,大量出现重复的关键词,造成无谓的重复运算;
2、关键词挑选方式太垃圾了,比如南方xxx、北方xxx、西方xxx、东方xxx,其实只要有xxx就应该要标记上,更可气的是,这个关键词列表里面甚至就有xxx这个词,那么那一大堆的南方xxx都不知道有什么存在的必要;
3、关键词数量巨大,完全不重复的关键词超过2k个条目,即使提炼关键字之后,还有将近700个关键字。
搞清楚了问题所在,基本上就可以开始动手了。

Version2: string[] xxxList = GetList(); foreach(Article article in GetAllArticles()) { foreach(string xxxWord in xxxList) { if (article.Text.Contains(xxxWord)) { article.NeedManualAudit = true; article.Update(); break; } } }
0
相关文章