实现一个评论系统时,往往需要对用户评论进行过滤,如一些不文明词语等。在和谐天朝,还有一个更重要的任务,就是过滤敏感词。这对一个网站来说可是生死攸关的。
给定一些敏感词,一个非常自然的思路就是建立一个词典树,然后用这个词典来遍历评论。词典树的第一二层树节点可以考虑使用哈希表来保存子节点。对中文来说,根节点可能会有上千个子节点。其余层则可以使用链表。
解决完匹配的问题后,还可以借鉴KMP算法的思路进行优化,为每一个树节点生成一个匹配失败后跳转的节点,即失败节点。假设当前树节点匹配的关键字为key,则失败节点为:
通过广度优先的方法来为每一个树节点生成失败节点。
以上其实就是Aho-Corasick算法。