Como você implementa um bom filtro de palavrões?


208

Muitos de nós precisam lidar com a entrada do usuário, consultas de pesquisa e situações em que o texto de entrada pode conter palavrões ou linguagem indesejável. Muitas vezes, isso precisa ser filtrado.

Onde podemos encontrar uma boa lista de palavrões em vários idiomas e dialetos?

Existem APIs disponíveis para fontes que contêm boas listas? Ou talvez uma API que simplesmente diga "sim, isso está limpo" ou "não, isso está sujo" com alguns parâmetros?

Quais são alguns bons métodos para capturar pessoas tentando enganar o sistema, como $$, azz ou a55?

Pontos de bônus se você oferecer soluções para PHP. :)

Editar: resposta a respostas que dizem simplesmente evitar o problema programático:

Eu acho que existe um lugar para esse tipo de filtro quando, por exemplo, um usuário pode usar a pesquisa de imagens públicas para encontrar fotos que são adicionadas a um pool de comunidade sensível. Se eles puderem procurar "pênis", provavelmente obterão muitas fotos, sim. Se não queremos imagens disso, impedir a palavra como um termo de pesquisa é um bom porteiro, embora não seja um método infalível. Obter a lista de palavras em primeiro lugar é a verdadeira questão.

Então, eu estou realmente me referindo a uma maneira de descobrir que um único token está sujo ou não e, em seguida, simplesmente o desaprovo. Eu não me incomodaria em impedir um sentimento como a referência totalmente hilária de "girafa de pescoço comprido". Nada que você possa fazer lá. :)


12
É uma pena que todas as respostas principais sejam desvios existenciais e derrotistas do desafio de programação. Com os serviços computacionais "cyborg", como o Mechanical Turk, ganhando força e quase todos os softwares se tornando sociais, é mais importante do que nunca ter uma heurística para sinalizar o conteúdo e chamar a atenção de um moderador!
21909 JasonSmith

10
Por favor, tenha cuidado com o contexto da linguagem, especialmente se você estiver executando o i18n. Certa vez, tentei criar um grupo do Google para o curso que estava ministrando chamado "Sanal ortamda görselleştirme", que é turco para "Visualização em mídia virtual". O Google foi estúpido o suficiente para rejeitá-lo porque o título continha a palavra "anal" . Sanal [tr] = Virtual [en] e o Google me acusaram descaradamente de palavrões! : D Por favor, não permita que coisas estranhas como essa aconteçam.
Edgerunner 19/09/10

E se você procurar a palavra em espanhol ? Na verdade, você pode contornar o filtro das Imagens do Google dessa maneira (se estiver localizado em outro idioma).
precisa saber é o seguinte

Outra sugestão seria NÃO proibir essas palavras, mas registrar os usuários que as usam. Se um usuário / IP obtiver mais de 2, 3 ou o que você quiser, bloqueie essa pessoa. Também não é infalível, mas acho que é muito mais inconveniente ser bloqueado e ter que mudar de usuário / IP / ambos do que escrever 'coelho branco fofo' em vez de 'bichano'. Por outro lado, os usuários não sabem QUE palavras ou expressões eles não podem usar, portanto, não podem adivinhar diferentes palavrões tão facilmente quanto são banidos.
Francisco Presencia

1
Os filtros de palavrões são uma má ideia. É muito difícil diferenciar entre alguém que tenta enganar o sistema e alguém legitimamente falando de algo totalmente apropriado ( "Fudge você!") ( "I como o fudge de chocolate.")
clickbait

Respostas:


177

Filtros de obscuridade: má ideia ou má ideia incrivelmente intercambiável?

Além disso, não se pode esquecer o Speedthat da Untold History of Toontown , onde, mesmo usando uma "lista de permissões de palavras seguras", uma criança de 14 anos rapidamente a contornou com: "Quero enfiar minha girafa de pescoço comprido em seu fofo coelho branco . "

Conclusão: em última análise, para qualquer sistema implementado, não há absolutamente nenhum substituto para a revisão humana (seja de pares ou não). Sinta-se à vontade para implementar uma ferramenta rudimentar para se livrar dos drive-by's, mas para o troll determinado, você absolutamente deve ter uma abordagem não baseada em algoritmos.

Um sistema que remove o anonimato e introduz responsabilidade (algo que o Stack Overflow faz bem) também é útil, principalmente para ajudar a combater o PRESENTE de John Gabriel

