문제

우리 중 다수는 사용자 입력, 검색 쿼리 및 입력 텍스트에 욕설이나 바람직하지 않은 언어가 포함될 수 있는 상황을 처리해야 합니다.종종 이를 필터링해야 합니다.

다양한 언어와 방언으로 된 좋은 욕설 목록을 어디서 찾을 수 있나요?

좋은 목록이 포함된 소스에 사용할 수 있는 API가 있나요?아니면 일부 매개변수를 사용하여 단순히 "예, 이건 깨끗합니다" 또는 "아니요, 이건 더러워요"라고 말하는 API일까요?

a$$, azz 또는 a55와 같이 시스템을 속이려는 사람들을 잡는 좋은 방법은 무엇입니까?

PHP용 솔루션을 제공하는 경우 보너스 포인트를 얻을 수 있습니다.:)

편집하다:단순히 프로그래밍 문제를 피하라는 답변에 대한 응답:

예를 들어 사용자가 공개 이미지 검색을 사용하여 민감한 커뮤니티 풀에 추가된 사진을 찾을 수 있는 경우 이러한 종류의 필터를 사용할 수 있는 장소가 있다고 생각합니다."음경"을 검색할 수 있다면 아마도 많은 사진을 얻게 될 것입니다.그 사진을 원하지 않는다면 해당 단어를 검색어로 사용하지 않는 것이 좋은 문지기이지만 확실한 방법은 아닙니다.우선 단어 목록을 얻는 것이 진짜 질문입니다.

따라서 저는 단일 토큰이 더러운지 여부를 파악한 다음 간단히 허용하지 않는 방법을 언급하고 있습니다.나는 완전히 재미있는 "목이 긴 기린" 언급과 같은 감정을 막으려고 애쓰지 않습니다.거기서 당신이 할 수 있는 일은 아무것도 없습니다.:)

도움이 되었습니까?

해결책

외설 필터 : 나쁜 생각, 또는 믿을 수 없을 정도로 angicing 나쁜 생각?

또한 잊을 수 없습니다 툰 타운의 스피드 캣의 전례없는 역사, "안전한 화이트리스트"를 사용하더라도 14 살짜리 아이는 다음과 같이 신속하게 우회했습니다."나는 긴 목 기린을 푹신한 흰색 토끼를 붙잡고 싶다."

결론 : 궁극적으로, 당신이 구현하는 모든 시스템의 경우, 인간 검토를위한 대체물은 전혀 없습니다 (동료 또는 기타). 드라이브 바이를 제거하기 위해 기초 도구를 구현하십시오. 그러나 결정된 트롤의 경우 절대적으로 비 완화 기반 접근 방식이 있어야합니다.

익명 성을 제거하고 책임을 소개하는 시스템 (스택 오버플로가 잘 작동하는 것)도 특히 전투를 돕기 위해 도움이됩니다. 존 가브리엘의 선물

당신은 또한 당신이 시작하기 위해 욕설 목록을 얻을 수있는 곳을 물었습니다. 확인할 오픈 소스 프로젝트 중 하나는 Dansguardian - 기본 수소 목록에 대한 소스 코드를 확인하십시오. 추가 제 3 자도 있습니다 문구 목록 유용한 수집 지점 일 수있는 프록시를 위해 다운로드 할 수 있습니다.

질문 편집에 응답하여 편집 : 당신이하려는 일에 대한 설명에 감사드립니다. 이 경우 간단한 단어 필터를 수행하려는 경우 두 가지 방법이 있습니다. 하나는 검열하려는 모든 금지 된 문구로 단일 긴 regexp를 만드는 것입니다. a regex와 같은 :

$filterRegex = "(boogers|snot|poop|shucks|argh)"

입력 문자열에서 실행하십시오 preg_match () 타격에 대한 도매 테스트를 위해

또는 preg_replace () 그들을 비워 둘 것입니다.

또한 단일 긴 정규식이 아닌 배열로 해당 함수를로드 할 수 있으며 긴 단어 목록의 경우 더 관리하기 쉽습니다. 참조 preg_replace () 어레이를 어떻게 유연하게 사용할 수 있는지에 대한 좋은 예를 보려면.

추가 PHP 프로그래밍 예는이 페이지를 참조하십시오. 다소 고급 일반 클래스 그 단어를 필터링하려면 *'는 검열 된 단어에서 중앙 문자를 꺼내고 있습니다. 이전 스택 오버플로 질문 또한 PHP 예제가 있습니다 (SQL 기반 필터링 된 단어 접근법이 있습니다. 불필요한 경우 Leet-Speak 보상기를 분배 할 수 있습니다).

