Алгоритм нечеткого сравнения строк

emel

Client
Регистрация
21.02.2015
Сообщения
86
Благодарностей
18
Баллы
8
Кто в курсе как здесь процент соответствия получить заместо длины? Или я не так понимаю?

C#:
public static int LevenshteinDistance(string string1, string string2)
{
    if (string1 == null) throw new ArgumentNullException("string1");
    if (string2 == null) throw new ArgumentNullException("string2");
    int diff;
    int[,] m = new int[string1.Length + 1, string2.Length + 1];

    for (int i = 0; i <= string1.Length; i++) { m[i, 0] = i; }
    for (int j = 0; j <= string2.Length; j++) { m[0, j] = j; }

    for (int i = 1; i <= string1.Length; i++)
    {
        for (int j = 1; j <= string2.Length; j++)
        {
            diff = (string1[i - 1] == string2[j - 1]) ? 0 : 1;

            m[i, j] = Math.Min(Math.Min(m[i - 1, j] + 1,
                                     m[i, j - 1] + 1),
                                     m[i - 1, j - 1] + diff);
        }
    }
    return m[string1.Length, string2.Length];
}
 

dartoarem

Новичок
Регистрация
04.06.2020
Сообщения
6
Благодарностей
1
Баллы
3
Привет!
Ты в своем проекте смог применить данный код?
Если да, то подскажи как его заставить фурычить, а я подскажу как посчитать процент)
 

emel

Client
Регистрация
21.02.2015
Сообщения
86
Благодарностей
18
Баллы
8
Привет!
Ты в своем проекте смог применить данный код?
Если да, то подскажи как его заставить фурычить, а я подскажу как посчитать процент)
Вроде так:
string string0 = project.Variables["table_1_A"].Value;
string string1 = project.Variables["table_1_B"].Value;
string string1_C = project.Variables["table_1_C"].Value;
string string1_D = project.Variables["table_1_D"].Value;

project.SendInfoToLog("Обработка | "+string1+" | поиск соответствий", true);

string string2 = "";
string m_Kf = "";

// подключаем таблицу для сравнения
var sourceTable1 = project.Tables["tableTemp1"];
string sourceTable1CellsVal_0 = "";
string sourceTable1CellsVal_1 = "";
string sourceTable1CellsVal_2 = "";
string sourceTable1CellsVal_3 = "";

// подключаем временную таблицу
var tempTable = project.Tables["tableTemp2"];
// подключаем результирующую таблицу
var replaceTable = project.Tables["table_rezalt"];



lock (SyncObjects.TableSyncer)
{
    for(int r = 0; r < sourceTable1.RowCount; r++)
    {
        sourceTable1CellsVal_0 = Convert.ToString(sourceTable1.GetCell(4,r));
        sourceTable1CellsVal_1 = Convert.ToString(sourceTable1.GetCell(5,r));
        sourceTable1CellsVal_2 = Convert.ToString(sourceTable1.GetCell(6,r));
        sourceTable1CellsVal_3 = Convert.ToString(sourceTable1.GetCell(7,r));      
       
       
        string2 = sourceTable1CellsVal_1;
   
        if (string1 == null) throw new ArgumentNullException("string1");
        if (string2 == null) throw new ArgumentNullException("string2");
        int diff;
        int[,] m = new int[string1.Length + 1, string2.Length + 1];
       
        for (int i = 0; i <= string1.Length; i++) { m[i, 0] = i; }
        for (int j = 0; j <= string2.Length; j++) { m[0, j] = j; }
       
        for (int i = 1; i <= string1.Length; i++)
        {
            for (int j = 1; j <= string2.Length; j++)
            {
                diff = (string1[i - 1] == string2[j - 1]) ? 0 : 1;
       
                m[i, j] = Math.Min(Math.Min(m[i - 1, j] + 1,
                                        m[i, j - 1] + 1),
                                        m[i - 1, j - 1] + diff);
            }
        }
       
    //return m[string1.Length, string2.Length];
    m_Kf = Convert.ToString(m[string1.Length, string2.Length]);
   
    tempTable.SetCell(0,r,string0);
    tempTable.SetCell(1,r,string1);
    tempTable.SetCell(2,r,string1_C);
    tempTable.SetCell(3,r,string1_D);
   
    tempTable.SetCell(5,r,sourceTable1CellsVal_0);
    tempTable.SetCell(6,r,sourceTable1CellsVal_1);
    tempTable.SetCell(7,r,sourceTable1CellsVal_2);
    tempTable.SetCell(8,r,sourceTable1CellsVal_3);

    tempTable.SetCell(9,r,m_Kf);

    }
}
 
Последнее редактирование:

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)