Облако тегов в C # - PullRequest
       31

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

15 голосов
/ 10 декабря 2008

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

Ответы [ 10 ]

12 голосов
/ 10 декабря 2008

Создание облака тегов, как я понимаю, состоит из двух частей:

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

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

(Searches - это список SearchRecordEntity, SearchRecordEntity содержит тег и его счет, SearchTagElement является подклассом SearchRecordEntity, который имеет атрибут TagCategory, а ProcessedTags - это список 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);
}
9 голосов
/ 10 июня 2009

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

5 голосов
/ 08 февраля 2012

Взгляните на http://sourcecodecloud.codeplex.com/ enter image description here

4 голосов
/ 10 декабря 2008

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

3 голосов
/ 10 декабря 2008

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

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

1 голос
/ 21 августа 2013

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

1 голос
/ 19 июня 2012

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

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

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

0 голосов
/ 13 июня 2012

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

0 голосов
/ 10 декабря 2008

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

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

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

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

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

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

0 голосов
/ 10 декабря 2008

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

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

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()
...