Você também perguntou onde você pode obter listas de palavrões para começar - um projeto de código aberto a ser verificado é o Dansguardian - verifique o código-fonte para suas listas de palavrões padrão. Também há uma Lista de frases de terceiros adicional que você pode baixar para o proxy, que pode ser um ponto de coleta útil para você.

Edite em resposta a pergunta edit: Obrigado pelo esclarecimento sobre o que você está tentando fazer. Nesse caso, se você está apenas tentando criar um filtro de palavras simples, há duas maneiras de fazê-lo. Uma é criar um único regexp longo com todas as frases proibidas que você deseja censurar e apenas fazer um regex encontrar / substituir por ele. Uma regex como:

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

e execute-o na sua string de entrada usando preg_match () para testar por atacado uma ocorrência,

ou preg_replace () para apagá-los.

Você também pode carregar essas funções com matrizes em vez de uma única regex longa e, para listas longas de palavras, pode ser mais gerenciável. Veja preg_replace () para alguns bons exemplos de como matrizes podem ser usadas de maneira flexível.

Para obter exemplos adicionais de programação PHP, consulte esta página para obter uma classe genérica um pouco avançada para filtragem de palavras que * é a letra central das palavras censuradas, e a pergunta anterior Stack Overflow que também possui um exemplo PHP (a principal parte valiosa da a abordagem de palavras filtradas baseada em SQL - o compensador de fala leet pode ser dispensado se você achar desnecessário).

Você também adicionou: " Obter a lista de palavras em primeiro lugar é a verdadeira questão. " - além de alguns dos links dansgaurdianos anteriores, você pode achar útil esse .zip de 458 palavras útil.


@ JPLemme: Sim, deveria - eu deveria ter adicionado [sic] depois, já que foi assim que Atwood o escreveu. :)
HanClinto 11/11/08

"Club Penguin", acrescenta centenas de entradas para o seu filtro de palavrões a cada dia : raphkoster.com/2008/05/09/...
Frank fazendeiro

6
Uma palavra invólucro limite em torno de suas opções regex impediria a clbuttic erro
cjk

@ck: Somente se você não estiver preocupado com a possibilidade de filtrar palavras com erros de ortografia "F * ckkkk yo 'asssss" :) Não tenho certeza se confio que meus trolls tenham uma ortografia muito precisa.
HanClinto

1
Se você gostaria de ouvir a história de "Fluffy White Bunny" da boca do cavalo, agora é um episódio de podcast: socialmediaclarity.tumblr.com/post/70499341079/…
F. Randall Farmer

44

Embora eu saiba que essa pergunta é bastante antiga, mas é uma pergunta comum ...

Existe uma razão e uma necessidade distinta de filtros de palavrões (consulte a entrada da Wikipedia aqui ), mas eles geralmente não são 100% precisos por motivos muito distintos; Contexto e precisão .

Depende (totalmente) do que você está tentando alcançar - no mais básico, você provavelmente está tentando cobrir as " sete palavras sujas " e depois algumas ... Algumas empresas precisam filtrar o mais básico dos palavrões: básico palavrões, URLs ou mesmo informações pessoais e assim por diante, mas outros precisam evitar nomes ilícitos de contas (o Xbox live é um exemplo) ou muito mais ...

O conteúdo gerado pelo usuário não contém apenas palavrões em potencial, também pode conter referências ofensivas a:

  • Atos sexuais
  • Orientação sexual
  • Religião
  • Etnia
  • Etc ...

E potencialmente, em vários idiomas. A Shutterstock desenvolveu listas básicas de palavras sujas em 10 idiomas até o momento, mas ainda é básica e muito orientada para suas necessidades de 'marcação'. Existem várias outras listas disponíveis na web.

Concordo com a resposta aceita de que não é uma ciência definida e que a linguagem é um desafio em constante evolução , mas em que uma taxa de captura de 90% é melhor que 0%. Depende apenas dos seus objetivos - o que você está tentando alcançar, o nível de suporte que você tem e o quão importante é remover palavrões de diferentes tipos.

Ao criar um filtro, é necessário considerar os seguintes elementos e como eles se relacionam com o seu projeto:

  • Palavras / frases
  • Acrônimos (FOAD / LMFAO etc)
  • Falsos positivos (palavras, lugares e nomes como 'mishit', 'scunthorpe' e 'titsworth')
  • URLs (sites pornográficos são um alvo óbvio)
  • Informações pessoais (email, endereço, telefone etc. - se aplicável)
  • Escolha do idioma (geralmente inglês por padrão)
  • Moderação (como, se houver, você pode interagir com o conteúdo gerado pelo usuário e o que pode fazer com ele)

