programing

좋은 욕설 필터는 어떻게 구현합니까?

kingscode 2022. 10. 1. 21:05
반응형

좋은 욕설 필터는 어떻게 구현합니까?

많은 사람들이 사용자 입력, 검색 쿼리 및 입력 텍스트에 욕설이나 바람직하지 않은 언어가 포함될 수 있는 상황에 대처해야 합니다.종종 이것은 걸러질 필요가 있다.

다양한 언어와 사투리로 된 좋은 욕설 목록을 어디서 찾을 수 있을까요?

좋은 목록을 포함하는 소스에 사용할 수 있는 API가 있습니까?또는 단순히 "yes this is clean" 또는 "no this is dirty"라고 말하는 API에 대해 몇 가지 파라미터가 있습니다.

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

PHP용 솔루션을 제공하는 경우 보너스 포인트:)

편집: 프로그램상의 문제를 회피하는 것만으로 대답할 수 있습니다.

예를 들어 사용자가 공개 이미지 검색을 사용하여 민감한 커뮤니티 풀에 추가되는 사진을 찾을 수 있는 경우 이러한 필터가 필요한 장소가 있다고 생각합니다."penis"를 검색할 수 있다면 많은 사진을 얻을 수 있을 것입니다.만약 우리가 그것의 사진을 원하지 않는다면, 그 단어를 검색어로 사용하지 않는 것은 좋은 게이트키퍼가 될 수 있다. 하지만 분명 실수할 수 있는 방법은 아니다.애초에 단어 목록을 얻는 것이 진짜 질문이다.

그래서 저는 하나의 토큰이 더럽고 더럽지 않은지 알아내고 단순히 허용하지 않는 방법을 말하는 것입니다.나는 완전히 웃기는 "목 긴 기린"의 언급과 같은 감정을 굳이 막지는 않을 것이다.네가 거기서 할 수 있는 건 아무것도 없어.:)

외설 필터: 나쁜 생각인가, 아니면 엄청나게 나쁜 생각인가?

또한, '툰타운의 미지의 역사'의 SpeedChat을 잊을 수 없다.그 때, 14세의 아이가 "안전어 화이트리스트"를 사용했을 때, "는 목이 긴 기린을 당신의 솜털 같은 하얀 토끼에 붙이고 싶다"고 재빨리 회피했다.

결론:최종적으로는, 실장하는 시스템에 대해서, 인간 리뷰를 대체할 수 있는 것은 전혀 없습니다(동료든 그 외의 것이든 상관없습니다).기본적인 툴을 실장하여 드라이브바이(Drive-by)를 배제해 주세요.단, 트롤을 결정하려면 알고리즘 기반의 접근법이 반드시 필요합니다.

익명성을 없애고 책임(Stack Overflow가 잘 하는 것)을 도입하는 시스템도 도움이 되며, 특히 존 가브리엘의 G.I.F.T.와 싸우는 데 도움이 됩니다.

또 어디서부터 불경 목록을 입수할 수 있는지 물어봤습니다.Dansguardian 오픈소스 프로젝트 중 하나가 기본 불경 목록 소스 코드입니다.프록시용으로 다운로드할 수 있는 서드파티 문구 리스트도 있습니다.이 리스트는 고객에게 도움이 될 수 있습니다.

질문 편집에 대한 응답으로 편집:당신이 하려는 일에 대해 설명해 주셔서 감사합니다.이 경우 간단한 워드필터만 사용한다면 두 가지 방법이 있습니다.하나는 검열하는 모든 금지 문구를 포함하는 단일 긴 regexp를 만들고 regex 검색/바꾸기만 하는 것입니다.다음과 같은 정규식:

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

preg_match()를 사용하여 입력 문자열로 실행하여 히트 여부를 일괄 테스트합니다.

또는 preg_replace()를 눌러 공백으로 만듭니다.

이러한 함수는 하나의 긴 정규식이 아닌 어레이에 로드할 수도 있습니다.또한 긴 워드 리스트의 경우 관리가 용이할 수 있습니다.어레이를 유연하게 사용하는 방법에 대한 좋은 예는 preg_replace()를 참조하십시오.

추가 PHP 프로그래밍 예에 대해서는 이 페이지를 참조해 주세요.단어 필터링의 고급 범용 클래스는 *가 검열된 워드의 가운데 문자를 제외합니다.또, PHP의 예도 포함되어 있는 이 이전의 스택 오버플로우 질문도 참조해 주세요(SQL 베이스의 필터링된 워드의 어프로치가 중요한 부분입니다).리트 스피크 컴펜세이터는 폐기될 수 있습니다.nsed with (불필요하다고 생각되는 경우)

