Estou tentando criar um conjunto de dados em vários arquivos de log de um de nossos produtos.
Os diferentes arquivos de log têm seu próprio layout e conteúdo; Eu os agrupei com sucesso, apenas um passo restante ...
De fato, as "mensagens" do log são as melhores informações. Não tenho a lista abrangente de todas essas mensagens, e é uma má idéia codificar com base nelas porque essa lista pode mudar todos os dias.
O que eu gostaria de fazer é separar o texto de identificação do texto de valor (por exemplo: "Arquivo carregado XXX" se torna (identificação: "Arquivo carregado", valor: "XXX")). Infelizmente, este exemplo é simples e, no mundo real, existem layouts diferentes e, às vezes, vários valores.
Eu estava pensando em usar kernels de string, mas é destinado a clustering ... e o cluster não é aplicável aqui (não sei o número de tipos diferentes de mensagens e, apesar de tudo, seria demais).
Você tem alguma ideia?
Obrigado pela ajuda.
PS: Para quem programa, isso pode ser mais fácil de entender. Digamos que o código contenha como logs printf ("blabla% s", "xxx") -> eu gostaria de ter "blabla" e "xxx" separados
fonte
Respostas:
Que tal considerar cada string como um rastreamento de processo e aplicar o algoritmo alfa? Isso forneceria um gráfico e os nós com um grande número de bordas provavelmente apontariam para valores.
Você pode marcar esses nós e, para cada nova sequência, analisar / percorrer o gráfico até chegar a essas áreas.
fonte
Isso não parece um problema de ciência de dados. No entanto, existem ferramentas muito boas para fazer exatamente isso, checkout: logstash, flume e fluentd. Na verdade, se você quiser filtrar de maneira rápida e "inteligente", faça o check-out do Kibana dos caras do ElastichSearch ( http://www.elasticsearch.org/overview/kibana ). Essas ferramentas são suficientes para resolver seu problema de maneira muito eficiente.
fonte
Se você está simplesmente tentando separar informações textuais e numéricas, existe uma solução baseada em expressões regulares ou mesmo na divisão de cadeias.
Você pode até encontrar algo como encontrar o primeiro caractere numérico e dividir o texto ao meio antes disso.
Com expressões regulares, você pode combinar todos os caracteres numéricos que se seguem. O padrão seria
([0-9]+)
com uma bandeira global. Combinaria com todos os grupos de números e você poderá fazer o que quiser com eles posteriormente.O Regex Tester é bom para brincar com essas coisas.
fonte