Estoy tratando de construir un conjunto de datos en varios archivos de registro de uno de nuestros productos.
Los diferentes archivos de registro tienen su propio diseño y contenido; Los agrupé con éxito, solo quedaba un paso ...
De hecho, los "mensajes" de registro son la mejor información. No tengo la lista completa de todos esos mensajes, y es una mala idea codificar en base a ellos porque esa lista puede cambiar todos los días.
Lo que me gustaría hacer es separar el texto de identificación del texto del valor (por ejemplo: "Archivo cargado XXX" se convierte en (identificación: "Archivo cargado", valor: "XXX")). Desafortunadamente, este ejemplo es simple, y en el mundo real hay diferentes diseños y, a veces, múltiples valores.
Estaba pensando en usar núcleos de cadena, pero está destinado a la agrupación en clúster ... y la agrupación en clúster no es aplicable aquí (no sé la cantidad de diferentes tipos de mensajes y, aunque sería demasiado).
¿Tienes alguna idea?
Gracias por tu ayuda.
PD: Para aquellos que programan, esto puede ser más fácil de entender. Digamos que el código contiene como registros printf ("blabla% s", "xxx") -> Me gustaría tener "blabla" y "xxx" separados.
fuente
Respuestas:
¿Qué hay de considerar cada cadena como una traza del proceso y aplicar un algoritmo alfa? Eso le daría un gráfico y los nodos con un gran número de bordes externos probablemente apuntarán a valores.
Puede marcar estos nodos y para cada nueva cadena analizar / recorrer el gráfico hasta llegar a esas áreas.
fuente
Esto no parece un problema de ciencia de datos. Sin embargo, hay herramientas muy buenas para hacer exactamente eso, pagar: logstash, flume y fluentd. En realidad, si desea poder filtrar de forma rápida e "inteligente", consulte Kibana de los chicos de ElastichSearch ( http://www.elasticsearch.org/overview/kibana ). Esas herramientas son suficientes para resolver su problema de una manera muy eficiente.
fuente
Si simplemente está tratando de separar la información textual y numérica, entonces hay una solución basada en expresiones regulares o incluso simplemente en la división de cadenas.
Incluso podría hacer algo como encontrar el primer carácter numérico y dividir el texto por la mitad justo antes de eso.
Con expresiones regulares, puede hacer coincidir todos los caracteres numéricos que se suceden. El patrón sería
([0-9]+)
con una bandera global. Coincidiría con todos los grupos de números y puede hacer lo que quiera con ellos después.Regex Tester es bueno para jugar con esas cosas.
fuente