我正在制作一个小型的C#应用程序,想从简单纯文本中提取标签云。是否有函数可以为我完成这个任务?
我认为构建标签云是一个两步骤的过程:
首先,您需要拆分并计算标记。根据文档的结构以及其所写的语言,这可能只需计算以空格分隔的单词即可轻松完成。但是,这是一种非常幼稚的方法,因为像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);
}
这里有一个ASP.NET云控件,它可能会帮助您至少入门,完整的源代码已包含在内。
这个项目全部使用C#编写 - 您唯一需要做的就是修改它以输出HTML而不是它创建的可视化效果。
看看这个算法的答案:
答案中提到的“DisOrganizer”可能适合您的目的。稍加修改,您可以让这个“Disorganizer”按照您想要的方式呈现图像。PS:代码是用C#编写的https://github.com/chandru9279/zasz.me/blob/master/zasz.me/
我不确定这是否完全符合您的要求,但它可能会帮助您入门:
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()