Você pode criar facilmente um filtro de palavrões que captura mais de 90% de palavrões, mas nunca atingirá 100%. Simplesmente não é possível. Quanto mais você quer chegar a 100%, mais difícil fica ... Depois de criar um mecanismo complexo de palavrões no passado que lidava com mais de 500 mil mensagens em tempo real por dia, eu daria o seguinte conselho:

Um filtro básico envolveria:

  • Construindo uma lista de palavrões aplicáveis
  • Desenvolvimento de um método para lidar com derivações de palavrões

Um arquivador moderadamente complexo envolveria (além de um filtro básico):

  • Usando correspondência complexa de padrões para lidar com derivações estendidas (usando regex avançado)
  • Lidando com o Leetspeak (l33t)
  • Lidar com falsos positivos

Um filtro complexo envolveria vários dos seguintes itens (além de um filtro moderado):


28

Não conheço boas bibliotecas para isso, mas faça o que fizer, certifique-se de errar na direção de deixar as coisas passarem. Eu lidei com sistemas que não me permitiam usar "mpassell" como nome de usuário, porque ele contém "ass" como substring. Essa é uma ótima maneira de alienar os usuários!


17
ou proibindo "cabine" em um jogo de naves espaciais voando
Shinhan

24

Durante uma entrevista de emprego minha, o CTO da empresa que estava me entrevistando experimentou um jogo de palavras / web que escrevi em Java. De uma lista de palavras de todo o dicionário Oxford English, qual foi a primeira palavra que surgiu?

Obviamente, a palavra mais suja do idioma inglês.

De alguma forma, ainda recebi a oferta de emprego, mas depois localizei uma lista de palavrões (não muito diferente desta ) e escrevi um script rápido para gerar um novo dicionário sem todas as palavrões (sem precisar olhar para a lista) .

Para o seu caso em particular, acho que comparar a pesquisa com palavras reais parece o caminho a seguir com uma lista de palavras como essa. Os estilos / pontuação alternativos exigem um pouco mais de trabalho, mas duvido que os usuários usem isso com frequência suficiente para ser um problema.


8
Fora do tópico, mas qual é a palavra mais suja? Eu sempre considerou a palavra c ou a palavra n, mas presumo que as pessoas pensam a palavra f é
Jeff

2
"Duvido que os usuários usem isso com frequência suficiente para ser um problema" Mantenha a esperança viva. Quando os usuários tropeçarem no filtro, eles trabalharão para encontrar maneiras de contornar. Pode ser tão simples quanto substituir letras por números, para um posicionamento ímpar de espaços, etc.).
BryanH

21

um sistema de filtragem de palavrões nunca será perfeito, mesmo se o programador estiver seguro e a par de todos os desenvolvimentos nus

Dito isso, é provável que qualquer lista de 'palavrões' seja tão boa quanto qualquer outra lista, já que o problema subjacente é o entendimento da linguagem, que é praticamente intratável com a tecnologia atual.

portanto, a única solução prática é dupla:

  1. esteja preparado para atualizar seu dicionário frequentemente
  2. contrate um editor humano para corrigir falsos positivos (por exemplo, "clbuttic" em vez de "clássico") e falsos negativos (oops! perdi um!)

1
Apenas detecte a palavra com espaços de ambos os lados, ponto final depois, não?
David D

1
Ele não é homem, isso só funciona para os casos mais triviais; estamos lidando com seres humanos aqui, e eles são bastante inteligente :)
Steven A. Lowe

14

A única maneira de impedir a entrada ofensiva do usuário é impedir toda a entrada do usuário.

Se você insistir em permitir a entrada do usuário e precisar de moderação, incorpore moderadores humanos.



7

Em relação à subquestão "enganar o sistema", você pode lidar com isso normalizando a lista de "palavrões" e o texto inserido pelo usuário antes de fazer sua pesquisa. por exemplo, use uma série de expressões regulares (ou tr, se o PHP tiver) para converter [z $ 5] em "s", [4 @] em "a" etc. texto. Observe que a normalização pode levar a falsos positivos adicionais, embora eu não consiga pensar em nenhum caso real no momento.

O maior desafio é encontrar algo que permita que as pessoas citem "A caneta é mais poderosa que a espada" e, ao mesmo tempo, bloqueie "pênis".


