Word云(标签云)生成器控件。net Windows。形式在c#中
背景 这种控制方式的灵感来自于一种名为Wordle的基于网络的免费单词云生成器。实际上,这个控件是我的项目http://sourcecodecloud.codeplex.com的一种衍生产品。 我非常喜欢Wordle产生的可视化,但我的目标是编写一个非基于web的本地解决方案来处理大量的敏感数据。我在web上找到了许多组件,但是当处理文本和可视化或布局不是我期望的那样时,它们中的大多数都有非常纯粹的性能。 体系结构和用法 在可视化“云”这个词时,有四个阶段: 处理文本、HTML或源代码等数据,并提取相关的单词,而忽略其他单词。作为示例,我实现了其中的三个。TextExtractor从一些文本字符串中提取所有单词,忽略空格和所有非字母字符。文件提取器可以逐行处理大型文本文件。另一个UriExtractor获取URL内容,并试图清除HTML标签和JavaScript(说实话,我只是将其实现为一个展示,它的过滤功能非常纯粹)。 要使用自己的数据源,只需实现ienumerable>接口或从BaseExtractor派生。 数单词,忽略黑名单中的单词。 结果是一个枚举,其中包含术语(单词)对和表示该单词在文本中出现次数的整数。在第一个实现中,我使用了KeyValuePair<string, int>代表他们。在这个版本中,我切换到了IWord界面。 隐藏,复制Code
public interface IWord : IComparable<IWord>
{
string Text { get; }
int Occurrences { get; }
string GetCaption();
}
我还转移到LINQ,并放弃了自己的类来进行单词计数、分组和排序。我非常喜欢它们,但是使用LINQ增加了可读性,降低了复杂性,缩短了代码。所有这些都是以一个可忽略的、微不足道的性能缺陷为代价的,这确实是一笔好买卖。 隐藏,复制Code
IBlacklist blacklist = new CommonWords();
IProgressIndicator progress = new ProgressBarWrapper(progressBar);
IEnumerable<string> terms = new StringExtractor(textBox.Text, progress); cloudControl.WeightedWords =
terms
.Filter(blacklist)
.CountOccurences()
.SortByOccurences();
布局-我使用四叉树数据结构来创建一个不重叠的文字地图的控件图形。同样的数据结构也用于查询控制在某个矩形区域或点下的单词。此查询仅用于在需要时重绘特定区域,或在单击控件时执行某些操作。因此,知道单击了哪个单词来执行与单词相关的操作是非常有用的,比如显示统计数据或导航到某个URL。 隐藏,复制Code
private void cloudControl_Click(object sender, EventArgs e)
{
LayoutItem itemUderMouse;
Point mousePositionRelativeToControl =
cloudControl.PointToClient(new Point(MousePosition.X, MousePosition.Y));
if (!cloudControl.TryGetItemAtLocation(
mousePositionRelativeToControl, out itemUderMouse))
{
return;
}
MessageBox.Show(itemUderMouse.Word);
}
配置Word Cloud控件 有几件事你可以改变这种控制: 您可以更改字体类型和大小。 隐藏,复制Code
cloudControl.MinFontSize = 6;
cloudControl.MaxFontSize = 60;
cloudControl.Font = new Font(new FontFamily("Verdana"), 8, FontStyle.Regular);
使用不同的颜色: 隐藏,复制Code
cloudControl.Palette = new Brush[] {Brushes.DarkRed, Brushes.Red, Brushes.LightPink};
使用不同的布局。目前实现了两种布局。您可以通过从BaseLayout派生来实现自己的接口,也可以通过自己实现ILayout接口。 隐藏,复制Code
cloudControl.LayoutType = LayoutType.Typewriter;
布局和绘制图形的逻辑是由IGraphicEngine接口严格分隔的。所以我认为将来把它移植到WPF或Silverlight上并不是什么大事。 专家 通过在代码中挖掘,你会发现以下额外的功能: 创建自己的黑名单- IBlacklist接口或CommonBlacklist基类。方法:CommonBlacklist.CreateFromFile(…)将有共同词干的词进行分组,如-离去,离去,离去。你甚至可以看到它的统计数据。 学分 感谢迈克尔·科伊尔的文章:一个简单的四叉树实现c#, http://www.codeproject.com/KB/recipes/QuadTree.aspx.Thanks乔纳森•范伯格的创造者Wordle,美丽的云,暗示背后的算法:http://stackoverflow.com/questions/342687/algorithm-to-implement-something-like-wordle。 本文转载于:http://www.diyabc.com/frontweb/news28988.html
Word云(标签云)生成器控件。net Windows。形式在c#中的更多相关文章
- C# 给Word文档添加内容控件
C# 给Word文档添加内容控件 在MS Word中,我们可以通过内容控件来向word文档中插入预先定义好的模块,指定模块的内容格式(如图片.日期.列表或格式化的文本等),从而创建一个结构化的word ...
- Fixjs实践——标签、按钮控件
Fixjs介绍 Fixjs是一款javascript界面基础框架,主要为开发复杂组件提供底层的框架支持. Fixjs 0.3.0主要增加了文本显示类fixjs.text.TextField 支持的主要 ...
- [WP8.1UI控件编程]Windows Phone VirtualizingStackPanel、ItemsStackPanel和ItemsWrapGrid虚拟化排列布局控件
11.2.2 VirtualizingStackPanel.ItemsStackPanel和ItemsWrapGrid虚拟化排列布局控件 VirtualizingStackPanel.ItemsSta ...
- 如何添加地图控件到Windows Phone 8的页面中
原文 如何添加地图控件到Windows Phone 8的页面中 本主题介绍了各种方法来添加一个地图控件到Windows Phone 8的项目.该地图控件在Windows Phone的SDK 8.0的库 ...
- 背水一战 Windows 10 (65) - 控件(WebView): 对 WebView 中的内容截图, 通过 Share Contract 分享 WebView 中的被选中的内容
[源码下载] 背水一战 Windows 10 (65) - 控件(WebView): 对 WebView 中的内容截图, 通过 Share Contract 分享 WebView 中的被选中的内容 作 ...
- WPF中Popup控件在Win7以及Win10等中的对齐点方式不一样的解决方案 - 简书
原文:WPF中Popup控件在Win7以及Win10等中的对齐点方式不一样的解决方案 - 简书 最近项目中使用弹出控件Popup,发现弹出框的对齐方式在不同的系统中存在不同(Popup在win10上是 ...
- 客户端的javascript改变了asp.net webform页面控件的值,后台代码中如何获取修改后的值。
客户端的javascript改变了asp.net webform页面控件的值,后台代码中如何获取修改后的值. 无论是什么的html控件,只要加上了runat="server" ...
- WPF封装控件时 检测是否在设计模式中
原文:WPF封装控件时 检测是否在设计模式中 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/Vblegend_2013/article/detail ...
- 云存储上传控件更新日志-Xproer.cloud2
官方网站:http://www.ncmem.com/ 产品首页:http://www.ncmem.com/webapp/cloud2/index.asp 在线演示:http://www.ncmem.c ...
随机推荐
- C# Chart各个属性详细解析、应用
Chart笔记 前台页面代码: <form id="form1" runat="server"> <div> <asp:Chart ...
- 尝试MatCap类型shader
听说MatCap能在低端机上做出很漂亮的pbr效果,就尝试了一下. MatCap全称MaterailCapture,里面存的是光照信息,通过法线的xy分量去采样matcap,得到在该方向法线的光照信息 ...
- [译]如何在ASP.NET Core中实现面向切面编程(AOP)
原文地址:ASPECT ORIENTED PROGRAMMING USING PROXIES IN ASP.NET CORE 原文作者:ZANID HAYTAM 译文地址:如何在ASP.NET Cor ...
- 零基础一分钟入门Python
这篇文章面向所有想学python的小伙伴(甚至你从没听过编程),这篇文章将会带你以最快的速度入门python.赶快上车,时间来不及了... 一,下载和安装python 1.下载: 1.1 python ...
- 纹理过滤模式中的Bilinear、Trilinear以及Anistropic Filtering
1. 为什么在纹理采样时需要texture filter(纹理过滤). 我们的纹理是要贴到三维图形表面的,而三维图形上的pixel中心和纹理上的texel中心并不一至(pixel不一定对应textur ...
- White Bird(AOJ 2308)
原题如下: Angry Birds is a mobile game of a big craze all over the world. You were convinced that it was ...
- python之类方法和静态方法
在类中定义的函数称为方法,主要有三种:实例方法.类方法.静态方法. class MyTest(): # 普通实例函数 def func1(self, arg1, arg2): pass # 类函数 @ ...
- Django启动框架自带原始页面(Django一)
1.安装,cmd中输入命令: pip install django (前提是python已安装完成,才可以使用pip这个python的库管理工具)ps:在cmd中使用pip命令安装时可能因为速度过慢而 ...
- 吴恩达《深度学习》-第一门课 (Neural Networks and Deep Learning)-第四周:深层神经网络(Deep Neural Networks)-课程笔记
第四周:深层神经网络(Deep Neural Networks) 4.1 深层神经网络(Deep L-layer neural network) 有一些函数,只有非常深的神经网络能学会,而更浅的模型则 ...
- JavaGuide易错点总结
基础知识易错点 1. object.equals("str") 容易报空指针异常,应使用"str".equals(object); 还可以使用JDK7引入的工具 ...