또, 「처음부터 단어 리스트를 취득하는 것이 진짜 질문입니다」라고 덧붙였습니다.이전 Dansgaurdian 링크에 덧붙여, 이 편리한 458 워드의 .zip이 도움이 될지도 모릅니다.

이 질문이 꽤 오래됐다는 건 알지만 흔히 있는 질문이에요

불경스러운 필터(여기서 Wikipedia 항목 참조)에는 이유와 필요성이 모두 있지만, 컨텍스트와 정확성이라는 매우 뚜렷한 이유로 100% 정확도에 미치지 못하는 경우가 많습니다.

달성하려는 것이 무엇인가에 따라 다릅니다.기본적으로는 아마 '7가지 더러운 단어'를 가려야 할 것입니다.그리고 그 다음에...기본적인 욕설, URL, 개인정보 등 가장 기본적인 욕설을 걸러야 하는 기업도 있지만, 불법 계정명(Xbox live가 그 예)을 방지해야 하는 기업도 있습니다.

사용자가 생성한 콘텐츠에는 잠재적인 욕설뿐만 아니라 다음과 같은 불쾌한 참조가 포함될 수 있습니다.

  • 성행위
  • 성적 지향
  • 종교
  • 민족성
  • 기타...

다국어로도 가능합니다.Shutterstock은 지금까지 10개 언어로 된 기본적인 더러운 단어 목록을 개발했지만, 여전히 기본이고 그들의 '태깅' 욕구를 매우 많이 지향하고 있다.그 밖에도 웹에서 이용할 수 있는 리스트가 많이 있습니다.

저는 그것이 정의된 과학이 아니며 언어는 끊임없이 발전하는 과제이지만 90%의 어획률이 0%보다 낫다는 답변에 동의합니다.달성하려는 목표, 지원 수준 및 다양한 유형의 불경함을 제거하는 것이 얼마나 중요한지에 따라 달라집니다.

