2017-02-06 6 views
1

Приведенный ниже код выполняет эту работу, но занимает много времени. Я сравниваю содержимое двух файлов HTML, которые я сохранил в виде строки в MongoDB. И длина строки составляет около 30K + и имеет около 250K + записей для сравнения. Таким образом, работа занимает довольно много времени.Как сравнить две строки и найти процент сходства

Есть ли более простой способ или плагин для использования и довольно быстро?

private int ComputeCost(string input1, string input2) 
{ 
    if (string.IsNullOrEmpty(input1)) 
     return string.IsNullOrEmpty(input2) ? 0 : input2.Length; 

    if (string.IsNullOrEmpty(input2)) 
     return string.IsNullOrEmpty(input1) ? 0 : input1.Length; 

    int input1Length = input1.Length; 
    int input2Length = input2.Length; 

    int[,] distance = new int[input1Length + 1, input2Length + 1]; 

    for (int i = 0; i <= input1Length; distance[i, 0] = i++) ; 
    for (int j = 0; j <= input2Length; distance[0, j] = j++) ; 

    for (int i = 1; i <= input1Length; i++) 
    { 
     for (int j = 1; j <= input2Length; j++) 
     { 
      int cost = (input2[j - 1] == input1[i - 1]) ? 0 : 1; 

      distance[i, j] = Math.Min(
           Math.Min(distance[i - 1, j] + 1, distance[i, j - 1] + 1), 
           distance[i - 1, j - 1] + cost); 
     } 
    } 

    return distance[input1Length, input2Length]; 
} 
+0

Разве это не то, что «[Soundex] (https://en.wikipedia.org/wiki/Soundex)» для? –

+1

Вы вычисляете * Изменить расстояние *, https://en.wikipedia.org/wiki/Edit_distance правильно? –

+0

Почему вы не сравниваете строки в самой базе данных? Я бы попробовал, как обычно, быстрее. – danny

ответ

1

В соответствии с @Kay Lee, сделана функция статического и используемого пакета гибкости HTML для удаления ненужных данных. И увидел хорошее улучшение производительности.