week2 词频统计第一次更新

词频统计:

功能1:小文件输入键盘在控制台下输入命令。

在控制台输入文件名:使用scanner获取控制台数据

System.out.println("请输入要统计的文件路径");
Scanner sc = new Scanner(System.in);
String road = sc.nextLine();
FileInputStream fis = new FileInputStream(road);// 要读的文件路径
InputStreamReader isr = new InputStreamReader(fis);// 字符流
BufferedReader infile = new BufferedReader(isr); // 缓冲

从读取的txt文件中获取单词,使用正则,将非单词的部分转换成空格

String words[];
file = file.toLowerCase();
//正则将非字母,符号等用空格代替
file = file.replaceAll("[^A-Za-z]", " ");
file = file.replaceAll("\\s+", " ");
words = file.split("\\s+");

将获取的键值对存入hashmap

for (int i = 0; i < words.length; i++) {
		String key = words[i];
		if (map.get(key) != null) {
			int value = ((Integer) map.get(key)).intValue();
			value++;
			map.put(key, new Integer(value));
		} else {
			map.put(key, new Integer(1));
		}
}

对单词按词频(即键值对的value)进行降序排列。重写Collection类中的sort方法,完成降序。

List<Map.Entry<String,Integer>> list =new ArrayList<Map.Entry<String,Integer>(map.entrySet());

Collections.sort(list,new Comparator<Map.Entry<String,Integer>>(){
        @Override
        public int compare(Entry<String, Integer> arg0, Entry<String, Integer> arg1) {
	// TODO Auto-generated method stub
	    return arg1.getValue().compareTo(arg0.getValue());
	}
});

对完成排序的键值对进行输出。使用util.Map包下的Entry对hashMap进行遍历输出

for(Map.Entry<String, Integer>mapping:list){
	System.out.println(mapping.getKey()+","+mapping.getValue());
}

运行结果:

功能2. 支持命令行输入英文作品的文件名

>wf gone_with_the_wand

total 1234567 words

功能3. 支持命令行输入存储有英文作品文件的目录名,批量统计。
>dir folder
gone_with_the_wand
runbinson
janelove
>wf folder
gone_with_the_wand
total 1234567 words

功能4. 从控制台读入英文单篇作品

在控制台可以输入英文文章名字或者文章内容

时间: 2024-10-29 19:06:45

week2 词频统计第一次更新的相关文章

词频统计的java实现方法——第一次改进

需求概要 原需求 1.读取文件,文件内包可含英文字符,及常见标点,空格级换行符. 2.统计英文单词在本文件的出现次数 3.将统计结果排序 4.显示排序结果 新需求: 1.小文件输入. 为表明程序能跑 2.支持命令行输入英文作品的文件名 3. 支持命令行输入存储有英文作品文件的目录名,批量统计. 4. 从控制台读入英文单篇作品 程序输入: 1.控制台输入文本 2.英文文本文件 3.英文目录,目录下包含单个或多个英文文本文件 程序输出: 1.英文单词在本文件或控制台输入中的出现的次数,按出现次数排序

2nd 词频统计更新

词频统计更新 实现功能:从控制台输入文件路径,并统计单词总数及不重复的单词数,并输出所有单词词频,同时排序. 头文件 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 定义宏 #define WORD_LENGTH 250 定义结构体及全局变量 typedef struct Node { char word[WORD_LENGTH]; int time; struct Node *next;

第二周-词频统计更新

词频统计功能新增: HTTPS:https://git.coding.net/li_yuhuan/WordFrequency.git SSH:[email protected]:li_yuhuan/WordFrequency.git 代码: static void Main(string[] args) { string str = ""; int length = args.Length; switch (length) { case 0: { string line = Conso

效能分析——词频统计的java实现方法的第一次改进

java效能分析可以使用新版本jdk自带的jvisualvm工具进行统计 由于词频统计的运行在本人使用的机器上运行很快,无法被jvisualvm捕捉到线程的运行,所以捕捉的是eclipse的运行波动间接反映词频统计的效能 捕捉到的快照如下: 词频统计处理的文件为WarAndPeace,大小3282KB约3.3MB,输出结果到文件 在程序本身内开始和结束分别加入时间戳,差值平均为480-490ms.

词频统计更新

代码有两个分支,1.选择输入文本路径或,2.选择直接输入文章. public static void main(String[] args) { HashMap<String,Integer> map=new HashMap<String,Integer>();//用于统计各个单词的个数,排序 //过滤字符串中的所有标点符号 String regex=" ?.!:,\"\"'';\n"; BufferedReader br; try { //

单词词频统计(12组)

单词词频统计 0.前言 该程序写于2018年7月9日,在北京航空航天大学与南通大学鞠小林老师结对完成.在此期间通过结对编程完成整个项目的需求分析.设计.开发.测试等.现在回顾一下这个程序的编写过程.与鞠老师的合作是很愉快的.总体信息如下: + 小组GitHub 地址:https://github.com/yuan574954352/WordCount + 博客园博客地址: + PSP PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟

词频统计效能测试---------第二版

在第一次的词频统计中,对JProfile 款软件不是很熟悉,感觉数据不是很准确,在程序启动时JProfile总是提示Java虚拟机已退出,后来经过查阅知道解决方案:截图如下   要将 keep vm alive 勾选上. 程序总体总体情况如下: 当程序运行之后,cpu和内存的使用几乎在同一时间有一个明显的上升过程. 各个对象使用情况如下 下面是热点函数的展示,这也和我在程序中运用时间戳确定建树函数[generateCharTree()]占用时间较多的情况相符.因为对这个程序来说主要时间都花费在单

个人项目——词频统计

前言: 开发工具:Visual Studio 2013 开发语言:C++ 源代码管理工具:Github Github源代码网址:https://github.com/superyy/YY1/blob/master/%E8%AF%8D%E9%A2%91%E7%BB%9F%E8%AE%A1main.cpp 预计各功能所花时间:some hours 实际各功能所花时间:some hours 性能提高所花时间:some hours 要求 :实现一个控制台程序,给定一段英文字符串,统计其中各个英文单词(4

实验二-3 Hadoop&amp;Paoding 中文词频统计

  参考教程 在Hadoop上使用庖丁解牛(较复杂,并未采用,可以之后试试) http://zhaolinjnu.blog.sohu.com/264905210.html Lucene3.3.Lucene3.4中文分词——庖丁解牛分词实例(屈:注意版本) http://www.360doc.com/content/13/0217/13/11619026_266124504.shtml 庖丁分词在hadoop上运行时的配置问题(采纳了一半,没有按照其所写配置dic属性文件) http://f.da