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 ...
随机推荐
- Zabbix-4.0-设置钉钉报警脚本
问题:当服务器发生报错时,有一个信息能实现自动发送到我的手机或者应用上,以达到对服务器的实时的监控与处理.邮件与短信不能满足实时性,于是想到了钉钉的通知. 思路:在钉钉里面建一个群,群里面拉个机器人. ...
- HDU - 3499 -(Dijkstra变形+枚举边)
Recently, Shua Shua had a big quarrel with his GF. He is so upset that he decides to take a trip to ...
- [MRCTF]Web WriteUp
和武科大WUSTCTF同时打的一场比赛,最后因为精力放在武科大比赛上了,排名13 - -Web题目难度跨度过大,分不清层次,感觉Web题目分布不是很好,质量还是不错的 Ez_bypass 进入题目得 ...
- Oracle快速建表Sample
表定义: create table tb_triple( id number(8,0) primary key, name nvarchar2(20), birthday date ) 充值: ins ...
- C#程序执行时设置刷新等待
背景 C#在进行某些调用操作时需要隐藏背景,等待刷新. 步骤 1.前端设置 <!--Loading Mask Region--> <div> <div id=" ...
- Oracle用户自定义异常
注意:普通的查询语句不会出现异常,只有使用into对变量进行赋值的时候才会发生异常 --系统变量: notfound --> if sql%notfund then 如果这个表达式为真,则 (增 ...
- java线程的3种实现方式及线程池
1 准备数据 1.1 目标 为了形象地演示线程的工作现象, 准备两个文件datas/odds.txt和datas/evens.txt, 分别存储奇数和偶数, 内容如下: odds.txt 1 3 5 ...
- CTF-WeChall-第四天上午
2020.09.12 08:24 哈哈,go on!
- PHP实现Restful风格的API(转)
Restful是一种设计风格而不是标准,比如一个接口原本是这样的: http://www1.qixoo.com/user/view/id/1表示获取id为1的用户信息,如果使用Restful风格,可以 ...
- Gradle实战(01)--介绍与安装
前言 本章你将学习到 Gradle的介绍 Gradle的安装 Gradle的hello world 1 Gradle的介绍 Gradle是专注于灵活性和性能的开源构建自动化工具 Gradle构建脚本是 ...