당신은 또한 다음과 같이 덧붙였습니다. "처음에 단어 목록을 얻는 것이 실제 질문입니다." - 이전 Dansgaurdian 링크 외에도 이 편리한 .zip 도움이 될 458 단어 중.

다른 팁

이 질문이 상당히 오래되었음을 알고 있지만 일반적으로 발생하는 질문입니다 ...

욕설 필터에 대한 이유와 뚜렷한 요구가 모두 있습니다 ( Wikipedia 항목은 여기에 있습니다), 그러나 그들은 종종 매우 뚜렷한 이유로 100% 정확하지 않은 경우가 많습니다. 문맥 그리고 정확성.

그것은 당신이 달성하려는 것에 (전적으로) 달성하려고합니다. 가장 기본적으로, 아마도 당신은 아마도일곱 더러운 단어"그리고 일부 비즈니스는 가장 기본적인 욕설을 필터링해야합니다. 기본 욕설, URL 또는 개인 정보 등이 있지만 다른 사람들은 불법 계정 명명 (Xbox Live) 또는 훨씬 더 많은 것을 방지해야합니다. ..

사용자 생성 콘텐츠는 잠재적 욕설 단어 만 포함하지 않고 다음에 대한 공격적인 참조도 포함 할 수도 있습니다.

  • 성행위
  • 성적 취향
  • 종교
  • 민족성
  • 등...

잠재적으로 여러 언어로. 셔터 스톡이 개발되었습니다 기본 더러운 단어 목록 현재까지 10 개 언어 로지만 여전히 기본적이고 '태깅'요구에 따라 매우 지향적입니다. 웹에는 여러 가지 다른 목록이 있습니다.

나는 그것이 정의 된 과학이 아니며 ~처럼 언어는 지속적으로 진화합니다 도전 그러나 90% 캐치 비율이 0%보다 낫습니다. 그것은 당신의 목표, 당신이 달성하려는 것, 당신이 가진 지원 수준 및 다양한 유형의 욕설을 제거하는 것이 얼마나 중요한지에 달려 있습니다.

필터를 구축 할 때는 다음 요소와 프로젝트와 관련된 방법을 고려해야합니다.

  • 단어/문구
  • 약어 (foad/lmfao 등)
  • 거짓 긍정 ( 'Mishit', 'Scunthorpe'및 'Titsworth'와 같은 단어, 장소 및 이름))
  • URL (포르노 사이트는 명백한 대상입니다)
  • 개인 정보 (이메일, 주소, 전화 등 - 해당되는 경우)
  • 언어 선택 (일반적으로 기본적으로 영어)
  • 중재 (중재자가 사용자가 생성 된 콘텐츠와 상호 작용할 수있는 방법 및 수행 할 수있는 방법)

90%이상의 욕설을 캡처하는 욕설 필터를 쉽게 구축 할 수 있지만 100%에 도달하지 못할 것입니다. 불가능합니다. 100%에 가까워지고 싶을수록 더 어려워집니다. 과거에 하루에 500k 이상의 실시간 메시지를 다루는 복잡한 욕설 엔진을 구축 한 것은 다음과 같은 조언을 제공 할 것입니다.

기본 필터는 다음과 같습니다.

  • 적용 가능한 욕설 목록 구축
  • 욕설의 파생을 다루는 방법 개발

적당히 복잡한 파일러는 (기본 필터 외에도)와 관련됩니다.

  • 복잡한 패턴 매칭을 사용하여 확장 된 파생물을 처리합니다 (고급 Regex 사용)
  • 처리 leetspeak (L33T)
  • 처리 거짓 긍정

복잡한 필터에는 다음 중 다수가 포함됩니다 (중간 필터 외에도).

  • 화이트리스트 그리고 블랙리스트
  • 순진한 베이지안 추론 문구/용어 필터링
  • Soundex 함수 (단어가 다른 단어처럼 들리는 곳)
  • Levenshtein 거리
  • 스템 밍
  • 필터링 엔진이 예제로 배울 수 있도록 필터링 엔진을 안내하는 데 도움이되는 휴먼 중재자 또는 만족이 안내없이 충분히 정확하지 않은 곳 (자기/지속적으로 개선 시스템)
  • 아마도 어떤 형태의 AI 엔진 일 것입니다

나는 이것에 대한 좋은 라이브러리를 모르지만, 당신이 무엇을 하든지, 당신은 물건을 통과시키는 방향으로 잘못을해야합니다. "mpassell"을 사용자 이름으로 사용할 수없는 시스템을 다루었습니다. 왜냐하면 "엉덩이"를 기판으로 포함하기 때문입니다. 그것은 사용자를 소외시키는 좋은 방법입니다!

