using System.Text.RegularExpressions;
public static void Main(string[] args)
string text1 = "Juridical Adviser";
string text2 = "Adviser Juridical";
int distance = LevenshteinDistance(text1, text2);
double similarity = GetSimilarity(text1, text2);
Console.WriteLine("La distancia de Levenshtein entre los dos textos es: {0}", distance);
Console.WriteLine("La similitud entre los dos textos es: {0}%", similarity);
static int LevenshteinDistance(string s, string t)
s = Regex.Replace(s, "[^A-Za-z0-9]", "");
t = Regex.Replace(t, "[^A-Za-z0-9]", "");
int[,] d = new int[s.Length + 1, t.Length + 1];
for (int i = 0; i <= s.Length; i++)
for (int j = 0; j <= t.Length; j++)
for (int j = 1; j <= t.Length; j++)
for (int i = 1; i <= s.Length; i++)
int cost = (s[i - 1] == t[j - 1]) ? 0 : 1;
Math.Min(d[i - 1, j] + 1, d[i, j - 1] + 1),
return d[s.Length, t.Length];
static double GetSimilarity(string s, string t)
s = Regex.Replace(s, "[^A-Za-z0-9 ]", "");
t = Regex.Replace(t, "[^A-Za-z0-9 ]", "");
var sWords = s.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).OrderBy(x => x).ToArray();
var tWords = t.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).OrderBy(x => x).ToArray();
var intersection = sWords.Intersect(tWords);
int sLength = sWords.Length;
int tLength = tWords.Length;
int intersectionLength = intersection.Count();
double similarity = ((double)intersectionLength / ((sLength + tLength) / 2)) * 100;