1.DFA算法
DFA算法的原理可以参考这里,简单来说就是通过Map构造出一颗敏感词树,树的每一条由根节点到叶子节点的路径构成一个敏感词,例如下图:
代码简单实现如下:
public class TextFilterUtil {
//日志
private static final Logger LOG = LoggerFactory.getLogger(TextFilterUtil.class);
//敏感词库
private static HashMap sensitiveWordMap = null;
//默认编码格式
private static final String ENCODING = "gbk";
//敏感词库的路径
private static final InputStream in = TextFilterUtil.class.getClassLoader().getResourceAsStream("sensitive/keyWords.txt");
/**
* 初始化敏感词库
*/
private static void init() {
//读取文件
Set<String> keyWords = readSensitiveWords();
//创建敏感词库
sensitiveWordMap = new HashMap<>(keyWords.size());
for (String keyWord : keyWords) {
createKeyWord(keyWord);
}
}
/**
* 构建敏感词库
*
* @param keyWord
*/
private static void createKeyWord(String keyWord) {
if (sensitiveWordMap == null) {
LOG.error("sensitiveWordMap 未初始化!");
return;
}
Ma