14
Não se esqueça de experts-exchange.com e pen-island.com; esses URLs do site não continham hífens.
BryanH

7

Cuidado com os problemas de localização: o que é um palavrão em um idioma pode ser uma palavra perfeitamente normal em outro.

Um exemplo atual disso: o ebay usa uma abordagem de dicionário para filtrar "palavrões" dos comentários. Se você tentar inserir a tradução alemã de "esta foi uma transação perfeita" ("das war eine perfekte Transaktion"), o ebay rejeitará o feedback devido a palavrões.

Por quê? Porque a palavra alemã para "was" é "guerra" e "guerra" está no dicionário ebay de "palavrões".

Portanto, cuidado com os problemas de localização.


6

Se você pode fazer algo como Digg / Stackoverflow, em que os usuários podem votar / marcar conteúdo obsceno ... faça isso.

Então, tudo que você precisa fazer é revisar os usuários "impertinentes" e bloqueá-los se eles violarem as regras.


4

Estou um pouco atrasado para a festa, mas tenho uma solução que pode funcionar para quem lê isso. Está em javascript, em vez de php, mas há uma razão válida para isso.

Divulgação completa, eu escrevi este plugin ...

Enfim.

A abordagem adotada é permitir que um usuário "aceite" sua filtragem de palavrões. Basicamente, palavrões serão permitidos por padrão, mas se meus usuários não quiserem ler, eles não precisam. Isso também ajuda com o problema "l33t sp3 @ k".

O conceito é simples plug-in que é injetado pelo servidor se a conta do cliente estiver ativando a filtragem de palavrões. A partir daí, são apenas algumas linhas simples que apagam os palavrões.

Aqui está a página de demonstração
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>

resultado

*** falhará, mas a senha não será


Aqui está uma demonstração de trabalho do jsFiddle para acompanhar esta resposta.
precisa saber é o seguinte

Muito ingênuo. Não filtrara$$
Winger Sendón

3
@EmperorAiman, nunca houve a intenção de filtrar o discurso . Não recomendo tentar filtrar isso, pois é uma batalha perdida. O filtro de palavrões que publiquei foi "criado para permitir que os usuários" optem por participar "da filtragem de palavrões". o que significa que é melhor usado em um site que permite palavrões por padrão. Se você deseja filtrar a$$, adicione-o à lista de filtros.
precisa saber é o seguinte

4

Eu coletei 2200 palavrões em 12 idiomas: en, ar, cs, da, de, e, es, fa, fi, fr, oi, hu, it, ja, ko, nl, no, pl, pt, ru, sv , th, tlh, tr, zh.

As opções de dump do MySQL, JSON, XML ou CSV estão disponíveis.

https://github.com/turalus/openDB

Eu sugiro que você execute esse SQL no seu banco de dados e verifique sempre que o usuário inserir algo.


2

Não. Isso apenas leva a problemas. Uma experiência pessoal clbuttic que eu tenho com filtros de palavrões é o momento em que fui expulso / banido de um canal de IRC por mencionar que eu estava "encabeçando a ponte para Hancock por algumas horas" ou algo nesse sentido.


2

Eu concordo com o post de HanClinto acima nesta discussão. Geralmente, uso expressões regulares para corresponder ao texto de entrada. E este é um esforço inútil, pois, como você mencionou originalmente, você deve explicar explicitamente todas as formas artísticas de escrever populares na rede em sua lista "bloqueada".

Em uma nota lateral, enquanto outros estão debatendo a ética da censura, devo concordar que alguma forma é necessária na web. Algumas pessoas simplesmente gostam de postar vulgaridade, porque pode ser instantaneamente ofensivo para um grande corpo de pessoas e não requer absolutamente nenhum pensamento por parte do autor.

Obrigado pelas idéias.

Regras do HanClinto!


2

Depois de ter uma boa tabela MYSQL com algumas palavrões que você deseja filtrar (comecei com um dos links deste segmento), você pode fazer algo assim:

$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 />";

Tenho certeza de que existe uma maneira mais eficiente de fazer todas essas substituições, mas não sou inteligente o suficiente para descobrir isso (e isso parece funcionar bem, embora de maneira ineficiente).

Eu acredito que você deve errar ao permitir que os usuários se registrem e usar humanos para filtrar e adicionar à sua tabela de palavrões, conforme necessário. Embora tudo dependa do custo de um falso positivo (palavra ok sinalizada como ruim) versus um falso negativo (palavra ruim é exibida). Em última análise, isso deve governar o quão agressivo ou conservador você é em sua estratégia de filtragem.

