Поиск похожих / связанных текстовых алгоритмов

Я много искал в stackru и Google, но не нашел лучшего ответа на это. На самом деле, я собираюсь разработать систему чтения новостей, которая будет сканировать и собирать новости из Интернета (с помощью сканера), а затем я хочу найти похожие или похожие новости на веб-сайтах (чтобы предотвратить отображение дублированных новостей на веб-сайте)

Я думаю, что лучшим примером для этого является Новости Google, он собирает новости из Интернета, а затем классифицирует их и находит соответствующие новости и статьи. Это то, что я хочу сделать.

Какой лучший алгоритм для этого?

2 ответа

Решение

Относительно простым решением является вычисление вектора tf-idf (en.wikipedia.org/wiki/Tf*idf) для каждого документа, а затем использование косинусного расстояния (en.wikipedia.org/wiki/Cosine_simility) между этими векторами в качестве оценка семантической дистанции между статьями.

Это, вероятно, будет захватывать семантические отношения лучше, чем расстояние Левенштейна, и будет намного быстрее вычисляться.

Это один: http://en.wikipedia.org/wiki/Levenshtein_distance

public static SqlInt32 ComputeLevenstheinDistance(SqlString firstString, SqlString secondString)
{
    int n = firstString.Value.Length;
    int m = secondString.Value.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 = (secondString.Value[j - 1] == firstString.Value[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];
}

Это удобно для выполнения поставленной задачи: http://code.google.com/p/boilerpipe/

Кроме того, если вам нужно уменьшить количество слов для анализа, попробуйте это: http://ots.codeplex.com/

Я нашел OTS ОЧЕНЬ полезным в анализе настроений, благодаря которому я могу сократить количество предложений в небольшой список общих фраз и / или слов и рассчитать общее настроение на основе этого. То же самое должно работать на сходство.

Другие вопросы по тегам