Domanda

Ho notato alcuni post qui sulla corrispondenza delle stringhe, che mi hanno ricordato un vecchio problema che vorrei risolvere.Qualcuno ha un bene Levenstein-simil-algoritmo ponderato per le tastiere Qwerty?

Voglio confrontare due stringhe e consentire errori di battitura.Levenshtein va bene, ma preferirei accettare anche errori di ortografia basati sulla distanza fisica tra i tasti della tastiera Qwerty.In altre parole, l'algoritmo dovrebbe preferire "yelephone" a "zelephone" poiché il tasto "y" si trova più vicino al tasto "t" che al tasto "z" sulla maggior parte delle tastiere.

Qualsiasi aiuto sarebbe grande...questa funzionalità non è centrale nel mio progetto, quindi non voglio virare in una tana di topi quando dovrei fare qualcosa di più produttivo.

È stato utile?

Soluzione

In bioinformatica quando si allineano due sequenze di DNA si potrebbe avere un modello che ha un costo diverso a seconda che la sostituzione sia una transizione o una trasversione.Questo è esattamente quello che vuoi ma invece di una matrice 4x4, vuoi una matrice 40x40 o qualcosa del genere, oserei dire funzione di distanza?Quindi il costo di una sostituzione dipende dalla matrice/funzione, non da una costante.

AVVERTIMENTO:Assicurati però che le eliminazioni e gli inserimenti siano ponderati correttamente, in modo che non siano accettati eccessivamente come minimo.Ti ritroverai con una stringa di caratteri di inserimento/cancellazione/sostituzione senza modifiche.

La nuova funzione che stai cercando di minimizzare sarebbe:

d[i, j] := minimum(
    d[i-1, j] + del_cost,
    d[i, j-1] + ins_cost,
    d[i-1, j-1] + keyboard_distance( s[i], t[j] )
)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top