C# C语言中的标记云#

C# C语言中的标记云#,c#,tag-cloud,C#,Tag Cloud,我正在制作一个小型的C#应用程序,希望从简单的纯文本中提取一个标记云。是否有一个功能可以为我做到这一点?我不确定这是否正是您想要的,但它可能会帮助您开始: 计算字频的LINQ(在VB中,但我现在正在转换为C#) 以下是一个至少可以帮助您入门的完整源代码。在我看来,构建标记云是一个由两部分组成的过程: 首先,您需要分割并计算您的代币。根据文档的结构以及编写语言,这可能与计算空格分隔的单词一样简单。然而,这是一个非常幼稚的方法,因为像,of,a等词。。。将具有最大的字数,并且作为标记不是很有用。我建

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

我不确定这是否正是您想要的,但它可能会帮助您开始:

计算字频的LINQ(在VB中,但我现在正在转换为C#)


以下是一个至少可以帮助您入门的完整源代码。

在我看来,构建标记云是一个由两部分组成的过程:

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

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

(Searchs是SearchRecordEntity的列表,SearchRecordEntity包含标记及其计数,SearchTagElement是具有TagCategory属性的SearchRecordEntity的子类,ProcessedTags是包含结果的SearchTagElements的列表)

double max=Searches.max(x=>(double)x.Count);
List processedTags=新列表();
foreach(搜索中的SearchRecordEntity sd)
{
var元素=新的SearchTagElement();
double count=(double)sd.count;
双百分比=(计数/最大值)*100;
如果(百分比<20)
{
element.TagCategory=“smallestTag”;
}
否则,如果(百分比<40)
{
element.TagCategory=“smallTag”;
}
否则,如果(百分比<60)
{
element.TagCategory=“mediumTag”;
}
否则,如果(百分比<80)
{
element.TagCategory=“largeTag”;
}
其他的
{
element.TagCategory=“largestTag”;
}
已处理标记。添加(元素);
}

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

从中,您可以得到某个类别的计数,并且有一定的界限。因此,您的参数是类别,返回值是计数


因此,如果计数大于10&您可能需要查看CodeProject上的项目。它包括430个停止词(如
the
an
a
,等等),并使用波特词干算法,将单词减少到词根,以便“词干词干”都被视为同一单词的一次出现


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

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

看看

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

请查看以下算法答案:


答案中提到的“无组织者”可以达到你的目的。只要稍作改变,你就可以让这个“无组织者”以你想要的方式为你的形象服务。PS:代码是用C写的,请看一下。这对我有用。“示例”文件夹下有一个名为WebExample的项目,它将帮助您解决此问题。

附议,我刚刚实现了它,它可以提供我所需要的一切。您提供的链接现在已失效。仍然失效。它应该指向什么?
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()
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);
}