Ho bisogno di abbinare i frammenti in arrivo di testo semi-strutturato ai frammenti precedentemente incontrati.
La maggior parte dei frammenti di testo ha una dimensione da ~ 200 a ~ 4000 caratteri e contiene sia testo leggibile dall'uomo (poche frasi al massimo) sia testo generato dalla macchina - stringa e codici numerici, ID, URI ecc.
Ho usato il cluster K-Means con varie misure di distanza con un certo successo, ma è troppo lento per dataset di grandi dimensioni (o forse è la mia implementazione?) - ~ 1000 elementi vengono raggruppati in circa 30 secondi ma 10000 richiedono più di 10 minuti produce ~ 150 cluster.
Ho provato LSH / Minhash ma la natura probabilistica degli hash a volte manca tag importanti e smarrisce alcuni dei frammenti di conseguenza, in più il calcolo hash non migliora la velocità molto per testi così piccoli - il costo del calcolo dell'hash 300 i valori non sono 0 e quindi la matrice di 300 valori si trova in prossimità del numero di "parole" in cui i frammenti vengono interrotti in ogni caso.
Qual è l'algoritmo di clustering più veloce che sarebbe adatto per l'attività? Idealmente qualcosa che potrei implementare da zero, non un software / servizio / pacchetto pronto.
Idea come appare l'input:
[Timestamp] A package of type Box with ID 123456 was not successfully checked in. [FKFGSIGURE] 12345 ~\logs\checkin-08-01.log Host:123.123.123.123 Pod:somepodname <...more stuff here...>
[DateTime] Invalid access attempt at Door 123. Badge XYZ was declined access. Suspending badge for 5 minutes. 23456 ~\logs\checkin-06-01.log Host:13.23.13.12 <...more junk...>
[Date] [Time] Host: 2.3.4.5 restart failed
etc x100000