필터를 작성할 때는 다음 요소와 이러한 요소가 프로젝트와 어떻게 관련되어 있는지 고려해야 합니다.

  • 단어/구사
  • 줄임말(FOAD/LMFAO 등)
  • 잘못된 긍정('missit', 'scunthorpe', 'titsworth'와 같은 단어, 장소 및 이름)
  • URL(불량 사이트가 명백한 타깃)
  • 개인정보(이메일, 주소, 전화 등)
  • 언어 선택(통상 기본적으로는 영어)
  • Moderation(사용자가 생성한 콘텐츠와 대화할 수 있는 방법 및 콘텐츠로 수행할 수 있는 작업

90% 이상의 불경스러움을 캡처하는 불경스러움 필터를 쉽게 만들 수 있지만 100%는 절대 달성하지 못합니다.그냥 불가능합니다.100%에 가까워지고 싶을수록 더 어려워진다...과거에 하루에 50만 건 이상의 실시간 메시지를 처리하는 복잡한 불경스러운 엔진을 구축한 적이 있기 때문에 다음과 같은 조언을 드리고 싶습니다.

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

  • 적용 가능한 프로파일의 리스트 작성
  • 불경유발에 대처하는 방법 개발

중간 정도의 복잡한 필터는 (기본 필터와 더불어) 다음을 포함합니다.

  • 복잡한 패턴 매칭을 사용하여 확장 파생상품 처리(고급 regex 사용)
  • Leetspeak 대응 (l33t)
  • 폴스 포지티브 처리

복잡한 필터에는, 다음의 몇개의 필터가 필요합니다(중간한 필터 외에).

  • 화이트리스트 및 블랙리스트
  • 프레이즈/용어의 네이비 베이지안 추론
  • Soundex 기능(단어가 다른 단어처럼 들리는 경우)
  • 레벤슈테인 거리
  • 막힘
  • 필터링 엔진이 예를 들어 학습할 수 있도록 안내하거나 가이던스 없이 매칭이 정확하지 않은 경우(자기/계속적으로 개선되는 시스템)를 안내하는 데 도움이 되는 인간 모델레이터
  • 아마도 어떤 형태의 인공지능 엔진일 것이다.

어떤 좋은 도서관이 있는지 모르겠지만, 무슨 일이 있어도, 반드시 물건을 통과시키는 방향을 잘못 잡도록 하세요.서브스트링으로서 「ass」가 포함되어 있기 때문에, 유저명으로서 「mpasell」을 사용할 수 없는 시스템을 취급하고 있습니다.이것은 사용자를 소외시키는 훌륭한 방법입니다!

면접을 보는 동안 면접을 본 회사의 CTO는 제가 자바어로 만든 단어/웹 게임을 시험해 보았습니다.옥스포드 영어사전의 전체 단어 목록 중에서 가장 먼저 추측할 수 있는 단어는 무엇이었을까?

물론 영어에서 가장 불쾌한 단어죠.

그럭저럭 일자리를 제안받았지만, 그 후 불경스러운 단어 목록을 추적해( 목록과 다르지 않음) 모든 나쁜 단어 없이 새로운 사전을 만들기 위해 빠른 대본을 작성했습니다(목록을 볼 필요조차 없습니다).

당신의 경우, 검색을 실제 단어와 비교하는 것이 단어 목록으로 가는 방법이라고 생각합니다.대체 스타일/문구는 좀 더 손이 많이 가지만, 사용자가 충분히 자주 사용할 수 있을지 의문입니다.

프로그래머가 확신하고 모든 누드 전개에 보조를 맞춘다고 해도 불경스러운 필터링 시스템은 결코 완벽하지 않을 것이다.

즉, 어떤 '단어' 목록도 다른 목록과 마찬가지로 수행될 가능성이 높다. 왜냐하면 근본적인 문제는 현재의 기술로는 거의 다루기 어려운 언어 이해이기 때문이다.

따라서 실용적인 해결책은 두 가지뿐입니다.

  1. 사전을 자주 갱신할 준비가 되어 있다
  2. 잘못된 긍정(예: "clutic" 대신 "clutic") 및 잘못된 부정(예: "clutic")을 수정하기 위해 휴먼 에디터를 고용합니다.

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

사용자 입력을 허용하고 모델레이션이 필요한 경우 인간 모델레이터를 도입합니다.

CDYNE의 Profinity Filter Web Service를 참조하십시오.

테스트 URL

현지화 문제에 주의해 주세요.한 언어의 욕설은 다른 언어에서는 지극히 정상적인 단어일 수 있습니다.

ebay는 사전적 접근 방식을 사용하여 피드백에서 "나쁜 단어"를 걸러냅니다.das war eine perfekte Transaktion이라는 독일어 번역문을 입력하려고 하면 ebay가 나쁜 말로 인해 피드백을 거부합니다.

왜일까요? 독일어로 "was"는 "war"이고 "war"는 ebay의 "bad words" 사전에 있기 때문입니다.

현지화 문제에 주의해 주세요.

"trick the system" 서브질문에 대해서는 검색하기 전에 "bad word" 목록과 사용자가 입력한 텍스트를 모두 정규화함으로써 처리할 수 있습니다.예를 들어 일련의 regexes(또는 PHP가 있는 경우 tr)를 사용하여 [z$5]를 "s", [4@]를 "a"로 변환하고 정규화된 "bad word" 목록과 비교합니다.현재로선 실제 사례가 떠오르지 않지만 정규화로 인해 추가적인 잘못된 긍정이 발생할 수 있습니다.

더 큰 과제는 이 칼보다 강하다라는 말을 인용하면서도 펜은 칼보다 강하다라는 표현을 쓸 수 있는 것을 고안하는 것이다.

저는 12개 언어로 된 2200개의 나쁜 단어를 수집했습니다.en, ar, cs, da, de, eo, es, fa, fi, fr, hi, hu, it, ja, ko, nl, nl, nl, pl, pt, ru, sv, th, th, tlh, tr, zh.

MySQL 덤프, JSON, XML 또는 CSV 옵션을 사용할 수 있습니다.

https://github.com/turalus/openDB

이 SQL을 DB로 실행하고 사용자가 입력했을 때 매번 확인하는 것이 좋습니다.

Digg/Stackoverflow와 같이 사용자가 외설적인 콘텐츠를 다운로드/마킹할 수 있다면...그렇게 하세요.

그런 다음 "귀찮은" 사용자를 검토하고 규칙을 위반할 경우 차단하기만 하면 됩니다.

파티에 조금 늦었지만, 이걸 읽는 사람들에게 효과가 있을지도 모르는 해결책이 있어요.php가 아닌 javascript로 되어 있지만 타당한 이유가 있습니다.

이 플러그인은 내가 쓴 거야

어쨌거나.

제가 선택한 접근방식은 사용자가 욕설 필터링에 "옵트인"할 수 있도록 하는 것입니다.기본적으로 욕설은 기본적으로 허용되지만 사용자가 읽기 싫으면 읽을 필요가 없습니다.이는 "l33t sp3@k" 문제에도 도움이 됩니다.

이 개념은 클라이언트의 계정이 불경 필터링을 활성화하는 경우 서버에 의해 주입되는 단순한 플러그인입니다.거기서부터는, 욕설을 지워버리는 간단한 대사 몇 개뿐이에요.


https://chaseflorell.github.io/jQuery.ProfanityFilter/demo/httpschaseflorell.github.io/jQuery./demo/

<div id="foo">
    ass will fail but password will not
</div>

<script>
    // code:
    $('#foo').profanityFilter({
        customSwears: ['ass']
    });
</script>

결과

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

필터링하는 몇 가지 나쁜 워드의 양호한 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 />";

이러한 모든 교체를 보다 효율적으로 실시할 수 있는 방법이 있다고 생각합니다만, 저는 그것을 이해할 수 있을 만큼 똑똑하지 않습니다(비효율적이긴 하지만, 이것은 정상적으로 동작하고 있는 것 같습니다).

사용자 등록을 허용하고 필요에 따라 사용자를 필터링하여 불경스러운 표를 추가하는 편이 좋다고 생각합니다.이 모든 것은 잘못된 긍정(나쁜 것으로 표시된 단어)과 잘못된 부정(나쁜 단어가 통과됨)의 비용에 달려 있습니다.이는 궁극적으로 필터링 전략에서 얼마나 공격적이거나 보수적인지를 좌우할 것입니다.

와일드카드는 의도한 것보다 더 부담스러운 행동을 할 수 있기 때문에 와일드카드를 사용하는 경우에도 매우 주의합니다.

또한 게임 후반에, 하지만 조사를 하다가 우연히 이 곳을 발견했어요.다른 사람들이 언급했듯이, 자동화되어 있다면 거의 불가능에 가깝습니다.그러나 설계/조정이 일부의 경우(항상 그렇지는 않지만) 인간의 조작으로 불경인지 아닌지를 검토할 수 있는 경우에는 ML을 고려해 주십시오.https://docs.microsoft.com/en-us/azure/cognitive-services/content-moderator/text-moderation-api#profanity여러 가지 이유로 현재로선 이 선택을 하고 있습니다.

  • 많은 현지화 지원
  • 데이터베이스를 계속 업데이트하기 때문에 최신 속어 및 언어(유지관리 문제)를 파악할 필요가 없습니다.
  • 높은 확률(즉, 90 % 이상)이 있는 경우, 실용적으로 거부할 수 있습니다.
  • 불경스러운 플래그를 발생시키는 카테고리를 관찰할 수 있으며, 누군가 플래그를 검토하여 불경한 플래그가 불경한 플래그가 아니거나 또는 불경스러운 플래그가 아님을 가르칠 수 있습니다.

저로서는 다른 사용자가 사용자 이름을 볼 수 있는 공공 친화적인 상용 서비스(OK, 비디오 게임)를 기반으로 했지만, 불쾌한 사용자 이름을 거부하려면 불경 필터를 거쳐야 합니다.여기서 슬픈 점은 사용자 이름이 보통 여러 개의 단어가 연결된 단일 단어(최대 N자)이기 때문에 고전적인 "clutic" 문제가 발생할 가능성이 높다는 것입니다.다시, 마이크로소프트의 인지 서비스는 "어시스턴트"를 텍스트로 표시하지 않습니다.HasProfanity=true이지만 범주 중 하나를 높은 확률로 플래그 지정할 수 있습니다.

OP가 "a$$"에 대해 질문했을 때 필터를 통과했을 때 다음과 같은 결과가 나왔습니다.여기에 이미지 설명 입력 보시다시피, 불경한 것은 아니지만, 그럴 가능성이 높기 때문에, 리뷰의 추천(인간과의 상호작용)으로서 플래그를 붙입니다.

가능성이 높은 경우는, 검열에 반대하는 사람에게 불쾌감을 주지 않게 「죄송합니다만, 그 이름은 이미 사용되고 있습니다」라고 되돌리거나(그렇지 않아도), 휴먼 리뷰를 통합하고 싶지 않은 경우는, 「유저명이 라이브 오퍼레이션 부문에 통지되었습니다」라고 되돌리거나, 유저명의 리뷰를 기다릴 수 있습니다.d 승인 또는 다른 사용자 이름 선택"을 클릭합니다.아니면 뭐...

덧붙여서, 이 서비스의 코스트/가격은 제 목적에 비해 꽤 저렴합니다(사용자명이 얼마나 자주 변경됩니까?).하지만, OP의 경우, 보다 고도의 문의가 요구되어 ML 서비스의 유료/구독에 적합하지 않거나, 휴먼 리뷰/인터랙션을 할 수 없는 경우가 있습니다.모두 디자인에 따라 달라지죠...그러나 디자인이 적합하다면 이것이 OP의 솔루션이 될 수 있습니다.

만약 관심이 있다면 향후 댓글에 단점을 기재할 수 있습니다.

나는 이 토론에서 HanClinto의 높은 자리에 동의한다.입력 텍스트를 문자열 매칭할 때는 보통 정규 표현을 사용합니다.그리고 이것은 헛수고입니다.당신이 처음에 언급했듯이 당신은 인터넷에서 인기 있는 모든 트릭 형태의 글을 당신의 "블록된" 목록에서 명시적으로 설명해야 하기 때문입니다.

한편, 다른 사람들이 검열의 윤리에 대해 토론하는 동안, 나는 웹에서 어떤 형태가 필요하다는 것에 동의해야만 한다.많은 사람들에게 즉각적으로 불쾌감을 줄 수 있고, 저자 측에서는 전혀 생각이 필요 없기 때문에 단순히 저속한 글을 올리는 것을 즐기는 사람들도 있다.

아이디어 감사합니다.

한클린토가 지배한다!

솔직히 말해서, 저는 그들이 "시스템에 속임수"라는 말을 꺼내게 하고 대신 금지시키겠습니다. 그건 저뿐입니다.하지만 프로그래밍을 더 쉽게 만들기도 합니다.

다음과 같은 regex 필터를 구현합니다./[\s]dooby (doo?)[\s]/i다른 단어에 접두사가 붙으면/[\s]doob(er|ed|est)[\s]/이렇게 하면 완전히 유효한 어슈어징과 같은 단어를 필터링할 수 없게 됩니다.다만, 그 외의 변형에 대한 지식이나, 새로운 것을 학습하는 경우는, 실제의 필터를 갱신할 필요가 있습니다.분명히 이 모든 것이 예시이지만, 어떻게 할지는 스스로 결정해야 합니다.

알고 있는 단어를 전부 타이핑할 생각은 없어요. 알고 싶지 않을 때도요.

그러지 마. 그냥 문제로 이어질 뿐이야.불경스러운 필터에 대한 나의 개인적인 경험 중 하나는 내가 "핸콕으로 가는 다리를 몇 시간 동안 건너갔다"거나 그런 취지의 말을 했다는 이유로 IRC 채널에서 쫓겨나거나 금지당한 것이다.

나는 이 주제에 대한 무의미한 것에 동의하지만, 만약 당신이 필터를 가지고 있어야 한다면, Ning's Boxwood를 확인해 보세요.

Boxwood는 텍스트 내의 여러 단어를 빠르게 치환하기 위한 PHP 확장입니다.대소문자를 구분하고 대소문자를 구분하지 않는 매칭을 지원합니다.동작하는 텍스트를 UTF-8로 부호화해야 합니다.

상세한 것에 대하여는, 다음의 블로그 투고도 참조해 주세요.

Boxwood를 사용하면 검색어 목록을 원하는 만큼 길게 만들 수 있습니다. 검색 및 치환 알고리즘은 검색어 목록에 더 많은 단어가 있어도 느려지지 않습니다.이 기능은 모든 검색어의 트라이를 작성한 후 제목 텍스트를 한 번만 스캔하여 트라이의 요소를 아래로 이동하고 텍스트의 문자와 비교하는 방식으로 작동합니다.US-ASCII 및 UTF-8(대문자와 소문자가 구분되거나 구분되지 않음)을 지원하며 영어 중심의 단어 경계 체크 로직을 갖추고 있습니다.

결론적으로, 좋은 욕설 필터를 만들기 위해서는 3가지 주요 컴포넌트가 필요합니다.그렇지 않으면 적어도 저는 그렇게 할 것입니다.다음과 같습니다.

  1. 필터: 블랙리스트나 사전과 같은 것에 대해 검증하는 백그라운드 서비스입니다.
  2. 익명 계정 허용 안 함
  3. 신고하기

보너스는 정확한 학대 리포터에 기여한 사람들에게 어떻게든 보상을 하고, 가해자를 처벌하는 것입니다(예: 계정 정지).

하지 마.

이유:

  • 쿠루부토
  • 욕은 OMG EVIL이 아니다.
  • 모독을 효과적으로 정의할 수 없습니다.
  • 대부분의 사람들은 불경으로부터 보호받는 것을 별로 좋아하지 않을 것이다.

편집: "검열이 잘못되었다"는 코멘터리에는 동의하지만, 그것은 이 답변의 본질이 아닙니다.

언급URL : https://stackoverflow.com/questions/273516/how-do-you-implement-a-good-profanity-filter

반응형