0%

敏感词过滤

需求

在一个非常大的文件中存在着很多敏感词,现在需要将这些敏感词全部替换为*,时间响应要求较高(几百毫秒)。

思路

要做这个事,首先需要知道哪些词是敏感的,因此需要有一个敏感词词库。
例如文本是"abcdefghi",长度为\(n\),敏感词库是{"de", "bca", "bcf"},词库长度为\(l_1\),每个词的长度为\(l_2\)

比较直接的做法:对每个敏感词,利用暴力匹配或KMP算法查找并作替换,这些单模式串匹配算法的缺点很明显,需要多次扫描文本\(O(n(l_1+l_2))\)

目前主流的做法主要是多模式串匹配算法:
1. Trie树:将敏感词库建树,用3个指针去搞,具体在这里,查询复杂度\(O(nl_2)\),建树复杂度\(O(l_1l_2)\)。 2. AC自动机:是Trie树的扩展,增加了一个fail指针,避免指针回溯,具体在这里,复杂度一般优于Trie树。 3. DFA确定有穷自动机:利用状态转移,具体在这里,时间复杂度\(O(n)\)