내 면접 중에, 나를 인터뷰 한 회사 CTO는 내가 Java로 쓴 단어/웹 게임을 시도했습니다. 옥스포드 영어 사전 전체의 단어 목록에서, 추측 된 첫 번째 단어는 무엇입니까?

물론 영어에서 가장 파울 한 단어.

어떻게 든, 나는 여전히 구인 제안을 받았지만 나는 욕설 단어 목록을 추적했다 ( 이것과 달리) 그리고 모든 나쁜 단어없이 새로운 사전을 생성하기 위해 빠른 스크립트를 썼습니다 (목록을 보지 않아도).

당신의 특별한 경우에, 나는 검색을 실제 단어와 비교하는 것이 그런 단어 목록을 가지고가는 길처럼 들린다 고 생각합니다. 대체 스타일/구두점에는 좀 더 많은 작업이 필요하지만 사용자가 문제가 될 정도로 충분히 사용될 것입니다.

프로그래머가 으르렁 거리고 모든 누드 개발을 유지하더라도 욕설 필터링 시스템은 결코 완벽하지 않을 것입니다.

즉, '장난 꾸러기 단어'의 목록은 기본 문제가 있기 때문에 다른 목록만큼이나 수행 될 가능성이 높습니다. 언어 이해 현재 기술에는 거의 다루기 힘든 일입니다

따라서 유일한 실용적인 솔루션은 두 가지입니다.

  1. 사전을 자주 업데이트 할 준비를하십시오
  2. 인간 편집자를 고용하여 거짓 긍정 (예 : "클래식"대신 "Clbuttic")과 거짓 부정적인 (oops! misted one!)를 수정하십시오.

공격적인 사용자 입력을 방지하는 유일한 방법은 모든 사용자 입력을 방지하는 것입니다.

사용자 입력을 허용하고 중재가 필요한 경우 인간 중재자를 통합하십시오.

"시스템 속임수" 하위 질문과 관련하여 검색을 수행하기 전에 "불량 단어" 목록과 사용자가 입력한 텍스트를 모두 정규화하여 이를 처리할 수 있습니다.예를 들어 일련의 정규식을 사용합니다(또는 tr PHP에 있는 경우) 변환 [z$5] "s"에게, [4@] "a" 등으로 변환한 다음 정규화된 "나쁜 단어" 목록을 정규화된 텍스트와 비교합니다.현재로서는 실제 사례를 생각할 수 없지만 정규화로 인해 잠재적으로 추가 오탐이 발생할 수 있습니다.

더 큰 도전은 사람들이 "The 펜은 칼보다 강하다'라고 말하면서도 '페니스'를 막는다.

현지화 문제를 조심하십시오 : 한 언어의 욕설은 다른 언어에서는 완벽하게 정상적인 단어 일 수 있습니다.

이것의 현재 예 : eBay는 사전 접근법을 사용하여 피드백에서 "나쁜 단어"를 필터링합니다. "이것은 완벽한 거래였다"( "Das War Eine Perfekte Transaktion")의 독일어 번역을 입력하려고하면 eBay는 나쁜 단어로 인해 피드백을 거부합니다.

왜요? "Was"는 "is"war "이고"War "에 대한 독일어는"나쁜 단어 "의 eBay 사전에 있기 때문입니다.

따라서 현지화 문제를 조심하십시오.

Digg/StackoverFlow와 같은 작업을 수행 할 수있는 경우 사용자가 외설적 인 콘텐츠를 다운 투표/표시 할 수있는 경우 ... 그렇게하십시오.

그런 다음 "장난 꾸러기"사용자를 검토하고 규칙을 위반하면 차단하기 만하면됩니다.

나는 파티에 조금 늦었지만 이것을 읽는 사람들에게는 효과가있는 해결책이 있습니다. PHP 대신 JavaScript에 있지만 그에 대한 유효한 이유가 있습니다.

전체 공개, 나는이 플러그인을 썼다 ...

어쨌든.

내가 가진 접근법은 사용자가 욕설 필터링에 "옵트 인"을 허용하는 것입니다. 기본적으로 욕설은 기본적으로 허용되지만 사용자가 읽기를 원하지 않으면 필요하지 않습니다. 이것은 또한 "L33T SP3@K"문제에 도움이됩니다.

개념은 간단합니다 클라이언트의 계정이 욕설 필터링을 가능하게하는 경우 서버에서 주입하는 플러그인. 거기에서 맹세를 막는 몇 가지 간단한 라인입니다.

데모 페이지는 다음과 같습니다
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>

결과

