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 ...
随机推荐
- Fitness - 05.11
倒计时234天 从本周开始改变运动模式 跑步换到每周二.四.六进行. 每周一.三.五增加瑜伽的练习,周日山地车骑行~~~~ 久违的瑜伽课,瑜伽老师居然是男的,第一次看到这么柔软的男生~! 平时感觉不到 ...
- [bash]用于查找指定格式目录的程序
功能: 在指定目录下查找符合yyyy-MM-dd(-d)nnn模式的目录名,例如2020-03-22-b888 目标目录情况: [root@localhost testfolder]# ll tota ...
- Nginx 路由--Location的使用
一. 路由--Location的使用 9.1. Location语法规则 语法规则: location [=|~|~*|^~] /uri/ {… } 首先匹配 =,其次匹配^~,其次是按文件中顺序的正 ...
- Java Web项目实现写日志功能
第一步:导入log4j-1.2.16的jar包 第二步:在servlet包里编写写日志的servlet,代码如下: public class InitServlet extends HttpServl ...
- 7.SwrContext音频重采样使用
头文件位于#include <libswresample/swresample.h> SwrContext常用函数如下所示 SwrContext *swr_alloc(void); / ...
- apply用法
result.push.apply(result, document.getElementsByTagName(tag)); 但是,这里为什么要用apply呢? 因为document.getEleme ...
- access数据库一般注入方法及偏移注入
1.access数据库与mysql数据库的差别 access没有数据库,access数据库每个数据都是单个文件,每个access只有表结构 mysql : 库名,表名,列名,字段内容 access:表 ...
- swift基本数据类型使用
swift基本数据类型的使用之一: 字符串的使用 swift String的使用 1.字符串的定义 1> 不可变字符串的定义 2> 可变字符串的定义 2.获取字符串的长度 3.字符串的拼接 ...
- 基于Socket的编程
2020/7/5 客户端步骤: 1.创建Socket. 根据指定服务端的IP地址或者端口号构造Socket类对象: Socket socket = new Socket(InetAddress. ...
- MySql约束_设计_备份还原(资料二)
今日内容 1. DQL:查询语句 1. 排序查询 2. 聚合函数 3. 分组查询 4. 分页查询 2. 约束 3. 多表之间的关系 4. 范式 5. 数据库的备份和还原 DQL:查询语句 1. 排序查 ...