Eu também tomaria muito cuidado se você quiser usar caracteres curinga, pois eles às vezes podem se comportar mais onerosamente do que você pretende.


1

Sinceramente, eu os deixaria divulgar as palavras "truque do sistema" e as baniria, que sou apenas eu. Mas também torna a programação mais simples.

O que eu faria é implementar um filtro regex assim: /[\s]dooby (doo?)[\s]/iou a palavra é prefixada nos outros /[\s]doob(er|ed|est)[\s]/. Isso impediria a filtragem de palavras como amenizado, o que é perfeitamente válido, mas também exigiria o conhecimento de outras variantes e a atualização do filtro real, se você aprender um novo. Obviamente, esses são todos exemplos, mas você teria que decidir como fazer isso sozinho.

Não vou digitar todas as palavras que conheço, não quando realmente não quero conhecê-las.


1

Concordo com a futilidade do assunto, mas se você tem que ter um filtro, confira Ning Boxwood :

Boxwood é uma extensão PHP para substituição rápida de várias palavras em um pedaço de texto. Ele suporta correspondência com distinção entre maiúsculas e minúsculas. Requer que o texto em que opera seja codificado como UTF-8.

Consulte também esta postagem no blog para obter mais detalhes:

Com o Boxwood, você pode ter sua lista de termos de pesquisa pelo tempo que desejar - o algoritmo de pesquisa e substituição não fica mais lento com mais palavras na lista de palavras a serem procuradas. Ele funciona construindo uma série de todos os termos de pesquisa e, em seguida, varre o texto do assunto apenas uma vez, percorrendo os elementos da série e comparando-os com os caracteres do seu texto. Ele suporta US-ASCII e UTF-8, correspondência sensível a maiúsculas ou minúsculas e possui alguma lógica de verificação de limites de palavras centrada em inglês.


1

Concluí que, para criar um bom filtro de palavrões, precisamos de três componentes principais, ou pelo menos é o que vou fazer. Estes são eles:

  1. O filtro: um serviço em segundo plano que é verificado em uma lista negra, dicionário ou algo parecido.
  2. Não permitir conta anônima
  3. Denunciar abuso

Um bônus, será recompensar de alguma forma aqueles que contribuírem com repórteres de abuso precisos e punir o agressor, por exemplo, suspender suas contas.


1

Também no final do jogo, mas fazendo algumas pesquisas e tropeçou por aqui. Como outros já mencionaram, é quase quase impossível se ele foi automatizado, mas se o seu design / requisito puder envolver em alguns casos (mas não o tempo todo) interações humanas para revisar se é profano ou não, você pode considerar o ML. https://docs.microsoft.com/pt-br/azure/cognitive-services/content-moderator/text-moderation-api#profanity é minha escolha atual no momento por vários motivos:

  • Suporta muitas localizações
  • Eles continuam atualizando o banco de dados, por isso não preciso acompanhar as gírias ou idiomas mais recentes (problema de manutenção)
  • Quando existe uma alta probabilidade (ou seja, 90% ou mais), você pode negar de forma pragmática
  • Você pode observar a categoria que causa uma bandeira que pode ou não ser profanada e alguém pode revisá-la para ensinar que é ou não é profana.

Para minha necessidade, foi / é baseado em serviço comercial público (OK, videogames) que outros usuários podem / verão o nome de usuário, mas o design exige que seja necessário passar por um filtro de palavrões para rejeitar nomes de usuário ofensivos. A parte triste disso é que o problema clássico "clbuttic" provavelmente ocorrerá, já que os nomes de usuário geralmente são uma única palavra (até N caracteres), às vezes várias palavras concatenadas ... Novamente, o serviço cognitivo da Microsoft não sinaliza "Assistência" como texto. HasProfanity = true, mas pode sinalizar uma das categorias com probabilidade de alta.

Como o OP pergunta, o que dizer de "a $$", eis um resultado quando eu o passei pelo filtro: insira a descrição da imagem aquicomo você pode ver, ele determinou que não é profano, mas tem alta probabilidade de ser, então sinaliza como recomendações de revisão (interações humanas).

Quando a probabilidade é alta, posso voltar "Sinto muito, esse nome já está sendo usado" (mesmo que não seja), para que seja menos ofensivo para pessoas anti-censura ou algo assim, se não quisermos para integrar a revisão humana ou retornar "Seu nome de usuário foi notificado ao departamento de operação em tempo real, você pode aguardar a revisão e aprovação do seu nome de usuário ou escolher outro nome de usuário". Como queiras...

