2009-02-01 13 views
7

Proporcioné algunos de mis programas con una función de retroalimentación. Desafortunadamente, me olvidé de incluir algún tipo de protección contra correo no deseado, para que los usuarios pudieran enviar lo que quisieran a mi servidor, donde cada respuesta se almacena en una gran base de datos.Algoritmo para separar el texto sin sentido del texto significativo

Al principio revisé periódicamente esas retroalimentaciones - filtré lo que se podía usar y eliminé la basura. El problema es: obtengo 900 retroalimentaciones por día. Sólo 4-5 son realmente útiles, los otros mensajes son en su mayoría de tipo 2 galimatías:

  • sin sentido: jfvgasdjkfahs kdlfjhasdf (La gente rompiendo la cabeza en el teclado)
  • idioma que no entiendo

Lo que hice hasta ahora:

  1. he instalado un filtro para eliminar cualquier comentario que contiene "asdf", "qwer", etc ... -> a 700 por día

  2. He instalado un filtro de palabras a delte cualquier cosa que contenga lenguaje inapropiado -> 600 por día (no preguntar - pero hay muchas personas extrañas por ahí)

  3. que filtrar los mensajes que contienen letras que no son utilizados en mi lenguaje -> 400 por día

Pero 400 por día sigue siendo demasiado. Así que me pregunto si alguien ya se ha enfrentado a ese problema antes y conoce algún tipo de algoritmo para filtrar los mensajes sin sentido.

¡Cualquier ayuda sería realmente apreciada!

Respuesta

12

¿Qué le parece simplemente utilizar una implementación existente de un filtro de spam bayesiano en lugar de implementar el suyo propio? He tenido buenos resultados con DSpam

2

Busque modelos Claude Shannon y Markov. Estos conducen a una técnica estadística para evaluar las probabilidades de que las combinaciones de letras provengan de una fuente de idioma específica.

Here son algunas notas de curso relevantes de la Universidad de Princeton.

6

Si solo espera (o le interesan) los comentarios en inglés, ¿por qué no simplemente cuenta el número de palabras válidas (con respecto a algún diccionario) en los comentarios cargados? Si el número supera cierto umbral, acepte los comentarios. Si no, basura. Esta heurística simple podría extenderse a otros idiomas al agregar sus diccionarios.

12

Un enfoque ligeramente diferente sería configurar un sistema para enviar por correo electrónico los mensajes de retroalimentación a una cuenta y usar el filtrado estándar de correo no deseado. Podrías enviarlos a través de Gmail y dejar que sus filtros tomen una oportunidad. No es perfecto, pero tampoco requiere demasiado esfuerzo para implementarlo.

+3

Oooh, rápido y sucio, hackish y de alguna manera completamente repugnante ... ¡Me encanta!: D – Rob

+1

Upvoted por la singularidad :) – Ross

+0

+1 por piggybacking de Gmail - eso es probablemente lo que yo también haría; su filtrado de spam es excelente y como solución rápida (y bastante fácil) definitivamente vale la pena intentarlo como primer esfuerzo. Buena sugerencia práctica y sin complicaciones. –

5

Tuve un problema de spam en una función de libro de visitas en uno de mis sitios a (bastante largo) hace tiempo. Mi solución fue simplemente agregar un pequeño tipo de captcha Q & Un campo preguntando al usuario "¿Eres un robot de spam?" Cualquier respuesta que contenga la palabra "no" (dejar pasar "no, no estoy", "no" y "nada", solo por diversión ...) permitió al usuario publicar ...

La razón por la que elegí no usar captcha fue simplemente que mis usuarios querían una sensación más "acogedora" para el sitio, y un captcha se sentía demasiado formal.Esto era más personal =)

3

El método más simple sería contar la ocurrencia de cada letra. E es la letra más común en inglés, por lo que debe usarse más. También puede verificar la frecuencia de palabras y dígrafos. Eche un vistazo a here para obtener la lista de los más utilizados en inglés

+0

Esto sería bueno para detectar el idioma y filtrar los idiomas no deseados. Bunt lamentablemente esto no filtrará el texto sin sentido. –

+0

Filtraría texto sin sentido, porque el texto sin sentido no tiene las estadísticas correctas. Si presionas el teclado al azar, entonces E no será la letra más tipeada – Marius

+0

Estadísticamente, esto funciona para cadenas largas, pero no siempre para cadenas cortas. (Tenga en cuenta que la oración anterior no contiene una "E", pero eso no significa que deba marcarla como correo no deseado.) – RexE

0

Las respuestas anteriores sobre los flejes un poco de filtro de spam bayesiano classfier-inspirados son una buena idea. Para su aplicación, dado que parece obtener muchas palabras largas y sin sentido, sería mejor activar una opción en su analizador para entrenar en bigramas y trigramas; de lo contrario, muchas de las palabras sin sentido se tratarán como "nunca antes vistas", lo cual no es el análisis más útil en su caso.

2

Fidelis Assis y yo hemos estado adaptando el filtro de correo no deseado OSBF-Lua para que se pueda adaptar fácilmente a otras aplicaciones, incluidas las aplicaciones web. Este filtro de spam ganó el concurso de spam TREC tres años seguidos. (No me importa presumiendo porque el algoritmo es Fidelis de, no la mía.)

Si desea probar las cosas, tenemos código "beta casi" en

git clone http://www.cs.tufts.edu/~nr/osbf-lua-temp 

Somos todavía un largo camino de tener una versión ordenada, pero el código debería compilar siempre que instale automake 1.9. Cualquiera de nosotros estará encantado de aconsejarle sobre cómo usarlo para limpiar su base de datos e integrarla en su aplicación.

0

Sí, como señalaron las personas, puede consultar los filtros de correo no deseado o los Modelos de Markov.

Algo más simple sería contar las diferentes palabras en cada respuesta y ordenar por frecuencia. Si palabras como las siguientes no están en la parte superior, entonces es probable que no texto válido:

la, un, en , de, y , o , ...

Son la palabra más utilizada en cualquier texto inglés habitual.

0

Simplemente almacene los comentarios en un estado pendiente, páselos a través de Akismet o Defensio, y utilice la respuesta para marcarlos como posible correo no deseado o márquelos activos.

http://akismet.com/

http://defensio.com/

yo personalmente prefiero API de Defensio pero ambos funcionan fantásticamente bien.

Cuestiones relacionadas