C# LevenshteinDistance алгоритъм за проверка на правописа

Здравейте, използвам алгоритъма на Левенщайн, за да изчисля разликата между два низа, използвайки кода по-долу. Понастоящем предоставя общия брой промени, които трябва да се направят, за да се стигне от „отговор“ до „цел“, но бих искал да ги разделя на видовете допускани грешки. Така че класифициране на грешка като изтриване, заместване или вмъкване.

Опитах се да добавя просто преброяване, но съм нов в това и наистина не разбирам как работи кодът, така че не съм сигурен как да го направя.

static class LevenshteinDistance
    {
        /// <summary>
        /// Compute the distance between two strings.
        /// </summary>
        public static int Compute(string s, string t)
        {
            int n = s.Length;
            int m = t.Length;
            int[,] d = new int[n + 1, m + 1];
            // Step 1
            if (n == 0)
            {
                return m;
            }
            if (m == 0)
            {
                return n;
            }
            // Step 2
            for (int i = 0; i <= n; d[i, 0] = i++)
            {
            }
            for (int j = 0; j <= m; d[0, j] = j++)
            { 
            }
            // Step 3
            for (int i = 1; i <= n; i++)
            {

                //Step 4
                for (int j = 1; j <= m; j++)
                {
                    // Step 5
                    int cost = (t[j - 1] == s[i - 1]) ? 0 : 1;
                    // Step 6
                    d[i, j] = Math.Min(
                        Math.Min(d[i - 1, j] + 1, d[i, j - 1] + 1),
                        d[i - 1, j - 1] + cost);
                }
            }
            // Step 7
            return d[n, m];
        }
    }

Благодаря предварително.


person Hulaz    schedule 22.03.2013    source източник
comment
Потърсете самия алгоритъм в Google, за да можете по-добре да идентифицирате стъпките, какви са те и как работят... след това запазете 3 брояча на цели числа извън цикъла (глобални променливи или референтни параметри). Увеличете съответния брояч на всяка стъпка, ако е необходимо.   -  person Nevyn    schedule 22.03.2013
comment
Освен това, от външния вид на нещата, ще трябва да пренапишете алгоритъма, така че когато присвоявате разходната част на нещата, да можете да определите какво правите. Най-общо казано, самият алгоритъм всъщност не се интересува каква е самата стъпка, а само че трябва да бъде направена, така че ще трябва да добавите частта за откриване от нея, за да знаете какво прави.   -  person Nevyn    schedule 22.03.2013
comment
Вашият алгоритъм изчислява матрицата на Левенщайн. За изчисляване на последователността от операции от матрицата вижте този въпрос stackoverflow.com/questions/5849139/.   -  person polybios    schedule 22.03.2013
comment
Здравейте, прекарах последните няколко часа в търсене на направените коментари и не съм къде. Търсих в Google и изпълнението на алгоритъма изглежда различно всеки път, когато го видя. Невин, разбирам какво казваш, мисля. Настроих 3 променливи за увеличаване, но той анализира кода, така че знам къде отива всяка променлива и това е мястото, където все още се боря. Някой друг има някакви идеи, ще бъде много оценено!   -  person Hulaz    schedule 22.03.2013