15

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

4

10 回答 10

13

在我看来,构建标签云是一个两部分的过程:

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

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

(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);
}
于 2008-12-10T00:54:27.457 回答
9

我真的会推荐使用http://thetagcloud.codeplex.com/。这是一个非常干净的实现,负责标签的分组、计数和渲染。它还提供过滤功能。

于 2009-06-10T12:10:07.447 回答
5

看看http://sourcecodecloud.codeplex.com/ 在此处输入图像描述

于 2012-02-08T14:03:58.867 回答
4

这是一个ASP.NET Cloud 控件,它至少可以帮助您入门,包括完整的源代码。

于 2008-12-10T00:47:24.990 回答
3

你可能想看看WordCloud,CodeProject 上的一个项目。它包括 430 个停止词(如theana等)并使用 Porter 词干算法,该算法将词减少到它们的词根,以便“词干词干”都被视为同一词的 1 次出现。

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

于 2008-12-10T01:21:51.207 回答
1

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

于 2013-08-21T11:21:58.853 回答
1

看看这个算法的答案:

实现类似 Wordle 的词云的算法

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

于 2012-06-19T12:18:21.520 回答
0

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

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

因此,如果计数 >10 & <20,则将 .CSS 样式应用于具有一定大小的链接。

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

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

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

于 2008-12-10T01:17:48.127 回答
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()
于 2008-12-10T00:44:01.207 回答
-1

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

于 2012-06-13T19:52:42.893 回答