Ho scoperto l'eccellente pacchetto "stringdist" e ora voglio usarlo per calcolare le distanze tra le stringhe. In particolare, ho un set di parole e voglio stampare le partite ravvicinate, dove "near match" è attraverso un algoritmo come la distanza di Levenshtein.R: produrre un elenco di corrispondenze ravvicinate con stringdist e stringdistmatrix
Ho un codice di lavoro estremamente lento in uno script di shell, e sono stato in grado di caricare in stringdist e produrre una matrice con le metriche. Ora voglio ridurre quella matrice in una matrice più piccola che ha solo le corrispondenze ravvicinate, ad es. dove la metrica è diversa da zero ma inferiore a qualche soglia.
kp <- c('leaflet','leafletr','lego','levenshtein-distance','logo')
kpm <- stringdistmatrix(kp,useNames="strings",method="lv")
> kpm
leaflet leafletr lego levenshtein-distance
leafletr 1
lego 5 6
levenshtein-distance 16 16 18
logo 6 7 1 19
m = as.matrix(kpm)
close = apply(m, 1, function(x) x>0 & x<5)
> close
leaflet leafletr lego levenshtein-distance logo
leaflet FALSE TRUE FALSE FALSE FALSE
leafletr TRUE FALSE FALSE FALSE FALSE
lego FALSE FALSE FALSE FALSE TRUE
levenshtein-distance FALSE FALSE FALSE FALSE FALSE
logo FALSE FALSE TRUE FALSE FALSE
OK, ora ho un (grande) dist, come faccio a ridurre di nuovo a una lista in cui l'uscita sarebbe qualcosa di simile
leafletr,leaflet,1
logo,lego,1
per i casi solo se la metrica è non- zero e meno di n = 5? Ho trovato "apply()" che mi permette di fare il test, ora ho bisogno di capire come usarlo.
Il problema non è specifico per stringdist e stringdistmatrix ed è molto elementare R, ma comunque sono bloccato. Sospetto che la risposta riguardi il sottoinsieme(), ma non so come trasformare un "dist" in qualcos'altro.
Sarebbe utile se potessi mostrarci 'kpm' o" la tua grande matrice "in modo che sappiamo con cosa stai lavorando. In alternativa, è possibile rendere riproducibile il problema, fornendo alcuni dati fittizi o dati reali 'dput (head (read.table (" ... "), 20))' e includendolo nella domanda. –
Grazie Brandon, lo farò, ridurrò a una matrice 5x5 e includerò tutto il codice. Lavorava con un originale di 100 dimensioni. – vielmetti