|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Jun 2011
Messaggi: 132
|
distanza di leveshtein(o di editing)
[C++]ciao a tutti sto facendo un dizionario con gli alberi binari di ricerca e quando effettuo una ricerca se una parola non è nel dizionario devo stampare le parole più simili e quindi uso la distanza di leveshtein...solo che ho un problema...non funziona tanto bene XD nel senso che quando cerco una parola se non c'è non mi stampa le parole più simili...vi metto il codice spero che mi riuscite ad aiutare...
questo è l'algoritmo di distanza di levshtein Codice:
int matching::dist_Levenshtein(string x, string y) { int row = x.size()+1; int col = y.size()+1; int m[row][col]; // riempio prima riga e prima colonna for( int i = 0; i < row; i++) { m[i][0] = i; } for( int j = 0; j < col; j++) { m[0][j] = j; } // inizio a calcolare la distanza for( int i = 1; i < row; i++ ) { for( int j = 1; j < col; j++ ) { if(x.at(i-1) != y.at(j-1) ) m[i][j] = Minimo( m[i-1][j] + 1, // inserimento m[i][j-1] + 1, // cancellazione m[i-1][j-1] // sostituzione ); } } int result = m[row-1][col-1]; return result; } Codice:
void matching::trova_suggerimenti() { multimap<int, int> dist_Lev; /*~~~~~~~~~~~~~~~~~~~*/ for(register int i = 0; i < parola_vocabolario.size(); i++) dist_Lev.insert(pair<int, int> (dist_Levenshtein(parola_vocabolario[i], parola), i)); multimap<int, int>::iterator iter = dist_Lev.end(); iter--; int massimo = iter->first; do { suggerimenti.push_back(parola_vocabolario[iter->second]); iter--; }while(iter->first == massimo); } |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:51.