.NET библиотека для текстовых алгоритмов?

Как будто вы пытаетесь получить доступ к объекту, который является null. Рассмотрим ниже пример:

TypeA objA;

. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException, что имеет смысл.

См. Также этот пример:

String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
26
задан Alex Burtsev 22 December 2010 в 10:39
поделиться

3 ответа

Мне удалось найти реализации большинства нужных мне алгоритмов, используя комбинацию поиска по Википедии + Google Code.

http://en.wikipedia.org/wiki/Category:Algorithms_on_strings
http://www.google.com/codesearch

Хотя странно, что никто не создал проект на эту тему, где заинтересованные люди могли бы сотрудничать по этому вопросу.

4
ответ дан Alex Burtsev 22 December 2010 в 10:39
поделиться

Вот то, что я реализовал для расстояния Левенштейна / Дамерау – Левенштейна:

    public static int GetDistance(string left, string right, bool isDamerauDistanceApplied)
    {
        if (left.Length == 0) return right.Length;
        if (right.Length == 0) return left.Length;

        var lenLeft = left.Length;
        var lenRight = right.Length;

        var matrix = new int[lenLeft + 1, lenRight + 1];

        for (var i = 0; i <= lenLeft; i++)
            matrix[i, 0] = i;

        for (var i = 0; i <= lenRight; i++)
            matrix[0, i] = i;

        for (var i = 1; i <= lenLeft; i++)
        {
            for (var j = 1; j <= lenRight; j++)
            {
                var cost = (left[i - 1] == right[j - 1]) ? 0 : 1;

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

                if (isDamerauDistanceApplied)
                {
                    // Fixed for string base 0 index.
                    if (i > 1 && j > 1 && left[i - 1] == right[j - 2] && left[i - 2] == right[j - 1])
                    {
                        matrix[i, j] = Math.Min(matrix[i, j], matrix[i - 2, j - 2] + cost);
                    }
                }
            }
        }

        return matrix[lenLeft, lenRight];
    }
1
ответ дан mathsRuinedme 22 December 2010 в 10:39
поделиться

Я нашел и использовал следующую библиотеку .NET , реализующую текстовое математику Aho-Corasick от Tom Petricek для решения проблемы, с которой я столкнулся. Это прекрасно сработало для меня.

0
ответ дан kenny 22 December 2010 в 10:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: