词频统计工程相关

(the format of this article is from SkYjoKEr)

 

//=======================开始干之前=======================

模块
1、WordClass 一个存放单词以及实现相关操作的类,其中单词以二元组<word, freq>的形式存储。 (20min)

2、WordCounter 完成单词统计,用一个List保存所有有效的单词。

3、在WordCounter里实现方法AddFile,对每添加的一个文件,提取出所有的单词,按规则加入到List中。(同2一起实现,3h)

4、quicksort实现一个双关键字的排序 (10min)

5、判断路径合法以及合法之后的文件名抽取,这部分不单独写成一个类(20min)

6、打印 (10min)

算上一些调试时间,预计花费5个小时完成这个小项目。

 

//=======================开始干之后=======================

写的时候模块顺序同设计时略有不同。

1、main函数。包括一个简单粗暴的命令行、有效路径判断及文件名抽取。实际使用了1hour,超出预计很多。问题出在抽取文件名,我一开始想使用GetFiles直接提取要求的四种格式的文件名,过滤掉其他格式。但是GetFiles方法里的参数好像不像正则表达式那么强大,它不能实现几种格式做或运算。后来上网一查,大家也说这个方法要么提取全部文件,要么提取一种格式的文件。最后我只能先把所有格式的文件都提出来,在调用addFile时做个判断。想通了这一点,实现起来倒是也不难。本来觉得还要写个文件夹里套文件夹的递归,GetFiles里有个searchoption.alldirectories参数,直接实现了,我只想说牛逼。 

2、WordClass,正常时间完成。相关的操作包括构造函数,词频加1,get和set。

3、WordCounter和addFile。项目的核心和难点,需要实现写文件、分词、统计三大功能,写这个虽然用了4个小时,但我觉得自己的效率还算过得去。受到淡定大神的影响,我一开始打算用正则表达式实现分词,但是看了一会觉得这个难度不大适合我,最后老实的用StreamReader读一行,然后split分词。这两个工具在以前写C++大作业时用过,现在写起来算熟门熟路。为了辅助这三大功能,还写了两个小方法,legalWord判断单词是否合法,wordCompareEqual判断有没有相同的词出现(包括-e模式)。

4、双关键字快排,正常时间完成。

5、打印。先把所有内用缓冲到一个StreamBuilder里面,最后写到一个文件里。正常时间完成。

写完后调试也将近花了1个小时。写的时候不小心把legalWord的return都写成了false,运行的时候一个合法单词都没有,这个错误看了几遍都没看出来,最后还是调试调出来的。

 最后用的总时间大概是7个小时。

 

//=======================提高性能=======================

感觉别的地方没什么可以优化的,要优化的话就是在判断是否出现重复的地方。因为我写的判断是O(n)的,借用树结构或者二分查找可以实现O(log n),Hash也能优化不少性能。可是我都没实现。

以I盘下的所有文件做测试。

优化前:

 

优化后:

可以看到,用了HASH后,运行时间减少到1/3左右。

 

//=======================感想与总结=======================

C#的属性,真的很方便。

类的属性变量命名,用下划线打头,譬如词频用_freq,忽然感觉到自己可怜的词汇量够用了不少。

Split其实还是可以用用的,因为分隔符那里可以传进去一个分隔符数组。

文件操作相关的Directory和GetFiles,大爱。

VS2012按下F1就进去msdn了,这样比上网搜有效率多,久违的幸福感吗?……

转载于:https://www.cnblogs.com/hurj/archive/2012/09/24/2699474.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/361231.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

canvas图形编辑器

原文地址&#xff1a;http://jeffzhong.space/2017/11/02/drawboard/   使用canvas进行开发项目&#xff0c;我们离不开各种线段&#xff0c;曲线&#xff0c;图形&#xff0c;但每次都必须用代码一步一步去实现&#xff0c;显得非常麻烦。有没有一种类似于PS&#xff0c;CAD…

2015年Java 8强势开始

JDK 8从2015年开始&#xff0c;其博客文章和文章的受欢迎程度将激增。 这与Java本月自动升级到JDK 8恰好吻合。 在这篇文章中&#xff0c;我列出并简要描述了2015年已经发布的有关JDK 8的众多文章和文章。 JDK 8 Streams在最近的帖子中很受欢迎。 我在2015年发表的第一篇博文是…

富文本编辑器、日期选择器、软件天堂、防止XSS攻击、字体icon、转pdf

【超好用的日期选择器】 Layui&#xff1a;http://www.layui.com/laydate/ 备注&#xff1a;日期选择器&#xff0c;用过很多很多&#xff0c;自己也写过一些&#xff1b;相信这个简单而又不简单的选择器&#xff0c;能够给你多些美好的时光 【很不错的几个富文本编辑器】 …

GIS开源程序收集(转载)

分类包括&#xff1a;GIS基础函数库、GIS控件、GIS桌面程序、GIS数据引擎、WEBGIS浏览器端程序、WEBGIS服务器程序、GPS相关程序&#xff0c;其它分类 派系&#xff1a;“NET”派系&#xff0c;“C”派系&#xff0c;“Java”派系&#xff0c;脚本派系&#xff0c;其它派系 “N…

Sacrilege –自定义SWT滚动条

SWT是本机OS小部件之上的薄抽象层。 如果您打算将应用程序与OS外观很好地集成在一起&#xff0c;那将是一件非常好的事情。 但是&#xff0c;作为一种折衷方案&#xff0c;这种方法大大限制了样式功能。 特别是&#xff0c;我感觉到本机SW​​T滚动条通常会干扰更精细的视图布…

关键字屏蔽-正则