*** 실패하지만 비밀번호는 그렇지 않습니다

하지 않다. 그것은 단지 문제로 이어집니다. 내가 욕설 필터를 사용한 한 가지 clbuttic 개인 경험은 IRC 채널에서 차기/금지 된 시간입니다. "몇 시간 동안 Hancock으로 다리를 향해 가고 있거나 그 효과에 대한 무언가를 언급했습니다.

나는이 토론에서 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 />";

나는 모든 교체품을 수행하는 더 효율적인 방법이 있다고 확신하지만, 그것을 알아낼만큼 똑똑하지는 않습니다 (그리고 이것은 비효율적이지만 괜찮은 것 같습니다).

사용자가 등록 할 수 있도록 허용하고 인간을 사용하여 필터링하고 필요에 따라 욕설 테이블에 추가해야한다고 생각합니다. 비록 모든 것이 잘못된 긍정적 인 비용에 달려 있지만 (괜찮은 단어가 나쁜 것으로 표시된) 거짓 부정 (나쁜 단어가 통과)에 달려 있습니다. 그것은 궁극적으로 필터링 전략에서 얼마나 공격적이거나 보수적인지를 지배해야합니다.

와일드 카드를 사용하고 싶다면 매우 조심할 것입니다.

나는 12 개 언어로 2200 개의 나쁜 단어를 수집했다 : en, ar, cs, da, de, eo, es, fa, fi, fr, hi, hu, ja, ko, nl, no, pl, pt, ru, sv , TH, 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]/. 이를 통해 확인 된 단어는 어지럽히는 단어를 완벽하게 유효하지만 다른 변형에 대한 지식이 필요하고 새로운 필터를 학습하면 실제 필터를 업데이트해야합니다. 분명히 이것들은 모두 예이지만 직접 수행하는 방법을 결정해야합니다.

나는 실제로 알고 싶지 않을 때가 아니라 내가 아는 모든 단어를 입력하려고하지 않습니다.

나는 주제의 무익함에 동의하지만, 필터가 있어야한다면 Ning 's를 확인하십시오. 회양목:

Boxwood는 텍스트에서 여러 단어를 빠르게 교체하기위한 PHP 확장자입니다. 사례에 민감하고 사례에 민감한 매칭을 지원합니다. 작동하는 텍스트는 UTF-8으로 인코딩되어야합니다.

자세한 내용은이 블로그 게시물을 참조하십시오.

Boxwood를 사용하면 검색어 목록을 원하는만큼 길게 만들 수 있습니다. 검색 및 교체 알고리즘은 찾아야 할 단어 목록에 더 많은 단어가 느려지지 않습니다. 그것은 모든 검색어의 트리를 구축 한 다음 주제 텍스트를 한 번만 스캔하여 트리의 요소를 따라 내려 가서 텍스트의 문자와 비교합니다. 미국 ASCII 및 UTF-8, 사례에 민감하거나 무감각 한 일치를 지원하며 영어 중심의 단어 경계 검사 로직이 있습니다.

나는 좋은 욕설 필터를 만들기 위해 3 가지 주요 구성 요소가 필요하거나 적어도 그것이 내가 할 일이라고 결론 지었다. 이것들은 다음과 같습니다.

  1. 필터 : 블랙리스트, 사전 또는 그와 비슷한 것을 확인하는 배경 서비스.
  2. 익명 계정을 허용하지 않습니다
  3. 남용 신고

보너스는 정확한 학대 기자들에게 기여하고 범죄자를 처벌하는 사람들을 어떻게 보상하는 것이 될 것입니다.

게임 후반에도 몇 가지 조사를 하다가 우연히 발견했습니다.다른 사람들이 언급했듯이 자동화된 경우 거의 불가능하지만 디자인/요구 사항이 일부 경우(항상 그런 것은 아님) 인간 상호 작용을 포함하여 불경스러운지 여부를 검토하는 경우 ML을 고려할 수 있습니다. https://docs.microsoft.com/en-us/azure/cognitive-services/content-moderator/text-moderation-api#profanity 여러 가지 이유로 지금 내가 선택한 것은 다음과 같습니다.

  • 다양한 현지화 지원
  • 데이터베이스를 계속 업데이트하므로 최신 속어나 언어를 따라갈 필요가 없습니다(유지 관리 문제).
  • 확률이 높은 경우(예:90% 이상) 실용적으로 거부하면 됩니다.
  • 욕설일 수도 있고 아닐 수도 있는 플래그를 유발하는 카테고리를 관찰할 수 있으며 누군가가 이를 검토하여 그것이 욕설인지 아닌지 가르칠 수도 있습니다.

