C#中的标签云

时间:2008-12-10 00:34:13

标签: c# tag-cloud

我正在制作一个小型 C#应用程序,并希望从简单的纯文本中提取标记云。有没有能为我做到这一点的功能?

10 个答案:

答案 0 :(得分:12)

正如我所见,构建标签云是一个由两部分组成的过程:

首先,您需要拆分和计算您的令牌。根据文档的结构以及编写的语言,这可以像计算空格分隔的单词一样简单。然而,这是一种非常天真的方法,因为像a,of,a等的单词将具有最大的字数并且作为标签不是非常有用。我建议实现某种单词黑名单,以排除最常见和无意义的标签。

以(标记,计数)方式获得结果后,您可以使用类似于以下代码的内容:

(Searches是SearchRecordEntity的列表,SearchRecordEntity保存标记及其计数,SearchTagElement是具有TagCategory属性的SearchRecordEntity的子类,而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);
}

答案 1 :(得分:9)

我真的建议使用http://thetagcloud.codeplex.com/。这是一个非常干净的实现,负责标记的分组,计数和呈现。它还提供过滤功能。

答案 2 :(得分:5)

答案 3 :(得分:4)

这是一个ASP.NET Cloud COntrol,可能会帮助您至少开始使用,包括完整的来源。

答案 4 :(得分:3)

您可能需要查看CodeProject上的WordCloud项目。它包括430个单词(如theana等),并使用Porter词干算法,将单词缩减为根,以便“词干词干”全部计为同一个单词的一次出现。

一切都在C#中 - 你唯一要做的就是修改它来输出HTML而不是它创建的可视化。

答案 5 :(得分:1)

查看算法的答案:

Algorithm to implement a word cloud like Wordle

答案中提到的“DisOrganizer”可以满足您的目的。只需稍加改动,您就可以让这个“Disorganizer”以您想要的方式提供图像。 PS:代码是用C#https://github.com/chandru9279/zasz.me/blob/master/zasz.me/

编写的

答案 6 :(得分:1)

看看这个。它对我有用。在名为WebExample的Examples文件夹下有一个项目,它可以帮助您解决这个问题。 https://github.com/chrisdavies/Sparc.TagCloud

答案 7 :(得分: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()

答案 8 :(得分:0)

您可以在某种集合或数据库表中存储类别及其拥有的项目数量。

由此,您可以获得某个类别的计数并具有一定的界限。所以你的参数是类别,你的返回值是一个计数。

因此,如果计数> 10&amp; &lt; 20,然后将.CSS样式应用于具有特定大小的链接。

您可以将这些计数存储为集合中的键,然后获取键与返回值匹配的值(如上所述)。

我没有手头有这个过程的源代码,但你也找不到一个简单的功能来为你做这一切。一个控件,是(如上所述)。

这是一种非常传统的方法,也是我从杂志教程等中看到的标准方法,也是我想到的第一种方法(不一定是最好的方法)。

答案 9 :(得分:-1)

Zoomable TagCloud Generator从给定来源(文本文件和其他来源)中提取关键字并将TagCloud显示为缩放用户界面(ZUI)