【问题】关键字屏蔽是社交类软件必做的功能&#xff0c;当然了&#xff0c;一般来讲都是产品的中后期来做&#xff1b;不同产品规定不一样&#xff0c;跟着产品运营走&#xff0c;可以的 【方法】我们从技术的角度来看到这个问题&#xff0c;实现一个功能后者说实现一个需求&a…

Sub-Projects in Xcode(Xcode中的子项目)

source:http://www.cocoanetics.com/2011/12/sub-projects-in-xcode/ translation:http://www.xiaojiayi.com/2012/08/15/xcode中的子项目&#xff08;译文&#xff09;/ is work! 转载于:https://www.cnblogs.com/snowleung/archive/2012/09/26/2703250.html

堆上与堆外的内存使用情况

总览 最近有人问我在Java中使用堆内存的好处和智慧。 面临相同选择的其他人可能会对这些答案感兴趣。 堆外内存没什么特别的。 线程堆栈&#xff0c;应用程序代码&#xff0c;NIO缓冲区都在堆外。 实际上&#xff0c;在C和C 中&#xff0c;您只有非托管内存&#xff0c;因为默…

从CSS实现正片叠底看=混合模式mix-blend-mode

兼容性&#xff1a;这个东西说多了也没意思&#xff0c;像HTML5和CSS3这种兼容性时刻变化的东东&#xff0c;我们最好在自己支持的设备上实验&#xff0c;不支持&#xff0c;就在想办法呗&#xff0c;这个东西就是为了方便和好玩 所有属性&#xff1a; mix-blend-mode: normal…

实现对gridview删除行时弹出确认对话框的四种方法

实现对gridview删除行时弹出确认对话框的四种方法 在.net2.0中&#xff0c;实现对gridview删除行时弹出确认对话框的四种方法 1&#xff0c;GridView中如何使用CommandField删除时&#xff0c;弹出确认框? 在VS2005提供的GridView中我们可以直接添加一个CommandField删除列&am…

我最喜欢的Java拼图2 + 1 = 4

这是我当前最喜欢的Java难题。 您如何获取代码来执行此操作&#xff1f; Integer b 2; Integer c 1;System.out.println("bc : " (bc) ); // output: bc : 4 !!Sytem.out.println&#xff08;&#xff09;没有技巧&#xff0c;即您将能够在调试器中看到相同的值。…

CSS3盒模型温故

CSS有一种基础设计模式叫盒模型&#xff0c;定义了Web页面中的元素是如何看做盒子来解析的。每一个盒子有不同的展示界面&#xff0c;下面就来介绍盒模型&#xff0c;主要有一下几种盒模型&#xff1a;inline、inline-block、block、table、absolute position、float。浏览器把…

SSL与WildFly 8和Undertow

我一直在研究WildFly 8的一些安全性主题&#xff0c;偶然发现了一些配置文档&#xff0c;这些文档没有很好地记录。 其中之一是新Web子系统Undertow的TLS / SSL配置。 有许多关于较旧的Web子系统的文档&#xff0c;并且确实仍然可以使用&#xff0c;但是这里是使用新方法进行配…

伸展树

伸展树结合了二叉搜索树BST及二叉平衡树AVL的旋转特点&#xff0c;在每一次访问到某节点时都通过旋转将该节点往上推一位&#xff0c;由于没有保存高度信息因为空间复杂度稍优于二叉平衡树。伸展树的插入&#xff0c;删除&#xff0c;搜索的平均时间复杂度均为o(logn)&#xff…

CSS属性选择器温故-4

1.属性选择器就是通过元素属性来找到元素 2.属性选择器语法 CSS3遵循了惯用的编码规则&#xff0c;通配符的使用提高了样式表的书写效率&#xff0c;也使CSS3的属性选择器更符合编码习惯 3.浏览器兼容性 CSS选择器总结&#xff1a;CSS选择器和jQuery的选择器非常相似&#xff…

如何封装Spring bean

据我所知&#xff0c;Spring Framework除了具有单独的上下文之外&#xff0c;没有提供任何封装Spring bean的机制。 因此&#xff0c;当您在Spring的Inversion of Control容器中注册了公共类时&#xff0c;可以通过相同的上下文配置将其自动连接到任何Spring bean中。 这非常强…

分享下自己的EmpireofCode进攻策略 https://empireofcode.com/ https://empireofcode.com/game/#

# 没什么用&#xff0c;该游戏的模块调用不友好&#xff0c;取数据难import queue from battle import commander # import mathunit_client commander.Client() doing_last_order True towerid [] towerrg [] towerfr [] towerps [] tower_id 0 towers [] safe_posi[4…

Python多篇新闻自动采集

昨天用python写了一个天气预报采集&#xff0c;今天趁着兴头写个新闻采集的。 目标是&#xff0c;将腾讯新闻主页上所有新闻爬取下来&#xff0c;获得每一篇新闻的名称、时间、来源以及正文。 接下来分解目标&#xff0c;一步一步地做。 步骤1&#xff1a;将主页上所有链接爬取…

使用ADF BC管理保存点

在使用ADF BC时&#xff0c;我们通常依赖于在数据库中执行DML操作的框架。 在DBTransaction提交周期内&#xff0c;该框架正确地在数据库中进行了所有必要的更新。 很酷的事情是&#xff0c;在这种情况下&#xff0c;数据库事务将被自动管理。 因此&#xff0c;如果出现问题&am…

sql优化(转)

(转)SQL 优化原则一、问题的提出 在应用系统开发初期&#xff0c;由于开发数据库数据比较少&#xff0c;对于查询SQL语句&#xff0c;复杂视图的的编写等体会不出SQL语句各种写法的性能优劣&#xff0c;但是如果将应用 系统提交实际应用后&#xff0c;随着数据库中数据的增加&a…