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 ...
随机推荐
- 【HttpRunner v3.x】笔记 ——4. 测试用例-结构解析
一.官方首推pytest格式 上篇文章我们知道了,httprunner可以支持三种格式的用例,分别是pytest.yaml和json.yaml和json是以前的版本所使用的用例格式,但是在3.x版本上 ...
- el-select 封装
这里打算封装一个全局el-select组件 MySelect.vue <template> <el-select v-if="options.length!==0" ...
- 《闲扯Redis十一》Redis 有序集合对象底层实现
一.前言 Redis 提供了5种数据类型:String(字符串).Hash(哈希).List(列表).Set(集合).Zset(有序集合),理解每种数据类型的特点对于redis的开发和运维非常重要. ...
- .NET实现可交互的WINDOWS服务(转载自CSDN"烈火蜓蜻")
Windows 服务应用程序在不同于登录用户的交互区域的窗口区域中运行.窗口区域是包含剪贴板.一组全局原子和一组桌面对象的安全对象.由于 Windows 服务的区域不是交互区域,因此 Windows ...
- 软件定义网络实验(一)----Mininet源码安装和可视化拓扑工具
一.实验任务 掌握 Mininet 的源码安装方法和 miniedit 可视化拓扑生成工具. 二.实验任务 使用源码安装 Mininet 的 2.3.0d6 版本,并使用可视化拓扑工具生成一个最简拓扑 ...
- Java 9天入门(黑马程序员) 课程收尾 ------学生管理系统 (9.13)
1 实现功能 2 结构概述 分为两个包,各自一个类 Student.java 为学生类,目的是储存学生信息 StudentManager.java 是主程序的代码 3 Student.java 的代码 ...
- PhpStorm license server(版权许可服务器)在线激活服务器集群列表
原文链接:https://bingyishow.top/easy/55.html 服务器列表 序号 服务器(域名) 状态 1 http://www.yuanzhaoyi.cn 在线 2 http:// ...
- 从一次编译出发梳理概念: Jetty,Jersey,hk2,glassFish,Javax,Jakarta
从一次编译出发梳理概念: Jetty,Jersey,hk2,glassFish,Javax,Jakarta 目录 从一次编译出发梳理概念: Jetty,Jersey,hk2,glassFish,Jav ...
- 如何解决Python下 pip install module 下载慢解决方法?
对于Python来编程的用户最大的一个痛点就是,下载模块是下载速度特别慢,那么有没有解决方法呢? 换Python的pip下载源 1.首先安装一个模块 pqi,在cmd下 pip install pqi ...
- 虚拟机系列 | JVM类加载机制
本文源码:GitHub·点这里 || GitEE·点这里 一.类加载简介 类的加载机制是指把编译后的.class类文件的二进制数据读取到内存中,并为之创建一个java.lang.Class对象,用来封 ...