美文网首页
Java敏感词过滤

Java敏感词过滤

作者: 田真的架构人生 | 来源:发表于2017-08-09 09:57 被阅读0次
package test.java.lang;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

/**
 * @title KeywordFilter
 * @description TODO 
 * @author 
 * @date 2014-4-17
 * @version 1.0
 */
public class KeywordFilter {
    /** 敏感词集合
     * {法={isEnd=0, 轮={isEnd=1}}, 中={isEnd=0, 国={isEnd=0, 人={isEnd=1}, 男={isEnd=0, 人={isEnd=1}}}}}
     * */
    private HashMap keysMap = new HashMap();

    /**
     * 添加敏感词
     * @param keywords
     */
    public void addKeywords(List keywords) {
        for (int i = 0; i < keywords.size(); i++) {
            String key = keywords.get(i).trim();
            HashMap nowhash = keysMap;//初始从最外层遍历
            for (int j = 0; j < key.length(); j++) {
                char word = key.charAt(j);
                Object wordMap = nowhash.get(word);
                if (wordMap != null) {
                    nowhash = (HashMap) wordMap;
                } else {
                    HashMap newWordHash = new HashMap();
                    newWordHash.put(\"isEnd\", \"0\");
                    nowhash.put(word, newWordHash);
                    nowhash = newWordHash;
                }
                if (j == key.length() - 1) {
                    nowhash.put(\"isEnd\", \"1\");
                }
            }
        }
    }

    /** 
     * 检查一个字符串从begin位置起开始是否有keyword符合,
     * 如果没有,则返回0
     * 如果有符合的keyword值,继续遍历,直至遇到isEnd = 1,返回匹配的keyword的长度, 
     */
    private int checkKeyWords(String txt, int begin) {
        HashMap nowhash = keysMap;
        int res = 0;
        for (int i = begin; i < txt.length(); i++) {
            char word = txt.charAt(i);
            Object wordMap = nowhash.get(word);//得到该字符对应的HashMap
            if (wordMap == null) {
                return 0;//如果该字符没有对应的HashMap,return 0
            }

            res++;//如果该字符对应的HashMap不为null,说明匹配到了一个字符,+1
            nowhash = (HashMap) wordMap;//将遍历的HashMap指向该字符对应的HashMap
            if (((String) nowhash.get(\"isEnd\")).equals(\"1\")) {//如果该字符为敏感词的结束字符,直接返回
                return res;
            } else {
                continue;
            }
        }
        return res;
    }

    /** 
     * 判断txt中是否有关键字 
     */
    public boolean isContentKeyWords(String txt) {
        for (int i = 0; i < txt.length(); i++) {
            int len = checkKeyWords(txt, i);
            if (len > 0) {
                return true;
            }
        }
        return false;
    }

    /** 
     * 返回txt中关键字的列表 
     */
    public List getTxtKeyWords(String txt) {
        List list = new ArrayList();
        int l = txt.length();
        for (int i = 0; i < l;) {
            int len = checkKeyWords(txt, i);
            if (len > 0) {
                String tt = txt.substring(i, i + len);
                list.add(tt);
                i += len;
            } else {
                i++;
            }
        }
        return list;
    }

    /** 
     * 初始化敏感词列表 
     * */
    public void initfiltercode() {
        List keywords = new ArrayList();
        keywords.add(\"中国人\");
        keywords.add(\"中国男人\");
        keywords.add(\"法轮\");
        this.addKeywords(keywords);
    }

    public static void main(String[] args) throws IOException {
        KeywordFilter filter = new KeywordFilter();
        filter.initfiltercode();
        String txt = \"哈哈,反倒是 法轮热舞功,中国人,\";
        boolean boo = filter.isContentKeyWords(txt);
        System.out.println(boo);
        List set = filter.getTxtKeyWords(txt);
        System.out.println(\"包含的敏感词如下:\" + set);
    }
}

相关文章

  • DFA算法以及敏感词过滤代码实现

    Java实现DFA算法实现敏感词过滤 在Java中实现敏感词过滤的关键就是DFA算法的实现。首先我们对上图进行剖析...

  • java过滤敏感词!

    课程设计做了个博客系统,为了对评论进行敏感词过滤,所以去看了下DFA 在Java中实现敏感词过滤的关键就是DFA算...

  • Java敏感词过滤

  • Java使用DFA实现敏感词过滤

    1 Java敏感词过滤 敏感词、文字过滤是一个网站必不可少的功能,如何设计一个好的、高效的过滤算法是非常有必要的。...

  • java实现敏感词过滤

    这个是很实用的功能,很多时候聊天都会有敏感词过滤。有的时候发文有敏感词发都不让发,所以说用的地方还是挺多的。然后下...

  • 阿里Java大神教你java快速过滤关键词

    java过滤关键词 敏感词、文字过滤是一个网站必不可少的功能,如何设计一个好的、高效的过滤算法是非常有必要的。前段...

  • [转载] Java实现敏感词过滤

    背景描述 敏感词、文字过滤是一个网站必不可少的功能,如何设计一个好的、高效的过滤算法是非常有必要的。前段时间我一个...

  • Java实现敏感词过滤 - DFA算法

    Java实现DFA算法进行敏感词过滤 封装工具类如下: 使用前需对敏感词库进行初始化: SensitiveWord...

  • 敏感词过滤

    一、原句处理 1.去除原句中的所有空格2.去除原句子中的所有标点符号,包含全角和半角的3.将所有的繁体中文替换成简...

  • go实现敏感词过滤

    敏感词过滤,提前将敏感词设置好,然后每次有新句子都要过滤一遍,若存在敏感词,则用*号代替,代码如下

网友评论

      本文标题:Java敏感词过滤

      本文链接:https://www.haomeiwen.com/subject/wtsfrxtx.html