Próbuję zbudować zestaw danych na kilku plikach dziennika jednego z naszych produktów.
Różne pliki dziennika mają własny układ i własną zawartość; Z powodzeniem pogrupowałem je razem, pozostał tylko jeden krok ...
Rzeczywiście, „wiadomości” dziennika są najlepszą informacją. Nie mam wyczerpującej listy wszystkich tych wiadomości, a kodowanie na podstawie tych kodów jest złym pomysłem, ponieważ ta lista może się zmieniać każdego dnia.
Chciałbym oddzielić tekst identyfikujący od tekstu wartości (na przykład: „Załadowany plik XXX” staje się (identyfikacja: „Załadowany plik”, wartość: „XXX”)). Niestety, ten przykład jest prosty, aw prawdziwym świecie istnieją różne układy, a czasem wiele wartości.
Myślałem o użyciu jądra łańcuchów, ale jest on przeznaczony do klastrowania ... i cluseting nie ma tu zastosowania (nie znam liczby różnych typów komunikatów i chociaż to by było za dużo).
Masz jakiś pomysł?
Dzięki za pomoc.
PS: Dla programistów może to być łatwiejsze do zrozumienia. Powiedzmy, że kod zawiera jako logi printf („blabla% s”, „xxx”) -> Chciałbym mieć oddzielne „blabla” i „xxx”
źródło
Odpowiedzi:
A może traktować każdy ciąg jako ślad procesu i zastosować algorytm alfa? To dałoby ci wykres, a węzły z dużą liczbą krawędzi zewnętrznych najprawdopodobniej wskażą wartości.
Możesz zaznaczyć te węzły i dla każdego nowego łańcucha parsować / przemierzać wykres, aż dojdziesz do tych obszarów.
źródło
To nie wydaje się problemem Data Science. Istnieją jednak bardzo ładne narzędzia do tego, kasa: logstash, flume i płynnie. Właściwie, jeśli chcesz mieć możliwość filtrowania w szybki i „inteligentny” sposób, sprawdź Kibana od facetów z ElastichSearch ( http://www.elasticsearch.org/overview/kibana ). Te narzędzia wystarczą, aby rozwiązać problem w bardzo wydajny sposób.
źródło
Jeśli próbujesz po prostu oddzielić informacje tekstowe i liczbowe, istnieje rozwiązanie oparte na wyrażeniach regularnych, a nawet po prostu dzielenie ciągów.
Możesz nawet zrobić coś takiego jak znalezienie pierwszego znaku numerycznego i przedtem podzielić tekst na pół.
Za pomocą wyrażeń regularnych można dopasować wszystkie następujące po sobie znaki numeryczne. Wzór byłby
([0-9]+)
z flagą globalną. Pasowałby do wszystkich grup liczb i możesz potem robić z nimi wszystko, co chcesz.Regex Tester jest dobry do zabawy z tymi rzeczami.
źródło