게시판에 금칙어 처리를 하려고한다. 

어떤 방식이 가장 효율적인가 고민하다가 

알고리즘은 아호코라식용으로 골랐고 싱글톤으로 bean 생성 후 사용하는 방법으로 구성했다. 

10만개의 금칙어를 적용해본 결과 나름 빠른 퍼포먼스가 나오고있다. 

테스트를 위해 임의로 생성한 금칙어라 패턴이 비슷해 빠른 속도가 나왔을 수 있어 

지켜보다 나중에 개선하는 방향으로 가야겠다. 

 

WebConfig implements WebMvcConfigurer 

@Bean
public Badword badword() {
	return new Badword();
}

 

package com.me.genie.util;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.LinkedHashSet;
import java.util.Scanner;

import org.ahocorasick.trie.Trie;


public class Badword {
	public static LinkedHashSet<String> records;
	public static Trie badwordsTrie; //아호코라식용

	public Badword()  { 
		records = new LinkedHashSet<>();
		System.out.println("=================== 실행됩니다.");
		
		try (Scanner scanner = new Scanner(new File("C:\\Users\\user\\Desktop\\badword.csv"))) {
		    while (scanner.hasNextLine()) {
		    	String a = scanner.nextLine();
		        records.add(a);
		        System.out.println(a);
		    }
		    badwordsTrie = Trie.builder().ignoreCase().ignoreOverlaps().addKeywords(records).build(); //아호코라식용 초기화

		    
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	

}

 

 

Controller or Service 

if(Badword.badwordsTrie.containsMatch("홍길동1")) { 
	System.out.println("오키오키");
}

 

 

+ Recent posts