一、前缀树算法:又称字典树,单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。
二、前缀树算法过滤敏感词图示
首先我们假设敏感词是abc ,bf ,be。然后根据敏感词建立一棵前缀树如图所示。然后输入待过滤的字符串,此处假设是:c b a b c b f e a。利用前缀树算法过滤敏感词,我们需要三个指针:指针a指向前缀树的根节点,指针b指向待查找字符串的第一个节点,指针c作为游标标识当前判定的字符的位置。
第一步:指针a指向根节点,指针b和指针c都指向字符c,敏感词中没有c开头的词汇,则指针b和指针c都向后移动一位指向字符b,字符c进入缓冲区。
第二步:指针a指向根节点,指针b和指针c都指向字符b,敏感词中有b开头的词汇,则移动指针a指向第二层的b节点, 指针c继续向后移动一位指向字符a,指针a没有在b节点下找到值为a的子节点,说明ba不是敏感词。 指针c回退到指向b字符,然后指针b和指针c都向后移动一位指向字符a,指针a重新指向根节点。字符b进入缓冲区。
第三步:指针a指向根节点,指针b和指针c都指向字符a,敏感词中有a开头的词汇, 则移动指针a指向第二层的a节点,指针c继续向后移动一位指向字符b,指针a发现a节点有值为b的子节点, 则继续向下移动指向第三层的b节点,指针c继续向后移动一位指向字符c,指针a发现节点b有值为c的子节点, 指针a继续向下移动指向c节点,发现c节点被标识为敏感词结束,则说明abc是一个完整的敏感词, 用"xxx"替代abc进入缓冲区。然后指针c退回到指向字符a,指针b和指针c向后移动三位指向字符b。 指针a重新指向根节点。
第四步:指针a指向根节点,指针b和指针c指向字符b,敏感词中有b开头的词汇, 则移动指针a指向第二层的b节点,指针c向后移动一位指向字符f,指针a发现b节点有值为f的子节点, 则移动指针a指向f节点,发现f节点被标识为敏感词结束,说明bf是一个完整的敏感词,用"xx"替代bf进入缓冲区。 指针a重新指向根节点,指针b和指针c指向字符e。
第五步:指针a指向根节点,指针b和指针c指向字符e, 敏感词中没有e开头的词汇,则说明字符e不是敏感词,指针b和指针c向后移动一位指向字符a,字符e进入缓冲区。
第六步:指针a指向根节点,指针b和指针c指向字符a,敏感词中有a开头的词汇, 则移动指针a指向第二层的a节点,指针c无法向后移动, 指针a没有发现a节点被标识为敏感词结束。则说明字符a不是敏感词,字符a进入缓冲区。
缓冲区中的字符串:cbxxxxxea即是过滤后的字符串。至此,前缀树算法过滤敏感词的具体步骤介绍完毕。