Programmazione.it v6.4
Ciao, per farti riconoscere devi fare il login. Non ti sei ancora iscritto? Che aspetti, registrati adesso!
Info Pubblicità Collabora Autori Sottoscrizioni Preferiti Bozze Scheda personale Privacy Archivio Libri Corsi per principianti Forum
Algoritmi di similarità (2/2)
Scritto da Dario Guadagno il 20-09-2007 ore 09:54
Intel Parallel Studio XE
Ben più sofisticato ed efficacie, invece, è l'algoritmo di calcolo della distanza di Levenshtein. L'obiettivo del procedimento è il calcolo del numero minimo di trasformazioni necessarie per rendere una parola uguale all'altra. Le trasformazioni possibili sono: substitute (sostituzione di un carattere), delete (rimozione di un carattere), insert (aggiunta di un carattere). Ad esempio, le parole "mister" e "mounted" hanno distanza di Levenshtein=4, poiché con tre substitute — la 'i' diventa 'o', la 's' diventa 'u' e la 'r' diventa 'd' — ed una insert (inserimento della 'n'), da "mister" si ottiene "mounted".

È importante notare come questo algoritmo dia ottimi risultati nei più comuni errori di battitura: ad esempio "mister" ha distanza 1 da parole come "misteer" o "misster" (doppia digitazione involontaria di un carattere), "midter" (digitazione di un carattere al posto di un altro), "mistr" o "miter" (omissione di un carattere), ma risulta avere distanza 2 dalla parola che si ottiene in caso di pressione invertita di due lettere (ad esempio "mitser" o "msiter"). Per ottimizzare anche la gestione di questa eventualità di errore, è possibile introdurre la trasformazione switch (inversione di due lettere adiacenti), sebbene questa aggiunta possa penalizzare l'efficienza computazionale dell'algoritmo.

Il secondo problema, invece, tratta il caso di errata trascrizione di un testo ascoltato. In questo caso, ciò che conta è la sonorità delle lettere: ad esempio le lettere 'm' e 'n', 'b' e 'p', 't' e 'd', ecc. hanno suono simile e potrebbero essere confuse tra loro. L'algoritmo Soundex offre un'efficacie soluzione a questo inconveniente, associando a ciascuna stringa da cui sono rimosse le vocali e le lettere H, W e Y, un codice formato dall'iniziale della parola e da una cifra per ognuna delle successive 3 consonanti. E' importante notare che la stessa cifra corrisponde a consonanti dal suono simile: in pratica, ad ogni stringa corrisponde un codice di 4 caratteri (una lettera e 3 numeri), e il confronto di similarità tra stringhe avviene calcolando le differenze tra i codici; parole simili hanno lo stesso codice Soundex. Si può notare che, ad esempio, le parole "Rupert" e "Robert" risultano simili secondo l'agoritmo Soundex. Una variante di questo algoritmo è anche alla base della funzione difference presente in MS SQL per le query su stringhe di testo.
Precedente: Velocizzare le applicazioni AJAX e migliorarne la sicurezza (4/4)
Successiva: Excel in azienda - Analisi delle vendite
Intervento di Diego De Zan a.k.a. simulacron del 20-09-2007 ore 10:12, Pinerolo (TO)
Conte
Conte

(632 interventi)
Iscritto il 13-07-2005
Interessante...vado a leggermi l'artra parte e prendo nota....magari posso tenerne conto nei miei articoli di IA (tornano, tornano.....)
Intervento di Andrea M a.k.a. iwbakh del 20-09-2007 ore 16:42, Ancona (AN)
Plebeo
Plebeo
(41 interventi)
Iscritto il 28-06-2004
Una piccola precisazione: l'algoritmo Soundex è valido per l'inglese mentre può risultare impreciso per l'italiano o altre lingue.
Intervento di Diego De Zan a.k.a. simulacron del 20-09-2007 ore 18:40, Pinerolo (TO)
Conte
Conte

(632 interventi)
Iscritto il 13-07-2005
Citazione:
Una piccola precisazione: l'algoritmo Soundex è valido per l'inglese mentre può risultare impreciso per l'italiano o altre lingue.

Naturalmente.....
Precisazione per precisazione (è una battuta....) Questi algoritmi viaggiano in parallelo con le ditanze (o differenze) di Hamming che possono misurare le differenze tra due stringhe di simboli contando quanti sono differenti a parità di tutto il resto.
Intervento di Gianluca Moretti a.k.a. gianmoretti del 16-02-2010 ore 10:08, Mozzanica (BG)
Plebeo
Plebeo
(35 interventi)
Iscritto il 06-10-2006
Rispetto alla lingua italiana, che algoritmo fonetico di similarità suggerite? Ne conoscete qualche interessante implementazione?
Copyright Programmazione.it™ 1999-2013. Alcuni diritti riservati. Testata giornalistica iscritta col n. 569 presso il Tribunale di Milano in data 14/10/2002. Pagina generata in 0.326 secondi.