좋은 비속어 필터를 어떻게 구현합니까?
우리 중 상당수는 사용자 입력, 검색어 및 입력 텍스트에 욕설 또는 바람직하지 않은 언어가 포함될 수있는 상황을 처리해야합니다. 종종 이것을 걸러 내야합니다.
다양한 언어와 방언으로 욕설을 찾을 수있는 곳은 어디입니까?
좋은 목록이 포함 된 소스에 사용 가능한 API가 있습니까? 또는 일부 매개 변수를 사용하여 단순히 "그렇습니다"또는 "더럽지 않음"이라고 말하는 API입니까?
a $$, azz 또는 a55와 같이 시스템을 속이려고하는 사람들을 잡는 좋은 방법은 무엇입니까?
PHP 솔루션을 제공하는 경우 보너스 포인트. :)
편집 : 단순히 프로그래밍 문제를 피하는 답변에 대한 응답 :
예를 들어 사용자가 공개 이미지 검색을 사용하여 민감한 커뮤니티 풀에 추가되는 사진을 찾을 수있는 경우 이런 종류의 필터를 사용할 수있는 공간이 있다고 생각합니다. 그들이 "남근"을 검색 할 수 있다면, 아마도 많은 사진을 얻을 것입니다. 우리가 그 그림을 원하지 않는다면, 단어를 검색어로 막는 것이 훌륭한 문지기이지만, 확실한 방법은 아닙니다. 우선 단어 목록을 얻는 것이 진짜 질문입니다.
그래서 나는 실제로 단일 토큰을 알아내는 방법이 더럽거나 그렇지 않다는 것을 언급하고 있습니다. 나는 완전히 재미있는 "긴 목 기린"참조와 같은 감정을 막는 것을 귀찮게하지 않을 것입니다. 당신이 할 수있는 일은 없습니다. :)
외설 필터 : 나쁜 생각 또는 믿을 수 없을 정도로 나쁜 생각을 하는가?
또한, 하나는 잊을 수 없다 툰 타운의 SpeedChat의 말할 수없는 역사 : 심지어 14 세 빠르게 그것을 우회 결과는 "화이트리스트 안전한 단어"를 사용하여, "나는 당신의 무성 한 흰 토끼까지 내 목이 긴 기린도 설치하려면 "
결론 : 궁극적으로 구현하는 모든 시스템에는 인간 검토 (피어 또는 기타)를 대체 할 수있는 것은 없습니다. 드라이브 바이를 제거하기위한 기초 도구를 자유롭게 구현하십시오. 그러나 결정된 트롤의 경우 반드시 비 알고리즘 기반 접근법을 가져야합니다.
익명을 제거하고 책임 (스택 오버플로가 잘 수행하는 기능)을 도입하는 시스템도 특히 John Gabriel의 GIFT와 싸우는 데 도움이됩니다.
또한 비속어 목록을 어디서 얻을 수 있는지 물어 봤습니다. 체크 아웃 할 오픈 소스 프로젝트 중 하나는 Dansguardian 입니다. 기본 비속어 목록의 소스 코드를 확인하십시오. 프록시를 위해 다운로드 할 수 있는 추가 타사 문구 목록도 있습니다.
질문 편집에 대한 응답으로 편집하십시오 : 당신이하려는 일에 대한 설명을 주셔서 감사합니다. 이 경우 간단한 단어 필터를 사용하려는 경우 두 가지 방법이 있습니다. 하나는 검열하려는 모든 금지 문구로 단일 긴 정규 표현식을 작성하고 정규 표현식 찾기 / 바꾸기를 수행하는 것입니다. 정규식은 다음과 같습니다.
$filterRegex = "(boogers|snot|poop|shucks|argh)"
preg_match () 를 사용하여 입력 문자열에서 실행 하여 적중을 테스트합니다.
또는 preg_replace () 를 비워 두십시오.
하나의 긴 정규 표현식이 아닌 배열로 해당 함수를로드 할 수 있으며 긴 단어 목록의 경우 관리하기가 더 쉽습니다. 배열을 유연하게 사용할 수있는 방법에 대한 좋은 예 는 preg_replace () 를 참조하십시오 .
추가 PHP 프로그래밍 예제는이 페이지 에서 검열 된 단어의 중심 문자를 벗어나는 단어 필터링을위한 고급 클래스 와 PHP 예제가있는 이전 스택 오버플로 질문 을 참조하십시오 (주요한 중요한 부분은 SQL 기반의 필터링 된 단어 접근 방식-leet-speak compensator는 불필요 할 경우 생략 할 수 있습니다.
" 처음에 단어 목록을 얻는 것이 실제 질문입니다. "-이전 Dansgaurdian 링크 외에도이 편리한 .zip .zip 단어가 도움이 될 수 있습니다.
이 질문은 상당히 오래되었지만 일반적으로 발생하는 질문입니다 ...
욕설 필터에 대한 이유와 뚜렷한 필요성이 있지만 ( 여기서 Wikipedia 항목 참조 ) 매우 뚜렷한 이유로 100 % 정확하지 않은 경우가 많습니다. 상황 과 정확성 .
그것은 당신이 달성하려는 것에 달려 있습니다 (전체). 가장 기본적으로, 당신은 아마도 " 일곱 개의 단어 " 를 다루려고 할 것입니다. 그리고 어떤 것들은 ... 어떤 비즈니스는 가장 기본적인 욕설을 걸러 내야합니다 : 기본 단어, URL 또는 개인 정보 등을 맹세하지만 다른 사람은 불법 계정 이름 지정 (Xbox live가 예) 또는 그 이상을 방지해야합니다.
사용자 생성 콘텐츠에는 잠재적 욕설이 포함되어있을뿐만 아니라 다음에 대한 불쾌감을주는 참조도 포함될 수 있습니다.
- 성적인 행위
- 성적 취향
- 종교
- 민족
- 기타...
그리고 잠재적으로 여러 언어로 제공됩니다. Shutterstock은 현재까지 10 개 언어로 된 기본 단어 목록 을 개발 했지만 여전히 기본이며 '태그 지정'요구에 중점을두고 있습니다. 웹에는 여러 가지 다른 목록이 있습니다.
나는 그것이 정의 된 과학 아니에요 허용 대답에 동의하고 같은 언어가 지속적으로 발전하고 있습니다 도전 하지만 90 %의 캐치 비율이 0 %보다 하나. 그것은 당신의 목표, 달성하려는 목표, 당신이 가진 지원의 수준, 그리고 다른 유형의 욕설을 제거하는 것이 얼마나 중요한지에 달려 있습니다.
필터를 작성할 때 다음 요소와 이들이 프로젝트와 어떤 관련이 있는지 고려해야합니다.
- 단어 / 구
- 약어 (FOAD / LMFAO 등)
- 오 탐지 ( 'mishit', 'scunthorpe'및 'titsworth'와 같은 단어, 장소 및 이름)
- URL (포르노 사이트는 명백한 대상입니다)
- 개인 정보 (이메일, 주소, 전화 등-해당되는 경우)
- 언어 선택 (일반적으로 기본적으로 영어)
- 중재 (어떻게하면 사용자 생성 콘텐츠와 상호 작용할 수있는 방법 및 콘텐츠로 수행 할 수있는 작업)
욕설의 90 % 이상을 포착하는 욕설 필터를 쉽게 만들 수 있지만 절대 100 %에 도달하지는 않습니다. 불가능합니다. 100 %에 가까워 질수록 더 어려워집니다 ... 과거에 하루에 5 만 개 이상의 실시간 메시지를 처리하는 복잡한 욕설 엔진을 구축 한 후 다음과 같은 조언을 제공합니다.
기본 필터에는 다음이 포함됩니다.
- 해당 비속어 목록 작성
- 욕설 파생을 다루는 방법 개발
적당히 복잡한 파일러에는 다음과 같은 내용이 포함됩니다 (기본 필터 외에).
복잡한 필터에는 다음과 같은 여러 항목이 포함됩니다 (중간 필터 외에도).
- 허용 목록 및 차단 목록
- 문구 / 용어의 순진 베이지안 추론 필터링
- Soundex 기능 (단어가 다른 단어처럼 들리는 곳)
- 레 벤슈 테인 거리
- 줄기
- 예를 들어 또는지도가 없으면 경기가 충분히 정확하지 않은 경우 필터링 엔진이 학습 할 수 있도록 도와주는 휴먼 중재자 (자체 / 지속적인 개선 시스템)
- 아마도 어떤 형태의 AI 엔진
나는 이것에 대한 좋은 라이브러리를 모른다. 그러나 당신이 무엇을 하든지, 물건을 통과시키는 방향으로 잘못했는지 확인하십시오. "asspass"를 하위 문자열로 포함하기 때문에 "mpassell"을 사용자 이름으로 사용할 수없는 시스템을 다루었습니다. 그것은 사용자를 소외시키는 좋은 방법입니다!
저와의 면접 중에 저를 인터뷰하던 회사 CTO는 제가 Java로 작성한 단어 / 웹 게임을 시도했습니다. 전체 옥스포드 영어 사전의 단어 목록에서 가장 먼저 추측 된 단어는 무엇입니까?
물론 영어에서 가장 나쁜 단어입니다.
어쨌든, 나는 여전히 구인 제안을 받았지만, 나는 욕설 단어 목록 ( 이것과는 달리 ) 을 추적하고 모든 나쁜 단어없이 새로운 사전을 생성하는 빠른 스크립트를 작성했습니다 (목록을 보지 않아도) .
특정 경우에는 검색을 실제 단어와 비교하는 것이 단어 목록과 같은 방식으로 들리는 것 같습니다. 대체 스타일 / 문장 부호는 약간 더 많은 작업이 필요하지만 사용자가 자주 문제를 일으킬 정도로 의심 할 것입니다.
프로그래머가 조잡하고 모든 누드 발달을 파악하더라도 욕설 필터링 시스템은 절대 완벽하지 않습니다.
즉, 근본적인 문제는 현재의 기술로는 거의 다루기 어려운 언어 이해 이기 때문에 '못된 단어'목록은 다른 목록뿐만 아니라 다른 목록도 수행 할 가능성이 높습니다.
따라서 실용적인 해결책은 두 가지입니다.
- 사전을 자주 업데이트 할 준비를하십시오
- 허위 긍정 (예 : "클래식"대신 "음핵")과 허위 부정 (oops! missed one!)을 수정하기 위해 인간 편집자를 고용하십시오.
CDYNE의 욕설 필터 웹 서비스 살펴보기
공격적인 사용자 입력을 방지하는 유일한 방법은 모든 사용자 입력을 방지하는 것입니다.
사용자 입력을 허용하고 중재가 필요한 경우 휴먼 중재자를 통합하십시오.
"시스템 속임수"하위 질문과 관련하여 검색을 수행하기 전에 "불량 단어"목록과 사용자가 입력 한 텍스트를 모두 정규화하여 처리 할 수 있습니다. 예를 들어, 일련의 정규식 (또는 PHP에있는 경우 tr )을 사용하여 [z $ 5] 를 "s"로, [4 @] 를 "a"로 변환 한 다음 정규화 된 "불량 어"목록을 정규화 된 목록과 비교합니다. 본문. 지금은 실제 사례를 생각할 수 없지만 정규화는 잠재적으로 추가 오탐으로 이어질 수 있습니다.
더 큰 도전은 사람들 이 "peni s"를 차단하면서 " 펜은 칼보다 강하다 "를 인용 할 수있는 무언가를 생각해내는 것 입니다.
현지화 문제에주의하십시오. 한 언어에서 욕설이 다른 언어에서는 완벽하게 정상적인 단어 일 수 있습니다.
현재 한 가지 예 : ebay는 사전 접근 방식을 사용하여 피드백에서 "나쁜 단어"를 필터링합니다. "이것은 완벽한 거래였습니다"( "das war eine perfekte Transaktion")의 독일어 번역을 입력하려고하면 ebay는 나쁜 단어로 인해 피드백을 거부합니다.
왜? "was"에 대한 독일어 단어는 "war"이고 "war"는 "bad words"의 ebay 사전에 있기 때문입니다.
따라서 현지화 문제에주의하십시오.
Digg / Stackoverflow와 같이 사용자가 음란 한 콘텐츠를 비추천 / 표시 할 수있는 작업을 할 수 있다면 그렇게하세요.
그런 다음 "비정상적인"사용자를 검토하고 규칙을 위반하는 경우 차단하기 만하면됩니다.
나는 파티에 조금 늦었지만 이것을 읽는 사람들에게 효과가있을 수있는 해결책이 있습니다. PHP 대신 자바 스크립트에 있지만 유효한 이유가 있습니다.
전체 공개,이 플러그인을 작성했습니다 ...
어쨌든.
제가 사용한 접근 방식은 사용자가 욕설 필터링을 "선택"하도록 허용하는 것입니다. 기본적으로 욕설은 기본적으로 허용되지만 내 사용자가 읽기를 원하지 않으면 읽을 필요가 없습니다. 이는 "l33t sp3 @ k"문제에도 도움이됩니다.
이 개념은 클라이언트의 계정이 욕설 필터링을 활성화하는 경우 서버에서 삽입되는 간단한 jquery 플러그인입니다. 거기에서 욕설을 지우는 간단한 선 몇 개뿐입니다.
여기 데모 페이지
https://chaseflorell.github.io/jQuery.ProfanityFilter/demo/
<div id="foo">
ass will fail but password will not
</div>
<script>
// code:
$('#foo').profanityFilter({
customSwears: ['ass']
});
</script>
결과
*** 실패하지만 암호는 실패합니다.
하지마. 문제로 이어질뿐입니다. 욕설 필터에 대한 한 가지 명백한 개인적 경험은 내가 "몇 시간 동안 핸콕으로가는 다리를 향하고 있었다"거나 그 효과에 대해 언급했다는 이유로 IRC 채널에서 추방 / 금지 된 시간입니다.
나는이 토론에서 더 높은 HanClinto의 게시물에 동의합니다. 일반적으로 정규식을 사용하여 입력 텍스트와 일치합니다. 그리고 이것은 헛된 노력입니다. 원래 언급했듯이 "차단 된"목록에서 인터넷에서 인기있는 모든 트릭 형식을 명시 적으로 설명해야합니다.
참고로, 다른 사람들이 검열의 윤리에 대해 토론하는 동안 나는 웹에서 어떤 형식이 필요하다는 데 동의해야합니다. 어떤 사람들은 저속한 글을 올리는 것을 좋아합니다. 왜냐하면 그것은 많은 사람들에게 즉각적으로 불쾌감을 줄 수 있고 저자의 생각이 전혀 필요하지 않기 때문입니다.
아이디어에 감사드립니다.
HanClinto 규칙!
필터링하려는 나쁜 단어의 좋은 MYSQL 테이블이 있으면 (이 스레드의 링크 중 하나로 시작했습니다) 다음과 같이 할 수 있습니다.
$errors = array(); //Initialize error array (I use this with all my PHP form validations)
$SCREENNAME = mysql_real_escape_string($_POST['SCREENNAME']); //Escape the input data to prevent SQL injection when you query the profanity table.
$ProfanityCheckString = strtoupper($SCREENNAME); //Make the input string uppercase (so that 'BaDwOrD' is the same as 'BADWORD'). All your values in the profanity table will need to be UPPERCASE for this to work.
$ProfanityCheckString = preg_replace('/[_-]/','',$ProfanityCheckString); //I allow alphanumeric, underscores, and dashes...nothing else (I control this with PHP form validation). Pull out non-alphanumeric characters so 'B-A-D-W-O-R-D' shows up as 'BADWORD'.
$ProfanityCheckString = preg_replace('/1/','I',$ProfanityCheckString); //Replace common numeric representations of letters so '84DW0RD' shows up as 'BADWORD'.
$ProfanityCheckString = preg_replace('/3/','E',$ProfanityCheckString);
$ProfanityCheckString = preg_replace('/4/','A',$ProfanityCheckString);
$ProfanityCheckString = preg_replace('/5/','S',$ProfanityCheckString);
$ProfanityCheckString = preg_replace('/6/','G',$ProfanityCheckString);
$ProfanityCheckString = preg_replace('/7/','T',$ProfanityCheckString);
$ProfanityCheckString = preg_replace('/8/','B',$ProfanityCheckString);
$ProfanityCheckString = preg_replace('/0/','O',$ProfanityCheckString); //Replace ZERO's with O's (Capital letter o's).
$ProfanityCheckString = preg_replace('/Z/','S',$ProfanityCheckString); //Replace Z's with S's, another common substitution. Make sure you replace Z's with S's in your profanity database for this to work properly. Same with all the numbers too--having S3X7 in your database won't work, since this code would render that string as 'SEXY'. The profanity table should have the "rendered" version of the bad words.
$CheckProfanity = mysql_query("SELECT * FROM DATABASE.TABLE p WHERE p.WORD = '".$ProfanityCheckString."'");
if(mysql_num_rows($CheckProfanity) > 0) {$errors[] = 'Please select another Screen Name.';} //Check your profanity table for the scrubbed input. You could get real crazy using LIKE and wildcards, but I only want a simple profanity filter.
if (count($errors) > 0) {foreach($errors as $error) {$errorString .= "<span class='PHPError'>$error</span><br /><br />";} echo $errorString;} //Echo any PHP errors that come out of the validation, including any profanity flagging.
//You can also use these lines to troubleshoot.
//echo $ProfanityCheckString;
//echo "<br />";
//echo mysql_error();
//echo "<br />";
이러한 모든 교체를 수행하는 더 효율적인 방법이 있다고 확신하지만, 알아낼만큼 똑똑하지 않습니다 (비효율적이긴하지만 제대로 작동하는 것 같습니다).
사용자가 등록하고 필요에 따라 사람을 사용하여 욕설 테이블을 필터링하고 추가 할 수 있도록 허용하는 편에서 실수해야한다고 생각합니다. 그것은 모두 거짓 긍정 (나쁜 것으로 플래그 된 괜찮은 단어) 대 거짓 부정 (나쁜 단어가 통과)의 비용에 달려 있습니다. 이는 궁극적으로 필터링 전략에서 얼마나 공격적이거나 보수적인지 결정해야합니다.
또한 와일드 카드를 사용하려는 경우에는 때때로 의도 한 것보다 더 이상하게 행동 할 수 있으므로 매우주의해야합니다.
en, ar, cs, da, de, eo, es, fa, fi, fr, hi, hu, it, ja, ko, nl, no, pl, pt, ru, sv의 12 개 언어로 2200 개의 나쁜 단어를 수집했습니다. , 일, tlh, tr, zh.
MySQL 덤프, JSON, XML 또는 CSV 옵션을 사용할 수 있습니다.
https://github.com/turalus/openDB
이 SQL을 DB에 실행하고 사용자가 무언가를 입력 할 때마다 확인하는 것이 좋습니다.
솔직히, 나는 그들에게 "시스템 속임수"라는 말을 듣게하고 그 대신 그들을 금지 시켰습니다. 그러나 그것은 또한 프로그래밍을 더 간단하게 만듭니다.
내가 할 일은 다음과 같은 정규식 필터를 구현하는 것입니다. /[\s]dooby (doo?)[\s]/i
또는 다른 단어 앞에 /[\s]doob(er|ed|est)[\s]/
. 이렇게하면 완벽하게 유효한 assuaged와 같은 단어를 필터링하지 못하지만 다른 변형에 대한 지식이 필요하고 새 변형을 배우면 실제 필터를 업데이트해야합니다. 분명히 이것들은 모두 예이지만 어떻게 할 것인지 스스로 결정해야합니다.
내가 아는 모든 단어를 입력하려고하는 것이 아닙니다. 실제로 알고 싶지 않을 때도 아닙니다.
나는 주제의 무익함에 동의하지만 필터가 필요하다면 Ning의 회양목을 확인하십시오 .
Boxwood는 텍스트의 여러 단어를 빠르게 교체 할 수있는 PHP 확장입니다. 대소 문자를 구분하고 대소 문자를 구분하지 않는 일치를 지원합니다. 작동하는 텍스트는 UTF-8로 인코딩되어야합니다.
자세한 내용은이 블로그 게시물을 참조하십시오.
Boxwood를 사용하면 원하는만큼 검색어 목록을 만들 수 있습니다. 검색 및 바꾸기 알고리즘이 검색 할 단어 목록에서 더 많은 단어로 느려지지 않습니다. 모든 검색어의 트라이를 구축 한 다음 주제 텍스트를 한 번만 스캔하고 트라이의 요소를 살펴보고 텍스트의 문자와 비교하여 작동합니다. US-ASCII 및 UTF-8, 대 / 소문자 구분 또는 구분하지 않는 일치를 지원하며 영어 중심의 단어 경계 검사 논리가 있습니다.
좋은 욕설 필터를 만들려면 3 가지 주요 구성 요소가 필요하거나 적어도 내가 할 일이라고 결론을 내 렸습니다. 이들은 다음과 같습니다.
- 필터 : 블랙리스트, 사전 또는 이와 유사한 것에 대해 확인하는 백그라운드 서비스.
- 익명 계정 허용 안함
- 남용 신고
보너스로, 정확한 학대 신고자로 기여한 사람들에게 보상하고 가해자를 처벌합니다 (예 : 계정 정지).
또한 게임 후반에도 몇 가지 조사를하고 여기에서 우연히 발견했습니다. 다른 사람들이 언급했듯이 자동화 된 경우 거의 불가능에 가깝지만 설계 / 요구 사항이 일부 경우 (항상 그런 것은 아님) 인간 상호 작용을 통해 모독 적인지 여부를 검토 할 수있는 경우 ML을 고려할 수 있습니다. https://docs.microsoft.com/en-us/azure/cognitive-services/content-moderator/text-moderation-api#profanity 는 여러 가지 이유로 현재 제가 선택하는 것입니다.
- 다양한 현지화 지원
- 그들은 데이터베이스를 계속 업데이트하므로 최신 속어 또는 언어를 따라갈 필요가 없습니다 (유지 관리 문제).
- 확률이 높으면 (즉, 90 % 이상) 실용적으로 거부 할 수 있습니다.
- 욕설 일 수도 있고 아닐 수도있는 플래그를 유발하는 카테고리를 관찰 할 수 있으며, 누군가가 그것을 검토하여 그것이 모독인지 아닌지를 가르치도록 할 수 있습니다.
내 필요에 따라 다른 사용자가 사용자 이름을 볼 수있는 공공 친화적 인 상용 서비스 (OK, 비디오 게임)를 기반으로했지만 공격적인 사용자 이름을 거부하려면 욕설 필터를 거쳐야합니다. 이에 대한 슬픈 부분은 사용자 이름이 일반적으로 여러 단어가 연결되는 단일 단어 (최대 N 문자)이기 때문에 고전적인 "클 버트"문제가 발생할 가능성이 가장 높습니다. 다시 말하지만 Microsoft의인지 서비스는 "지원"을 텍스트로 표시하지 않습니다. HasProfanity = true이지만 카테고리 중 하나가 높은 확률로 플래그를 지정할 수 있습니다.
OP에서 "a $$"는 어떨까요? 필터를 통과 한 결과는 다음과 같습니다. 보시다시피 모욕적이지 않다고 판단했지만 그럴 가능성이 높으므로 권장 사항으로 플래그 지정 검토 (인간 상호 작용).
확률이 높으면 "미안 해요, 그 이름은 이미 사용되었습니다"(그렇지 않더라도)로 되돌아 가서 우리가 원하지 않는 경우 검열 방지 자 또는 무언가에 덜 불쾌감을 줄 수 있습니다. 직접 검토를 통합하거나 "귀하의 사용자 이름이 라이브 운영 부서에 통보되었습니다. 사용자 이름이 검토 및 승인 될 때까지 기다리거나 다른 사용자 이름을 선택할 수 있습니다."를 반환합니다. 또는 무엇이든...
그건 그렇고,이 서비스의 비용 / 가격은 내 목적에 비해 상당히 낮습니다 (사용자 이름이 얼마나 자주 변경됩니까?).하지만 OP의 경우 디자인에 더 많은 쿼리가 필요할 수 있으며 지불 / 구독에 이상적이지 않을 수 있습니다 ML 서비스 또는 사람이 검토 / 상호 작용할 수 없습니다. 그것은 모두 디자인에 달려 있습니다 ... 그러나 디자인이 법안에 맞다면 아마도 이것은 OP의 해결책이 될 수 있습니다.
관심이 있다면 나중에 댓글에 단점을 나열 할 수 있습니다.
하지마.
때문에:
- Clbuttic
- 욕설은 OMG 악이 아닙니다
- 욕설은 효과적으로 정의 할 수 없습니다.
- 대부분의 사람들은 욕설로부터 "보호받는"것을 좋아하지 않을 것입니다.
편집 : "검열이 잘못되었습니다"라고 말한 댓글 작성자에 동의하지만이 답변의 본질은 아닙니다.
욕설 필터는 나쁜 생각입니다. 그 이유는 모든 욕설을 잡을 수 없기 때문입니다. 시도하면 위양성이 나타납니다.
단어 잡기
F-Word를 잡으려고한다고 가정 해 봅시다. 쉽죠? 어디 한번 보자.
문자열을 반복하여 "fuck"을 찾을 수 있습니다. 불행히도 사람들은 요즘 필터를 속입니다. 욕설 필터는 "fuk"를 선택하지 않았습니다.
단어의 여러 철자와 변형을 확인하려고 할 수 있지만 코드 성능이 저하됩니다. F-Word를 잡으려면 "fuc", "Fuc", "fuk", "Fuk", "F ***"등을 찾아야합니다. 그리고 목록은 계속됩니다.
무죄 회피
좋습니다. 대소 문자를 구분하지 않고 공백을 무시하여 "F u C k"를 포착하는 것은 어떻습니까? 좋은 생각처럼 들리 겠지만 누군가 "FUCK"로 욕설 필터를 우회 할 수 있습니다.
구두점을 무시합니다.
" Hell o, there!" 와 같은 문장이기 때문에 이제 그것은 진짜 문제 입니다. "지옥", "Wh ass up?" "엉덩이"로 선택합니다.
그리고 필터에서 제외해야하는 단어가 많이 있습니다. 예를 들어 " 속임수 "와 같이 " 가슴 "이 있기 때문입니다.
사람들은 "Frack"과 같은 대체 단어를 사용할 수도 있습니다. 그것도 막아? "penis"의 "pen is"는 어떻습니까? 프로그램에는 문자열이 좋은지 나쁜지 알 수있는 인공 지능이 없습니다.
욕설 필터를 사용하지 마십시오. 그들은 개발하기 어렵고 크롤링만큼 느립니다.
참고URL : https://stackoverflow.com/questions/273516/how-do-you-implement-a-good-profanity-filter
'Programing' 카테고리의 다른 글
varargs 메서드 매개 변수에 ArrayList를 전달하는 방법은 무엇입니까? (0) | 2020.05.09 |
---|---|
UIView에 Perspective 변환을 어떻게 적용합니까? (0) | 2020.05.09 |
GMail, Yahoo 또는 Hotmail을 사용하여 Java 애플리케이션으로 이메일을 보내려면 어떻게해야합니까? (0) | 2020.05.09 |
Linq에서 int를 문자열로 변환하는 데 문제가 있습니다. (0) | 2020.05.09 |
Android Studio에서 경고 화면 옵션은 어디에 있습니까? (0) | 2020.05.09 |