C#中的标签云

16

我正在制作一个小型的C#应用程序,想从简单纯文本中提取标签云。是否有函数可以为我完成这个任务?

10个回答

14

我认为构建标签云是一个两步骤的过程:

首先,您需要拆分并计算标记。根据文档的结构以及其所写的语言,这可能只需计算以空格分隔的单词即可轻松完成。但是,这是一种非常幼稚的方法,因为像the、of、a等词将具有最大的单词计数,并且作为标签没有太大用处。我建议实现某种单词黑名单,以排除最常见和无意义的标签。

一旦您以(tag、count)的方式得出结果,您可以使用类似以下代码的东西:

(Searches是SearchRecordEntity列表,SearchRecordEntity保存标签及其数量,SearchTagElement是SearchRecordEntity的子类,具有TagCategory属性,而ProcessedTags是SearchTagElement列表,保存结果)

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
我非常推荐使用http://thetagcloud.codeplex.com/。它是一个非常干净的实现,可以处理标签的分组、计数和呈现。它还提供了筛选功能。

1
同意,我刚刚实现了它,它可以直接满足我所有的需求。 - Simon
请注意,该代码仍可在Internet Archive中下载:https://web.archive.org/web/20210701013543/https://archive.codeplex.com/?p=thetagcloud - Randy Burden

5

4

这里有一个ASP.NET云控件,它可能会帮助您至少入门,完整的源代码已包含在内。


您提供的链接已经失效。 - A. M.
还是没有反应。它应该指向http://www.codeproject.com/Articles/14661/Cloud-Control-for-ASP-NET吗? - James Skemp

3
您可能想要看一下CodeProject上的项目WordCloud (http://www.codeproject.com/KB/recipes/wordcloud.aspx)。它包含430个停用词(如the、an、a等),并使用波特词干算法将单词减少到其根本形式,因此"stemmed stemming stem"都被视为同一单词出现1次。

这个项目全部使用C#编写 - 您唯一需要做的就是修改它以输出HTML而不是它创建的可视化效果。


1

1

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

0
你可以将一个类别及其拥有的物品数量存储在某种集合或数据库表中。
从此,您可以获取特定类别的计数并设置某些边界条件。因此,您的参数是类别,而返回值是计数。
如果计数>10&&<20,则将.CSS样式应用于链接,该链接将具有特定大小。
您可以将这些计数存储为集合中的键,然后获取键与您的返回值匹配的值(如上所述)。
我手头没有这个过程的源代码,但是您也不会找到一个简单的函数来为您完成所有这些工作。控件是有的,像上面提到的那样。
从我在杂志教程等方面看到的内容来看,这是非常传统的方法和标准方式,也是我首先想到的方法(不一定是最好的)。

-1

可缩放标签云生成器从给定的来源(文本文件和其他来源)中提取关键词,并将标签云显示为缩放用户界面(ZUI)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接