자바 실전 의 민감 한 단어 필터

6877 단어 Java민감 어필터
가방
본 논문 의 민감 한 단어 필 터 는 SpringBoot 프로젝트 에 사용 되 기 때문에 먼저 pom.xml 파일 에서 다음 과 같은 의존 도 를 가 져 와 야 합 니 다.

<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-aop</artifactId>
</dependency>

<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-devtools</artifactId>
		<scope>runtime</scope>
</dependency>

<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-test</artifactId>
		<scope>test</scope>
</dependency>

<dependency>
		<groupId>org.apache.commons</groupId>
		<artifactId>commons-lang3</artifactId>
		<version>3.9</version>
</dependency>
민감 한 단어 파일
resources 디 렉 터 리 에 sensitive-word.txt 를 만 들 고 필터 가 필요 한 민감 한 단어 정 보 를 입력 합 니 다.
在这里插入图片描述
在这里插入图片描述
3.접두사 나무의 실현
접두사 트 리 TrieNode 는 빈 노드 를 두 노드 로 하고 각 노드 에 몇 개의 하위 노드 가 포함 되 어 있 으 며 서로 다른 노드 는 서로 다른 문 자 를 대표 합 니 다.TrieNode 는 두 부분 으로 구성 되 어 있 으 며,먼저 boolean 변수 로 이 결점 이 키워드 의 종결 점 인지 아 닌 지 를 나타 낸다.그 다음은 이 노드 의 하위 노드 집합 이다.본 고 에서 HashMap 으로 하위 노드 를 저장 하고 key 로 노드 를 대표 하 는 문 자 를 저장 하 며 유형 은 Character 이 고 value 는 TrieNode 이 며 하위 노드 를 나타 낸다.실 현 된 코드 는 다음 과 같다.

 //   
    private class TrieNode{
        //       
        private boolean isKeywordEnd = false;

        //   
        private Map<Character,TrieNode> subNodes = new HashMap<>();
		
		//isKeywordEnd get、set  
        public boolean isKeywordEnd() {
            return isKeywordEnd;
        }

        public void setKeywordEnd(boolean keywordEnd) {
            isKeywordEnd = keywordEnd;
        }

        //     
        public void addSubNode(Character c,TrieNode node){
            subNodes.put(c,node);
        }

        //     
        public TrieNode getSubNode(Character c){
            return subNodes.get(c);
        }
    }
4.민감 한 단어 필터 의 실현

@Component
public class SensitiveFilter {
    //    
    private static final String REPLACEMENT = "***";

    //   
    private TrieNode rootNode = new TrieNode();

    //bean      ,     ,     bean          
    //              ,        
    @PostConstruct
    public void init(){
        try(
                InputStream is = this.getClass().getClassLoader().getResourceAsStream("sensitive-words.txt");
                BufferedReader reader = new BufferedReader(new InputStreamReader(is));
                ){
            String keyword;
            while((keyword=reader.readLine())!=null){
                this.addKeyword(keyword);
            }
        }catch (IOException e){
            logger.error("         : " + e.getMessage());
        }
    }
    
    //            
    private void addKeyword(String keyword){
        TrieNode tempNode = rootNode;
        for (int i = 0; i <keyword.length() ; i++) {
            char c = keyword.charAt(i);
            TrieNode subNode = tempNode.getSubNode(c);
            if(subNode==null){
                //      
                subNode = new TrieNode();
                tempNode.addSubNode(c,subNode);
            }
            //     ,       
            tempNode = subNode;

            //      
            if(i==keyword.length()-1){
                tempNode.setKeywordEnd(true);
            }
        }
    }


    /**
     *      
     *
     * @param text       
     * @return       
     */
    public String filter(String text){
        if(StringUtils.isBlank(text)){
            return null;
        }
        //  1
        TrieNode tempNode = rootNode;
        //  2
        int begin = 0;
        //  3
        int position = 0;
        //  
        StringBuilder sb = new StringBuilder();
        while(position<text.length()){
            char c = text.charAt(position);
            /*
            	    
            	   :        ,       ,  ☆   
            	   :        ,            ,  ☆ ☆ 
            */
            if(isSymbol(c)){
                //   1     ,     ,       ,   2     
                if(tempNode==rootNode){
                    sb.append(c);
                    begin++;
                }
                //              ,  3      
                position++;
                continue;
            }
            //      
            tempNode = tempNode.getSubNode(c);
            if(tempNode==null){
                // begin            
                sb.append(text.charAt(begin));
                //  2   3      2      
                position = ++begin;
                //  1       
                tempNode = rootNode;
            }else if(tempNode.isKeywordEnd()){
                //     , begin~position     
                sb.append(REPLACEMENT);
                //       
                begin = ++position;
                //  1       
                tempNode = rootNode;
            }else {
                //       
                position++;
            }
        }
        //           
        sb.append(text.substring(begin));
        return sb.toString();
    }
    //       
    private boolean isSymbol(Character c){
        // 0x2E80~0x9FFF        
        return !CharUtils.isAsciiAlphanumeric(c) && (c < 0x2E80 || c > 0x9FFF);
    }
}
자바 실전 의 민감 한 단어 필터 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.자바 민감 한 단어 필터 에 관 한 더 많은 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기