A propósito, o custo / preço desse serviço é bastante baixo para o meu objetivo (com que frequência o nome de usuário é alterado?), Mas, novamente, para OP, talvez o design exija consultas mais intensas e talvez não seja o ideal para pagar / assinar Serviços de ML, ou não pode ter revisão / interações humanas. Tudo depende do design ... Mas se o design se encaixa na conta, talvez essa seja a solução da OP.

Se estiver interessado, posso listar os contras no comentário no futuro.


-2

Os filtros de palavrões são uma má ideia. A razão é que você não consegue entender todos os palavrões. Se você tentar, obtém falsos positivos.

Catching Words

Vamos apenas dizer que você quer pegar o F-Word. Fácil né? Bem vamos ver.

Você pode percorrer uma string para encontrar "fuck". Infelizmente, as pessoas enganam os filtros hoje em dia. O filtro de palavrões não pegou "fuk".

Pode-se tentar verificar várias grafias e variantes da palavra, mas isso diminuirá o desempenho do seu código. Para capturar o F-Word, você precisa procurar "fuc", "Fuc", "fuk", "Fuk", "F ***", etc. E a lista continua.

Evitando a inocência

Ok, então que tal torná-lo sem distinção entre maiúsculas e minúsculas e ignorar os espaços para que ele apareça "F u C k"? Pode parecer uma boa ideia, mas alguém pode simplesmente ignorar o filtro de palavrões com "FUCK"

Você ignora a pontuação.

Agora isso é um problema real, já que uma frase como " Inferno , aí!" vai pegar como "inferno" e "Wh ass up?" pega como "burro".

E lá é um monte de palavras que você tem que excluir o filtro, como "Contras tit ution", porque há "tit" nele.

As pessoas também podem usar palavras substitutas, como "Frack". Você bloqueou isso também? E quanto a "caneta é" para "pênis"? Seu programa não possui inteligência artificial para saber se a sequência é boa ou ruim.

Não use filtros de palavrões. Eles são difíceis de desenvolver e são tão lentos quanto um rastreamento.


2
-1 não responde à pergunta do OP e é principalmente um comentário de opinião. Existem muitos casos de uso válidos para este utilitário. Por exemplo, limpar o código-fonte antes de uma auditoria para que a empresa não fique constrangida.
davidjmcclelland

-3

Não.

Porque:

  • Clbuttic
  • Profanação não é OMG EVIL
  • Profanação não pode ser efetivamente definida
  • A maioria das pessoas provavelmente não gosta de ser "protegida" de palavrões

Edit: Embora eu concorde com o comentarista que disse que "a censura está errada", essa não é a natureza desta resposta.


90
10 votos para esta não resposta? Como se alguém que quisesse filtrar palavrões devesse ser um meio moralista? Minha nossa. Esta é uma pergunta válida e as respostas irritantes do drive-by não devem ser recompensadas. -1.
7128 Kluge

12
@ Kludge: Você é o único que disse "moralizar a inteligência", na verdade eu não disse nada sobre a natureza moral da implementação de um filtro de palavrões. Mitch traz à tona parte do motivo pelo qual eu disse "não", e não é um passeio sarcástico. Às vezes "não" é a resposta correta para "como faço para ...?" [continua]
eyelidlessness

2
@eyelidlessness: Talvez você esteja certo que eu li muito em sua resposta de uma única palavra. Mas, como você não elaborou, não sei dizer se suas objeções foram de natureza moral ou técnica. Admito que estou cansado de comentários "a censura de qualquer forma é ruim".
Kluge

5
-1. "Não" não é uma resposta válida, independentemente de questões morais ou técnicas. Muitas vezes é perfeitamente apropriado filtrar o conteúdo com base na natureza do conteúdo. Imagine um site de comércio eletrônico que venda roupas de baixo femininas e oferece o recurso "Comentários". Você realmente quer garotos pré-adolescentes espalhados pelo site com lixo? Claro que não. E talvez seja muito complicado ter um processo de aprovação humana. Um filtro simples para negar críticas com lixo é uma coisa boa.
Psp2

3
@pspahn, "don't" é a resposta correta para qualquer pergunta que solicite uma solução para o problema errado. Certamente existem casos válidos em que o conteúdo deve ser moderado, mas não é um "filtro de palavrões".
Eyelidlessness
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.