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 ...
随机推荐
- 【python】我OUT了,原来函数中的冒号和箭头是这么回事
翻了翻httprunner的源代码,越看越不对劲,感觉有点看不懂语法了. 这都什么鬼?感觉心好慌,顿时感到惭愧万分,还好意思说自己了解Python呢. 赶紧了解一下,原来这叫 type hints,是 ...
- 发送信息到邮箱的第三方扩展库PHPMailer使用方法
一.下载 使用composer下载PHPMailer :composer require phpmailer/phpmailer 二.使用实例 use PHPMailer\PHPMailer\PHPM ...
- Oracle错误 ora-12514 解决方法-九五小庞
成功连到数据库上之后,查看listener状态:lsnrctl status status READY 状态,需要由非归档转为归档模式,故操作如下: 1.关闭数据库shutdown immediate ...
- Zabbix下查看参数的小技巧
我们在管理.维护Zabbix的时候,经常需要查看配置文件下的一些参数信息.下面介绍一些常用的小技巧. 1:我想知道zabbix_server.conf文件中配置了那些参数. # grep '^[a-Z ...
- Django-配置镜像源,虚拟环境详解
0.配源虚拟 全局配源 阿里云镜像站:https://developer.aliyun.com/mirror/ # 在cmd中操作,查找文件 C:\Users\Administrator>pip ...
- python之os模块使用
python中os模块的常用语法 1.查看当前路径及路径下的目录 os.getcwd():返回当前路径(不包括文件名) os.listdir():返回当前路径下的所有目录列表. os.listdir( ...
- TNFE-Weekly[第七十二周已更新]
前端行业发展飞速,新技术如雨后春笋般快速出现,尤其是各种小程序陆续推出,相关的信息.文章也铺天盖地的遍布在各处,我们有时候会困惑,不知道哪些信息对于自己是有价值的,那么TNFE-腾讯新闻前端团队启动了 ...
- 详解usbmon抓取的log各字段的含义
详解 usbmon 抓取的 log 各字段的含义 在上篇文章中,我们已经介绍了如何在 linux 下使用 usbmon 抓取 usb 总线上数据的方法.(https://www.cnblogs.com ...
- 如何创建本地git分支到远程
创建本地分支到远程: 1.$git init 之后创建的本地仓库默认master分支 如果现在就要$ git branch 查看当前分支,是不显示任何分支的,只有在add,commit文件之后才显示, ...
- 程序员你是如何降低NPE的?
程序员,如果系统突然报了一个空指针异常,你肯定像吞了一只苍蝇一样尴尬. 那么如何在日常开发过程中降低NPE? 问题 回答 现状 返回空值会出现大量的空指针异常 目的 改进方法的返回值,降低出现空指针异 ...