2008-12-10 5 views
13

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

ответ

0

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

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

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

+0

Ссылка, которую вы предоставили, теперь мертва. – 2011-08-21 15:30:04

+0

Все еще мертв. Предполагается ли он указывать на http://www.codeproject.com/Articles/14661/Cloud-Control-for-ASP-NET? – 2013-09-21 14:55:41

11

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

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

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

(поиск список 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); 
} 
0

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

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

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

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

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

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

3

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

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

9

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

-1

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

0

взглянуть на этот ответ для алгоритма:

Algorithm to implement a word cloud like Wordle

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

Смежные вопросы