2009-12-02 8 views
5

Dado un conjunto de palabras etiquetadas para parte del discurso, quiero encontrar aquellas que son obscenidades en el inglés general. ¿Cómo podría hacer esto? ¿Debo hacer una gran lista y verificar la presencia de algo en la lista? ¿Debo tratar de usar una expresión regular para capturar un montón de variaciones en una sola raíz?Procesamiento de lenguaje natural: ¿encuentra obscenidades en inglés?

Si lo hace más fácil, no quiero filtrar, solo para obtener un conteo. Entonces, si hay algunos falsos positivos, no es el fin del mundo, siempre que haya una tasa más o menos uniformemente exagerada.

+18

Antes de hacer esto, es posible que desee confirmar que sus suposiciones son correctas. No querrás embarrillarte implementando esto de manera deficiente, haciendo que tus usuarios abandonen la competencia. – JulianR

+0

sí, es por eso que no estoy solucionando nada, solo trato de contar. –

+0

@Julian - De acuerdo, eso sería un error clbuttic. http://www.codinghorror.com/blog/archives/001176.html –

Respuesta

10

Una lista enorme y piense en el público objetivo. ¿Hay algún servicio de terceros que pueda usar que se especialice en esto en lugar de rodar uno propio?

Algunos pensamientos rápidos:

  • El problema Scunthorpe (y seguir los enlaces para "Swear filter" para más)
  • Británico o Inglés Americano? fanny, marica, etc.
  • Corrección política: "black" or "Afro-American"?

Editar:

+0

Aquí hay algunas listas: http://fffff.at/googles-official-list- of-bad-words/http://www.noswearing.com/dictionary – Renaud

2

Haría una gran lista.

Regex tiene el problema de fallar, cuando se aplica al lenguaje natural, especialmente con una cantidad de excepciones que tiene el inglés.

+0

Enormes listas de expresiones regulares podría ser mejor. Supongamos que "nariz" es una mala palabra: podría escribir "n osa" o "n0se" o "noze" o "n0z3" o lo que sea, y querrías encontrarla. Tener clases de caracteres como [0oO] y [sSzZ] va a hacer que la lista sea mucho más fácil. –

+0

@David: y mucho más propenso a errores. He visto foros que bloquean palabras legítimas solo porque los autores no se han dado cuenta de que su expresión real capta algo legítimo, y esto era ruso, donde tal cosa es mucho menos probable que en inglés (menos palabras que difieren en una sola letra, por ejemplo) – EFraim

+0

Una expresión regular es solo otra forma si se implementa un trie, que es solo una forma más compacta de implementar una lista de palabras. Tendrás que equilibrar el problema de Scunthorpe con los ataques de reemplazo de personaje sin importar el algoritmo que uses. –

0

Depende de qué fuente de texto es, pero yo iría por algún tipo de algoritmo de coincidencia de patrones establecido y comprobado, usando un Trie por ejemplo.

2

Tenga en cuenta que cualquier lógica PNL como esto estará sujeto a ataques de "sustitución de caracteres":

Por ejemplo, puede escribir "hola" como "he11o", en sustitución de L's con la propia. Lo mismo con obscenidades. Entonces, si bien no hay una respuesta perfecta, un enfoque de "lista negra" de "malas palabras" podría funcionar. Tenga cuidado con los falsos positivos (correría mi lista negra contra un libro grande para ver qué aparece)

0

Utilice el lematizador morphy integrado en WordNet y luego determine si el lema es una obscenidad. Esto resolverá el problema de diferentes formas verbales, plurales, etc ...

1

Un problema con los filtros de este tipo es su tendencia a señalar nombres de ciudades inglesas como Scunthorpe. Si bien eso se puede reducir al verificar toda la palabra en lugar de partes, luego encontrará personas que se aprovechan al fusionar sus palabras ofensivas con texto adyacente.

0

Defendería una lista grande de simple regex's. Más pequeño que una lista de variantes, pero no tratando de capturar nada más que letras alternativas en cualquier expresión dada: como "f [u _- @ # $%^& *.] Ck".

0

Quiere utilizar Bayesian Analysis para resolver este problema. La probabilidad bayesiana es una poderosa técnica utilizada por los filtros de correo no deseado para detectar mensajes de spam/phishing en la bandeja de entrada de su correo electrónico.Puede entrenar su motor de análisis para que pueda mejorar con el tiempo. La capacidad de detectar un correo electrónico legítimo frente a un correo electrónico no deseado suena igual al problema que está experimentando.

Aquí hay un par de enlaces de interés:

A Plan For Spam - La primera propuesta de utilizar el análisis bayesiano para combatir el spam.

Data Mining (ppt) - Esto fue escrito por un colega mío.

Classifier4J - Una biblioteca de clasificadores de texto escrita en Java (existen para todos los idiomas, pero etiquetó esta pregunta con Java).

+0

Los clasificadores de texto Bayesianos ingenuos realmente no ayudan con el problema de encontrar palabras individuales en un documento. Filtrar obscenidades de un documento (cuando presumiblemente desea conservar el resto del documento) es muy diferente de detectar si el correo electrónico en su conjunto tiene un contenido valioso. Además, pasarán muchas cosas si intentas filtrar las malas palabras al bloquear todo el correo electrónico según el contenido. –

+0

La pregunta establece que no hay intención de 'filtrar' nada; solo para contar el número de obscenidades en el texto. Un problema que se plantea es que una palabra puede ser o no una obscenidad (dependiendo de su contexto léxico). Probabilidad bayesiana sería útil para determinar si una oración (o una pieza de texto más grande) contiene lenguaje profano.Las oraciones que puedan contener blasfemias se pueden incluir en un algoritmo separado, responsable de contar cada palabra obscena (por lo tanto, se usa como filtro, pero solo para localizar texto que tiene una alta probabilidad de ser ofensivo). –

+0

Creo que el contexto léxico es mucho menos problemático de lo que crees, y solo agregaría la clasificación bayesiana para tratar el contexto si un enfoque basado puramente en listas de palabras no ayuda. Aun así, no lo haría en oraciones, sino que lo haría en una ventana de 5 a 10 palabras alrededor del lexema en cuestión. –

8
+4

¿Cómo sé que eres británico antes de mirar tu perfil ... ;-) – gbn

+0

Estoy de acuerdo con el punto que se está haciendo tan elocuentemente con esta respuesta. Una palabra en sí misma es inofensiva hasta que se considere su intención. El simple borrado o filtrado de palabras rara vez es una forma satisfactoria de evitar problemas. – Bobulous

0

Hay servicios web que hacen este tipo de cosas en inglés.

Estoy seguro de que hay otros, pero he usado WebPurify en un proyecto precisamente por este motivo.

0

En Melissa Data, cuando mi gerente, el director de Investigación y Desarrollo de Massachusetts y yo rediseñamos un Analizador de Datos dirigido a Bases de Datos Relacionales, contamos las palabras profanas por el número de coincidencias Distancia de Levinshtein donde el número de inserciones, eliminaciones y sustituciones es Ajustable por el usuario para permitir errores ortográficos, equivalentes germánicos de inglés, plurales, así como puntuación en espacios en blanco y no blancos. Aceleramos el tiempo de ejecución del cálculo de distancia de Levinshtein al observar solo las bandas diagonales de la matriz n por n.

Cuestiones relacionadas