내 필요에 따라 다른 사용자가 사용자 이름을 볼 수 있는 대중 친화적인 상용 서비스(예, 비디오 게임)를 기반으로 했지만 공격적인 사용자 이름을 거부하려면 욕설 필터를 거쳐야 한다는 설계가 필요합니다.이것에 대한 슬픈 부분은 사용자 이름이 일반적으로 여러 단어가 연결된 단일 단어(최대 N 문자)이기 때문에 고전적인 "clbuttic" 문제가 발생할 가능성이 가장 높다는 것입니다.다시 말하지만, Microsoft의 인지 서비스는 "Assist"를 Text.HasProfanity=true로 플래그 지정하지 않지만 범주 중 하나에 높은 확률로 플래그를 지정할 수 있습니다.

OP가 묻는 것처럼 "a$$"는 어떻습니까? 필터를 통과했을 때의 결과는 다음과 같습니다.enter image description here, 보시다시피 욕설이 아니라고 판단했지만 그럴 가능성이 높으므로 검토 권장 사항(인간 상호 작용)으로 플래그를 지정합니다.

확률이 높을 때 "죄송합니다. 해당 이름은 이미 사용되었습니다"(그렇지 않더라도)로 돌아가서 검열 반대자 등에게 덜 불쾌감을 줄 수 있습니다. 인적 검토를 통합하거나 "귀하의 사용자 이름이 실시간 운영 부서에 통보되었습니다. 사용자 이름이 검토 및 승인될 때까지 기다리거나 다른 사용자 이름을 선택할 수 있습니다"라고 반환합니다.또는 무엇이든...

그건 그렇고, 이 서비스의 비용/가격은 내 목적에 비해 매우 낮지만(사용자 이름은 얼마나 자주 변경됩니까?) OP의 경우 디자인이 더 집중적인 쿼리를 요구하고 비용을 지불/구독하는 것이 이상적이지 않을 수 있습니다. ML 서비스이거나 사람의 검토/상호작용이 불가능합니다.그것은 모두 디자인에 달려 있습니다 ...그러나 디자인이 요구 사항에 적합하다면 아마도 이것이 OP의 솔루션이 될 수 있습니다.

관심이 있으시면 나중에 댓글에 단점을 나열할 수 있습니다.

하지 않다.

왜냐하면:

  • clbuttic
  • 욕설은 OMG 악이 아닙니다
  • 욕설은 효과적으로 정의 될 수 없습니다
  • 대부분의 사람들은 아마도 욕설로부터 "보호 된"것에 감사하지 않을 것입니다.

편집 : "검열이 잘못되었다고"한 주석 자에 동의하지만,이 답변의 본질은 아닙니다.

욕설 필터는 나쁜 생각입니다. 그 이유는 모든 욕설을 잡을 수 없기 때문입니다. 당신이 시도하면, 당신은 거짓 양성을 얻습니다.

말을 잡는 말

F 단어를 잡고 싶다고 가정 해 봅시다. 쉽지? 어디 한번 보자.

문자열을 통해 루프를 통해 "fuck"을 찾을 수 있습니다. 불행히도, 사람들은 요즘 필터를 속입니다. 욕설 필터는 "푸크"를 픽업하지 않았습니다.

단어의 여러 철자와 변형을 확인하려고 시도 할 수 있지만 코드의 성능이 느려집니다. F- 단어를 잡으려면 "fuc", "fuc", "fuk", "fuk", "f ***"등을 찾아야하며 목록은 계속됩니다.

무죄를 피합니다

좋아, 그렇다면 대소 문자를 사용하지 않고 "f u c k"를 잡을 수 있도록 공백을 무시하는 것은 어떻습니까? 좋은 생각처럼 들릴지 모르지만 누군가는 "fuck"으로 욕설 필터를 우회 할 수 있습니다.

당신은 문장 부호를 무시합니다.

이제는 문장과 같은 문장이기 때문에 지금은 실제 문제입니다.지옥오, 거기! "" "지옥"과 "WH나귀위로? ""엉덩이 "로 픽업.

그리고 "cons"와 같이 필터에서 제외해야 할 단어가 많이 있습니다.젖꼭지"가슴"이 있기 때문에 ution.

사람들은 또한 "frack"과 같은 대체 단어를 사용할 수 있습니다. 너도 차단 해? "Pen is"for "Penis"는 어떻습니까? 귀하의 프로그램에는 문자열이 좋은지 나쁜지 알 수있는 인공 지능이 없습니다.

욕설 필터를 사용하지 마십시오. 그들은 개발하기가 어렵고 크롤링만큼 느립니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top