2012-02-03 2 views
0

난 레일 초보입니다. 모든 파울 단어가 있으면 내 콘텐츠 응용 프로그램에서 파울 단어를 필터링 할 profanity_filter 루비 보석을 사용하고루비 레일 퍼지 검색과 모독 필터

는 ..

profanity_filter, 그것은 "f******d"

을 반환 "foulword"을 말할 수있는 모든 사용자가 재생하는 경우 똑똑하고 유형 "foulwoord" 또는 "foulwordd" 또는 "foulllword" 등 파울 어로 감지하지 않습니다.

사용자가 현명하지 못한 단어를 감지 할 수있는 방법이 있습니까?

앞으로 도움을 기대합니다!

감사합니다.

+1

[Scunthorpe 문제] (http://en.wikipedia.org/wiki/Scunthorpe_problem)를 고려해야합니다. – Blorgbeard

답변

3

몇 개의 파울 워드를 필터링해야합니까?

한 가지 방법은 Diff::LCS (diff-lcs 보석에서)과 같은 단어를 사용하여 확인중인 단어와 각 파울 단어가 다른 문자 수를 확인하는 것입니다. 확인해야 할 파울 단어가 많으면 매우 느릴 수 있습니다. 많은 것을으로 빠르게 만들 수있는 한 가지 방법은 "좋은"단어 사전을 포함하는 것입니다. Set에 "양호한"사전을 보관하고 각 콘텐츠 단어를 확인하기 전에 먼저 사전에 있는지 여부를 테스트합니다. 그렇다면 계속 진행할 수 있습니다. (당신은 매우 빠른 사전 를 확인하는 확인하려면 검색 트라이에 보관합니다.)

또한, 당신이 단어를 확인하고 OK 것을 발견 할 경우, 당신은 때문에 사전에에게 그것을 추가 할 수 있습니다 같은 단어를 다시 확인할 필요가 없습니다. 여기서 위험은 사전이 너무 커질 수 있다는 것입니다. 이것이 문제라면, "가장 오래 전에 사용하지 않은"캐시와 비슷한 것을 사용할 수 있습니다. 사전이 너무 커지면 최근에 보지 못한 "좋은"단어를 버립니다.

다른 접근법은 각 파울 워드에서 변형을 생성하고 "나쁜"사전에 저장하는 것입니다. 파울 워드에서 1 문자 씩 다른 단어를 생성하면 각 파울 단어에 대해 약 200-500가됩니다. 문자 "O"를 0으로 변경하여 파울어와 다른 단어를 생성 할 수도 있습니다.

당신이 무엇을 하든지 결코 "나쁜"단어를 100 % 포착하지는 않을 것입니다 실수로 "좋은"단어를 표시합니다. 허락 확률이 낮고 허용 가능한 높은 비율의 "나쁜"단어를 잡는 필터를 얻을 수 있다면 "성공"이됩니다.

웹 사이트에서이 작업을 수행하는 경우 "나쁜"단어로 콘텐츠를 차단하는 대신 운영자가주의를 끌도록 자동으로 플래그를 지정하는 것이 좋습니다. 외설스러운 콘텐츠를 사이트에 올려도 잠깐이라도 허용되지 않는다면 신고 된 콘텐츠를 까지 표시하는 것을 지연시킬 수 있습니다. 운영자가 검토 한 후입니다. 이것은 그의 코멘트에서 언급 된 @ Blorgbeard에 대한 Scunthorpe 문제를 피할 수 있습니다.