¿Cómo agrupar mensajes de texto desconocidos usando un algoritmo?

El siguiente es el conjunto de datos de muestra que necesito agrupar, si observa detenidamente, en su mayoría son líneas de texto similares, pero con una diferencia muy pequeña de tener una identificación de persona o una identificación.

Unexpected error:java.lang.RuntimeException:Data not found for person 1X99999123 . Clear set not defined . Dump
Unexpected error:java.lang.RuntimeException:Data not found for person 2X99999123 . Clear set not defined . Dump
Unexpected error:java.lang.RuntimeException:Data not found for person 31X9393912 . Clear set not defined . Dump
Unexpected error:java.lang.RuntimeException:Data not found for person 36X9393912 . Clear set not defined . Dump
Exception in thread "main" javax.crypto.BadPaddingException: ID 1 Given final block not properly padded
Exception in thread "main" javax.crypto.BadPaddingException: ID 2 Given final block not properly padded
Unexpected error:java.lang.RuntimeException:Data not found for person 5 . Clear set not defined . Dump
Unexpected error:java.lang.RuntimeException:Data not found for person 6 . Clear set not defined . Dump
Exception in thread "main" java.lang.NullPointerException at TripleDESTest.encrypt(TripleDESTest.java:18)

Quiero agruparlos para que el resultado final sea como

Unexpected error:java.lang.RuntimeException:Data not found - 6
Exception in thread "main" javax.crypto.BadPaddingException - 2
Exception in thread "main" java.lang.NullPointerException at - 1

¿Existe una API o un algoritmo disponible para manejar estos casos?

Gracias de antemano. Saludos Shakti

preguntado el 03 de mayo de 12 a las 15:05

Supongo que no conoces a priori el formato de los mensajes. ¿Estás buscando un algoritmo de clasificación? ¿Tienes datos de entrenamiento? -

3 Respuestas

La pregunta está etiquetada como aprendizaje automático, por lo que sugeriré un enfoque de clasificación.

Puede tokenizar cada cadena y usar todos los tokens del conjunto de entrenamiento como posibles funciones booleanas: una instancia tiene la función, si contiene este token.

Ahora, utilizando estos datos, puede construir (por ejemplo) un C4.5 - a árbol de decisión de los datos Asegúrese de que el árbol use poda una vez que esté construido y que el número mínimo de ejemplares por hoja sea >1.

Una vez que se construye el árbol, ¡el propio árbol realiza la "agrupación"! Cada hoja contiene los ejemplos que se consideran similares entre sí.

Ahora puede extraer estos datos recorriendo el árbol de clasificación y extrayendo las muestras almacenadas en cada hoja en su grupo correspondiente.

Notas

  • Este algoritmo fallará para los datos de muestra que proporcionó porque no puede manejar bien si un mensaje es único (el NPE en su ejemplo); probablemente estará en la misma hoja que BadPaddingException.
  • No es necesario reinventar la rueda: puede utilizar Weka - una biblioteca de aprendizaje automático de código abierto en Java u otras bibliotecas existentes para los algoritmos
  • En lugar de usar los tokens como características binarias, también pueden ser características numéricas, puede usar dónde está el token en la cadena, ¿es el primero o el décimo?

contestado el 03 de mayo de 12 a las 15:05

Gracias. Aunque no sé mucho sobre Weka, pero esto es lo que estaba buscando. - Shakti

@Shakti: Weka es solo una sugerencia que me gusta usar, puede elegir su implementación favorita de C4.5 o implementar una usted mismo (aunque probablemente será más fácil descargarla y comprender cómo usarla en Weka que implementarla desde rasguño) - amit

Creo que probablemente debería crear un método que analice el texto y filtre el patrón que desea eliminar... Sin embargo, no estoy completamente seguro de lo que quiere hacer...

Creo que lo que quieres hacer probablemente se puede lograr a través de la clase StringTokenizer...

contestado el 03 de mayo de 12 a las 15:05

Si conoce el formato de los mensajes, la forma más fácil es usar expresiones regulares y contar las coincidencias.

Las expresiones regulares son totalmente compatibles con Java y su uso es seguramente más rápido que un algoritmo de agrupación.

contestado el 04 de mayo de 12 a las 09:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.