Sto provando ad assegnare un punteggio di somiglianza basato sul confronto tra 2 stringhe. Esiste una funzione per lo stesso in R. Sono consapevole di tale funzione in SAS con il nome di SPEDIS. Per favore fatemi sapere se c'è una tale funzione in R.Punteggi di similarità basati sul confronto di stringhe in R (modifica distanza)
risposta
La funzione adist calcola lo Levenshtein edit distance tra due stringhe. Questo può essere trasformato in una metrica di similarità come 1 - (Levenshtein modifica distanza/lunghezza stringa più lunga).
La funzione levenshteinSim
nel pacchetto RecordLinkage lo fa anche direttamente e potrebbe essere più veloce di adist
.
library(RecordLinkage)
> levenshteinSim("apple", "apple")
[1] 1
> levenshteinSim("apple", "aaple")
[1] 0.8
> levenshteinSim("apple", "appled")
[1] 0.8333333
> levenshteinSim("appl", "apple")
[1] 0.8
ETA: È interessante notare che, mentre levenshteinDist
nel pacchetto RecordLinkage sembra essere leggermente più veloce di adist
, levenshteinSim
è notevolmente più lento di entrambi. Utilizzando il pacchetto rbenchmark:
> benchmark(levenshteinDist("applesauce", "aaplesauce"), replications=100000)
test replications elapsed relative
1 levenshteinDist("applesauce", "aaplesauce") 100000 4.012 1
user.self sys.self user.child sys.child
1 3.583 0.452 0 0
> benchmark(adist("applesauce", "aaplesauce"), replications=100000)
test replications elapsed relative user.self
1 adist("applesauce", "aaplesauce") 100000 4.277 1 3.707
sys.self user.child sys.child
1 0.461 0 0
> benchmark(levenshteinSim("applesauce", "aaplesauce"), replications=100000)
test replications elapsed relative
1 levenshteinSim("applesauce", "aaplesauce") 100000 7.206 1
user.self sys.self user.child sys.child
1 6.49 0.743 0 0
Questo sovraccarico è dovuto semplicemente al codice per levenshteinSim
, che è solo un wrapper levenshteinDist
:
> levenshteinSim
function (str1, str2)
{
return(1 - (levenshteinDist(str1, str2)/pmax(nchar(str1),
nchar(str2))))
}
FYI: se si sta sempre confrontano due stringhe piuttosto che vettori , è possibile creare una nuova versione che utilizza max
invece di pmax
e la barba ~ 25% il tempo di esecuzione:
mylevsim = function (str1, str2)
{
return(1 - (levenshteinDist(str1, str2)/max(nchar(str1),
nchar(str2))))
}
> benchmark(mylevsim("applesauce", "aaplesauce"), replications=100000)
test replications elapsed relative user.self
1 mylevsim("applesauce", "aaplesauce") 100000 5.608 1 4.987
sys.self user.child sys.child
1 0.627 0 0
Per farla breve, c'è poca differenza tra adist
e levenshteinDist
in termini di prestazioni, sebbene il primo sia preferibile se non si desidera aggiungere dipendenze del pacchetto. Il modo in cui lo trasformi in una misura di somiglianza ha un po 'di effetto sulle prestazioni.
Ciao, Sì, la funzione è utile. Inoltre, è possibile utilizzare questa funzione direttamente in una query sql. Sto usando pacchetto sqldf a scrivere una query SQL e assegnare il risultato di un frame di dati in R.example title_score <-sqldf ("seleziona a.id come mp_id, b.id come sp_id, caso quando levenshteinSim (a .title, b.title) tra 0 e 100 then ((100-levenshteinSim (a.title, b.title))/100) * c.prega altro 0 fine come title_score da allproducts a join allproducts b on a. subcategory_id = b.subcategory_id e a.id> b.id join filterweights c su b.subcategory_id = c.subcategory e c.filter_name = 'title' "); –
- 1. Modifica algoritmo di distanza
- 2. Python: punteggio di similarità semantico per le stringhe
- 3. Confronto di stringhe in Go
- 4. Fast Levenshtein distanza in R?
- 5. Modifica distanza in Python
- 6. distanza Mahalanobis in R
- 7. Confronta algoritmi di similarità
- 8. Java: confronto di stringhe e stringhe - Prestazioni
- 9. Confronto delle stringhe di data in Java
- 10. Confronto stringhe in EL
- 11. confronto stringhe in vb
- 12. confronto stringhe in bash
- 13. Confronto di stringhe PHP usando '=='
- 14. Confronto di sequenze multiple di stringhe arbitrarie con caratteri orientati
- 15. Confronto di stringhe in framework dotnet 4
- 16. Confronto di stringhe in Objective-C
- 17. Confronto di stringhe in bash. [[: non trovato
- 18. Confronto di stringhe in Python: è vs ==
- 19. Confronto senza problemi di stringhe in C#
- 20. confronto di stringhe in script bash
- 21. Segnali Qt basati sul valore di parametro
- 22. clustering con similarità coseno
- 23. Modifica distanza - Con memoizzazione
- 24. Operatori di confronto per stringhe C
- 25. Modifica la distanza tra due grafici
- 26. Confronto tra stringhe in AngularJS
- 27. Confronto di due stringhe di date ISO8601 in PHP
- 28. Costruire i punteggi dei caricamenti delle stampanti in R
- 29. Dati basati sul tempo in neo4j
- 30. Python converte stringhe di stringhe in stringhe
Hai esplorato 'adist' e' agrep'? Non ho familiarità con SPEDIS. – A5C1D2H2I1M1N2O1R2T1