Sto cercando un algoritmo semplice e leggero per confrontare due stringhe semplici.Algoritmo di parole semplici
Per esempio, se prendiamo questi due stringhe:
- "The quick brown fox salta sul cane pigro"
- "La volpe marrone Plick tumps sopra il cane pazzo"
Dovrebbe segnalarmi che le 2 prime lettere della seconda parola sono diverse, ecc.
Per ora ho un algoritmo molto semplice che confronta le parole:
/// <summary>
/// Make a diff between two strings and returns words indices
/// </summary>
/// <param name="a"></param>
/// <param name="b"></param>
/// <returns></returns>
public static List<int> Diff(string a, string b)
{
List<int> indices = new List<int>();
string[] asplit = a.Split(' ');
string[] bsplit = b.Split(' ');
for (int i = 0; i < asplit.Length; i++)
{
if (bsplit.Length > i)
{
if (asplit[i].CompareTo(bsplit[i]) != 0)
{
indices.Add(i);
}
}
}
return indices;
}
Quindi questo mi dirà quali parole (utilizzando una divisione su caratteri dello spazio) sono diverse.
Ho letto molti argomenti qui intorno sull'implementazione dell'algoritmo complesso o sull'uso di una libreria esistente.
Ma io sono riqualificato dal .NET Compact Framework (WP7) e non voglio qualcosa che possa confrontare due file o due testi, ho solo bisogno di un confronto di parole.
C'è una libreria o un algoritmo che potrebbe adattarsi? Grazie :).
Cosa succede se una parola viene inserita nel mezzo di una delle frasi in modo da deviare la corrispondenza? Dovrebbe riportare ogni parola successiva diversa? –
Il metodo standard per risolvere questo problema consiste nell'implementare l'algoritmo Long Success Common Subsequence. È un algoritmo piuttosto semplice. Ho un'implementazione JScript qui: http://blogs.msdn.com/b/ericlippert/archive/2004/07/21/189974.aspx la conversione in C# è lasciata come esercizio. –
@James Michael Hare: diciamo che ho "il mio piccolo pony" e "il mio dolce piccolo pony", dovrebbe solo riportare "dolce". Penso che il mio algoritmo troppo semplice non riesca per questo. – Valryon