2013-07-27 2 views
0

사용자 입력에 대한 욕설을 감지하기 위해 자바에서 기본적인 욕설 필터를 사용하고 있습니다. 나는 단지 컴퓨터를 사용하여 해결하는 것이 불가능할 수도있는 모든 가능한 시나리오를 처리하려고하지는 않습니다. 그러나 컴퓨터를 다루기에 적합한 기본 시나리오는 거의 다루지 않습니다. 이 특별한 경우에는 문자 사이의 공백을 사용하여 필터를 중단하려는 사용자를 감지하려고합니다. 예 : "여보세요, 나는 여기에 단어를 사용하고 있습니다". (smurf는 여기에서 "나쁜"단어 다). 내 현재 구현에서단어들 사이의 공백 제거

이 난에 대한 입력 텍스트 확인 단어의 목록을 유지 :

public boolean containsBadWords (String text) { 

    for (String word : badWords) { 
     if (text.matches (".*\\b" + word +"\\b.*")) { 
      return (true); 
     } 
    } 

    return (false); 
} 

을하지만 내가 위에서 설명한 간격 문자 문제를 처리 할 것입니다.

누구나 자바를 사용하여 이러한 단어를 접는 방법을 알고 있으므로 기본 텍스트 매칭 알고리즘을 사용하여 처리 할 수 ​​있습니까?

+2

그래서, 당신의 질문은 무엇입니까? – drvdijk

+2

문장의 모든 공백을 제거하고 악의 부분 문자열을 검색하십시오. 그래도 오탐을 발견 할 수 있습니다. – zapl

+1

이것은 기본적인 경우처럼 보이지 않습니다 ...하지만 아마도 마음에 오는 것은 아마도 최고가 아닙니다. 각 문자가 공백인지 비교하십시오. 그럴 경우 그 문자의 위치를 ​​저장하고 그 문자가 어딘가에 있으면 문자열에서 모든 공백을 제거하고 문자열에 나쁜 단어가 들어 있는지 확인하고 그렇지 않은 경우 공백을 모두 바꾸십시오. –

답변

1

예를 들어, 정규 표현식으로 단어를 변환, 단어 이상으로 이동, "스머프"를 금지 단어 목록을 준비 -> "S의 *의 m * 유 * r에 * f를 *"

String regex = " " + word.replaceAll("(.)", "$1 *") + " "; 

시도는 찾아 그 텍스트에

boolean found = Pattern.compile(regex).matcher(text).find();