C#, Находящий отрывки релевантного документа для дисплея результата поиска

Я бы использовал стиль td элемента наведения вместо tr . Например:

tr.fullrow:hover td{
    background:yellow;
    font-size:16px;
}
10
задан hippietrail 20 October 2012 в 17:58
поделиться

4 ответа

Хотя он реализован на Java, здесь вы можете увидеть один подход к решению этой проблемы: http://rcrezende.blogspot.com/2010/08/smallest-relevant-text-snippet-for.html

6
ответ дан 3 December 2019 в 22:02
поделиться

При использовании CONTAINSTABLE, Вы вернете РАЗРЯД, это - в сущности значение плотности - выше значение РАЗРЯДА, выше плотность. Таким образом, Вы просто выполняете запрос для получения результатов, которые Вы хотите и не должны заканчиваться к массированию данных когда его возвращенный.

0
ответ дан 3 December 2019 в 22:02
поделиться

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

private static string FindRelevantSnippets(string infoText, string[] searchTerms)
    {
        List<int> termLocations = new List<int>();
        foreach (string term in searchTerms)
        {
            int termStart = infoText.IndexOf(term);
            while (termStart > 0)
            {
                termLocations.Add(termStart);
                termStart = infoText.IndexOf(term, termStart + 1);
            }
        }

        if (termLocations.Count == 0)
        {
            if (infoText.Length > 250)
                return infoText.Substring(0, 250);
            else
                return infoText;
        }

        termLocations.Sort();

        List<int> termDistances = new List<int>();
        for (int i = 0; i < termLocations.Count; i++)
        {
            if (i == 0)
            {
                termDistances.Add(0);
                continue;
            }
            termDistances.Add(termLocations[i] - termLocations[i - 1]);
        }

        int smallestSum = int.MaxValue;
        int smallestSumIndex = 0;
        for (int i = 0; i < termDistances.Count; i++)
        {
            int sum = termDistances.Skip(i).Take(5).Sum();
            if (sum < smallestSum)
            {
                smallestSum = sum;
                smallestSumIndex = i;
            }
        }
        int start = Math.Max(termLocations[smallestSumIndex] - 128, 0);
        int len = Math.Min(smallestSum, infoText.Length - start);
        len = Math.Min(len, 250);
        return infoText.Substring(start, len);
    }

Некоторые улучшения, о которых я мог думать, должны будут возвратить несколько "отрывков" с более коротким, которые составляют в целом более долгую длину - этот способ, которым могут быть выбраны несколько частей документа.

1
ответ дан 3 December 2019 в 22:02
поделиться

Это хорошая проблема :)

Я думаю, что я бы создал вектор индекса: для каждого слова создайте запись 1, если поисковый запрос, или в противном случае 0. Затем найдите i такой эта сумма (indexvector [i: i + maxlength]) максимизируется.

На самом деле это можно сделать довольно эффективно. Начните с количества поисковых запросов в первых словах максимальной длины. затем, по мере продвижения, уменьшайте свой счетчик, если indexvector [i] = 1 (т.е. вы теряете этот поисковый запрос при увеличении i), и увеличивайте его, если indexvector [i + maxlength + 1] = 1. По ходу следите за i с наибольшим значением счетчика.

После того, как у вас есть любимый i, вы все равно можете выполнить тонкую настройку, например, посмотреть, сможете ли вы уменьшить фактический размер без ущерба для счетчика, например чтобы найти границы предложения или что-то еще. Или как выбрать правильный i из числа с эквивалентными значениями счетчика.

Не уверен, что это лучший подход, чем ваш - это другой подход.

Возможно, вам также захочется ознакомиться с этим документом по теме, в котором содержится еще один базовый уровень: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.72.4357&rep = rep1 & type = pdf

2
ответ дан 3 December 2019 в 22:02
поделиться
Другие вопросы по тегам:

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