Облако тегов в С#

Я делаю небольшое приложение С# и хотел бы извлечь облако тегов из простого простого текста. Есть ли функция, которая может это сделать для меня?

Ответы

Ответ 1

Построение облака тегов - это, как я вижу, процесс из двух частей:

Во-первых, вам нужно разделить и подсчитать токены. В зависимости от того, как структурирован документ, а также языка, на котором он написан, это может быть так же просто, как подсчет слов, разделенных пробелом. Однако это очень наивный подход, поскольку слова типа a, a и т.д. Будут иметь наибольшее количество слов и не очень полезны в качестве тегов. Я бы предложил реализовать какой-то черный список слов, чтобы исключить самые распространенные и бессмысленные теги.

Как только у вас есть результат в методе (tag, count), вы можете использовать что-то похожее на следующий код:

(Поиск - это список SearchRecordEntity, SearchRecordEntity содержит тег и его счетчик, SearchTagElement - это подкласс SearchRecordEntity, который имеет атрибут TagCategory, а ProcessedTags - это List of SearchTagElements, который содержит результат)

double max = Searches.Max(x => (double)x.Count);
List<SearchTagElement> processedTags = new List<SearchTagElement>();

foreach (SearchRecordEntity sd in Searches)
{
    var element = new SearchTagElement();                    

    double count = (double)sd.Count;
    double percent = (count / max) * 100;                    

    if (percent < 20)
    {
        element.TagCategory = "smallestTag";
    }
    else if (percent < 40)
    {
        element.TagCategory = "smallTag";
    }
    else if (percent < 60)
    {
        element.TagCategory = "mediumTag";
    }
    else if (percent < 80)
    {
        element.TagCategory = "largeTag";
    }
    else
    {
        element.TagCategory = "largestTag";
    }

    processedTags.Add(element);
}

Ответ 2

Я бы рекомендовал использовать http://thetagcloud.codeplex.com/. Это очень чистая реализация, которая заботится о группировке, подсчете и рендеринге тегов. Он также предоставляет возможности фильтрации.

Ответ 3

Вот ASP.NET Cloud COntrol, который может помочь вам хотя бы начать работу, включая полный источник.

Ответ 4

Вы можете посмотреть WordCloud, проект CodeProject. Он включает в себя 430 слов остановки (например, the, an, a и т.д.) И использует алгоритм, основанный на использовании Porter, который сводит слова к их корню, так что "стебель стебля стебля" считается одним из одно и то же слово.

Все это в С# - единственное, что вам нужно было бы сделать, это изменить его для вывода HTML вместо создаваемой визуализации.

Ответ 6

Я не уверен, что это именно то, что вы ищете, но это может помочь вам начать:

LINQ, который подсчитывает частоту слов (в VB, но я сейчас конвертирую в С#)

Dim Words = "Hello World ))))) This is a test Hello World"
Dim CountTheWords = From str In Words.Split(" ") _
                    Where Char.IsLetter(str) _
                    Group By str Into Count()

Ответ 7

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

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

Итак, если счетчик > 10 и < 20, то примените стиль .CSS к ссылке, которая будет иметь определенный размер.

Вы можете сохранить эти счета как ключи в коллекции, а затем получить значение, в котором ключ соответствует вашему возвращаемому значению (как я уже упоминал выше).

У меня нет исходного кода для этого процесса, но вы не найдете простой функции, чтобы сделать все это для вас. Элемент управления, да (как указано выше).

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

Ответ 8

Посмотрите на этот ответ для алгоритма:

Алгоритм для реализации облака слов, например Wordle

"DisOrganizer", упомянутый в ответах, может служить вашей цели. С небольшим изменением вы можете позволить этому "Disorganizer" служить изображению, как вы хотели. PS: Код написан на С# https://github.com/chandru9279/zasz.me/blob/master/zasz.me/

Ответ 9

Взгляните на это. Это сработало для меня. В папке примеров с именем WebExample есть проект, который поможет вам в этом. https://github.com/chrisdavies/Sparc.TagCloud

Ответ 10

Zoomable TagCloud Generator, который извлекает ключевые слова из данного источника (текстовый файл и другие источники) и отображает TagCloud как пользовательский интерфейс масштабирования (ZUI )