2012-02-09 2 views
1

텍스트 채팅 시스템을 구축 중입니다. 금지 된 단어/구문을 확인하는 기능을 추가하고 싶습니다.금지 된 단어 검사 중

제가 생각할 수있는 유일한 기술은 아마도 최선의 방법 일 수 있습니다. 모든 단어를 통해 FOR 루프를 수행하고 텍스트에서 일치하는 항목을 검색하는 것입니다. 많은 단어가 추가되면 이것은 믿을 수 없을 정도로 느릴 것 같습니다.

저는 AS3을 사용하고 있지만, 대부분의 언어로 대답이 유용 할 것입니다.

돌봐, 리

답변

3

는 파이썬에서 AS3 사전 또는 딕셔너리를 사용하여 단어가 DICT에있는 경우 바로 확인. 내가 모든 말을 넘어 가지 않게 할 수있는 방법은 없다.

+0

예, 글을 게시 한 후, 배열이나 사전에 대한 텍스트의 단어 테스트가 차단 된 단어를 개별적으로 테스트하는 것보다 낫다는 것을 깨달았습니다. Weasel 아이디어를 확인해 주셔서 감사합니다 –

+1

. 사전은 해시 테이블로 구현되어 더 빠르게 작동합니다. – WeaselFox

+0

내 대답을 확인하십시오 -이를 수행하는 더 빠른 방법이 있습니다. – weltraumpirat

1

이것은 답변보다 더 많은 의견이지만 의견의 길이는 제한되어 있으며 큰 문제가 있습니다.

나는 근본적으로 잘못된 질문을하고 있다고 생각합니다!

확실한 사전과 블랙리스트는 당신이 금지하고 싶은 단어 나 문구를 강조하지만 시스템 사용자가이 목록을 받아 들일 수 있습니까? 시스템의 사용자가 불쾌감을 느끼지만 그렇지 않은 텍스트가 있습니까? 누가 결정합니까?

예를 들어, here에 살고있는 사람이 문제가 있거나 실제로 사람 here에 살고 있습니까? this football/soccer team을 지원하면 어떻게 될까요? This person은 아마 영국을 방문하지 않습니다.

그런 다음 anagrams 및 slang 문제가 발생합니다. FCUK은 영국의 하이 스트리트 브랜드입니다 (다른 곳에서도 확실합니다). 그런 다음 pr0n (링크 없음) 또는 NAMBLA이 있습니다.

실제 질문은 - 시스템을 사용하는 사람들이 일반적으로 받아 들일 수없는 언어를 사용하는 것을 어떻게 막을 수 있습니까? 그리고 이것은 프로그래밍 문제보다는 디자인/사회 공학 문제입니다. 나는이 사이트가 단어/문구 필터링을 가지고 있다고 생각하지 않지만, 아무에게도 불쾌감을 줄만한 것은 아무것도 없다.

아이디어가 있습니다. 사용자가 받아 들일 수있는 것을 결정하게하십시오! 평판 기반 시스템을 사용하십시오. 사용자가 행동하는 사용자에게 투표를 허용하고 불쾌감을 유발하는 사용자의 투표를 허용합니다 (사용자가 투표 방법에 대한 의견을 제공하도록 투표에 의견을 제공 할 수있는 옵션 포함). 그리고/부정적인 평판.

+0

안녕하세요, 귀하의 의견을 보내 주셔서 감사합니다. 이것은 성인용 채팅 시스템으로, 무엇이 허용되는지, 허용되지 않는지에 대해 절대적이고 구체적인 제어를 원합니다. –

+0

@LeeLoftiss : 고객에게 이것이 어떻게 작동하지 않을지에 대해 교육해야한다고 생각합니다. http://tonguetiedtim.com/slang-words-for-penis (NSFW)에는 일상 단어도 포함됩니다. 예를 들어, 영국 정부에서는 헌병 위원장이 다른 상황에서 완전히 다른 것을 의미하는 "사립 회원 명부"를 표로 작성할 수 있습니다. – Skizz

2

사전의 모든 항목을 하나의 RegExp로 연결하여 텍스트를 한 번만 구문 분석해야하는 경우를 고려하십시오. 몇 가지 테스트를 마쳤습니다. 단어를 단어로 대체하는 것보다 더 빨리 처리 할 것입니다.

function censorWithDictionary (dict:Dictionary, text:String) : String { 
    var reg : String = ""; 
    for (var key:Object in dict) 
    { 
     reg += reg=="" ? "" : "|";  // add an "or" for multiple search words 
     reg += "\\b"+dict[key]+"\\b"; // only whole words 
    } 

    var regExp : RegExp = new RegExp (reg, "gi"); 
    return text.replace (regExp, "----"); 
} 
+0

좋아 보인다! 나는 반드시 이것을 길 아래로 쓸 것이다 – WeaselFox

+0

고마워. 멋져 보이네. 정규 표현식 인 항목을 처리합니까? –

+0

부분적인 것, 그렇습니다. 그것들은 모두 하나의 커다란 RegExp의 일부가 될 것이므로, 멋진 multiline이나'^ $ '물건을 만들 수는 없습니다. 그러나 메타 문자 및/또는 문자 클래스를 사용하면 효과가 있습니다. – weltraumpirat

2

비슷한 문제가있었습니다. 게임 사이트를 운영하고 수동으로 검토하지 않은 채팅 시스템을 도입하고 싶었습니다. 우리는 "금지 된 단어"경로를 갔고 정말 잘 작동합니다.

방금 ​​카운트 한 단어와 채팅 메시지가 흘렀을 때 시간이 지남에 따라 단어를 추가 한 온라인에서 발견 된 79 개의 금지 단어 목록이 있습니다.

우리가 일을 점검하는 방법은 모든 공백을 제거하고 알파 문자를 제거하고 남은 것에 금지 된 단어를 검색하여 전체 채팅 메시지를 연결하는 것입니다.우리가 만든

주요 의사 결정은 다음과 같습니다

  1. 당신이 그들에게 조금 신뢰까지 사람들이 채팅을 게시하지 마십시오 자신의 메시지를 거부 왜 사람을 말하지 마 (우리의 사이트에 그들이 가지고 )
  2. 5 "나쁜"메시지를 3 개 게임을 우리는 자동으로 우리는 우리가 할 수
  3. 를 스캔 통해 가진 모든 채팅 함께 매일 보고서를 이메일로 당신에게
  4. 을 차단 한 것으로 게시 된 메시지에 대해 불평하는 다른 사용자 - 메시지가 자동으로 제거되므로 나중에 확인할 수 있습니다.

1 + 3 + 5 좀처럼 지금 일어나지 그것이 비록 훌륭하게 작동 - 때로는

같은 메시지가! "나는 뜨거운 좋겠어요"

단서는 거부됩니다 (실마리는 "sh"와 "it"의 일부 임). 그러나 심지어 자주 발생하지는 않습니다.