词频统计设计

 需求概要:
  输入一段英文,根据段落中的英文字符,及常见标点,空格以及换行符对段落进行分割  统计英文单词在段落中出现的次数并输出单词以及其出现的次数,并对结果进行排序。
 代码分析:     1、输入一段英文;  2、用StringTokenizer将字符串分解;   3、将分解的结果进行循环遍历,利用hashmap 不允许重复性,统计单词个数,如果单词重复出现则数量加1,否则map中添加新单词,并且数量设置为1;   4、调用sort()方法,实现Comparator.compare接口 ,对map进行排序,  5、循环遍历集合中的键值对,并输出;

 1 执行代码
 2 package zuoye1;
 3 import java.util.ArrayList;
 4 import java.util.Collections;
 5 import java.util.Comparator;
 6 import java.util.HashMap;
 7 import java.util.List;
 8 import java.util.Map;
 9 import java.util.StringTokenizer;
10 import java.util.Map.Entry;
11 //词频统计(统计每个单词出现的次数,输出单词并排序)
12 public class Word {
13    public static void main(String[] args) {
14      String sentence = " While sharing a nickel or a quarter may go a long way for them, it is hard to believe the people would simply lie over and die. But to some people in such an unfortunate situation, it is more than simple surrender but another aspect of personal proportions that have led them to lose hope and live the rest of their days in misery."; //将要输入的句子或段落。
15      int wordCount=0; //每个单词出现的次数。
16      HashMap<String,Integer> map=new HashMap<String,Integer>();//用于统计各个单词的个数,排序
17      StringTokenizer token=new StringTokenizer(sentence);//这个类会将字符串分解成一个个的标记
18       while(token.hasMoreTokens()){ //循环遍历
19         wordCount++;
20         String word=token.nextToken(", ?.!:\"\"‘‘\n"); //括号里的字符的含义是说按照,空格 ? . : "" ‘‘ \n去分割
21         if(map.containsKey(word)){ //HashMap不允许重复的key,所以利用这个特性,去统计单词的个数
22             int count=map.get(word);
23             map.put(word, count+1); //如果HashMap已有这个单词,则设置它的数量加1
24         }else
25         map.put(word, 1); //如果没有这个单词,则新填入,数量为1
26         }
27           System.out.println("总共单词数:"+wordCount);
28           sort(map); //调用排序的方法,排序并输出!
29        }
30     //排序
31     public static void sort(HashMap<String,Integer> map){
32     //声明集合folder,存放map键值对
33         List<Map.Entry<String, Integer>> folder = new ArrayList<Map.Entry<String, Integer>>(map.entrySet());
34         Collections.sort(folder, new Comparator<Map.Entry<String, Integer>>() {
35             public int compare(Map.Entry<String, Integer> obj1, Map.Entry<String, Integer> obj2) {
36              return (obj2.getValue() - obj1.getValue());
37            }
38         });
39     //输出
40     for (int i = 0; i < folder.size(); i++) {
41         Entry<String, Integer> en = folder.get(i);
42         System.out.println(en.getKey()+":"+en.getValue());
43       }
44   }
45 }

执行结果
 1 总共单词数:64
 2 to:3
 3 a:3
 4 people:2
 5 of:2
 6 and:2
 7 them:2
 8 is:2
 9 it:2
10 the:2
11 in:2
12 but:1
13 for:1
14 surrender:1
15 long:1
16 unfortunate:1
17 over:1
18 more:1
19 would:1
20 While:1
21 But:1
22 misery:1
23 live:1
24 such:1
25 or:1
26 that:1
27 aspect:1
28 simply:1
29 than:1
30 rest:1
31 some:1
32 quarter:1
33 go:1
34 hope:1
35 have:1
36 simple:1
37 way:1
38 believe:1
39 another:1
40 personal:1
41 sharing:1
42 die:1
43 hard:1
44 situation:1
45 may:1
46 lose:1
47 proportions:1
48 days:1
49 led:1
50 an:1
51 nickel:1
52 their:1
53 lie:1
时间: 2024-09-27 16:03:32

词频统计设计的相关文章

C语言词频统计设计

项目需求: 1.设计一个词频统计小软件,对给定的英文文章进行单词频率的统计. 2.文章中相应的标点不计入统计. 3.将统计结果以从大到小的排序方式输出. 设计: 1.因为功能相对简单,采用C语言直接进行编写. 2.项目包含的统计功能利用定义的结构体分别对单词和次数进行统计. 3.以字符串的形式读取单词,并对其中的每个字符进行标点分析. 4.统计完成后采用冒泡排序的方式对次数进行排序. 5.将整个统计结果循环输出. 部分核心代码: 结构体定义: typedef struct addup { cha

词频统计设计的改进

1 package zuoye1; 2 3 import java.io.BufferedReader; 4 import java.io.FileNotFoundException; 5 import java.io.FileReader; 6 import java.io.IOException; 7 import java.util.ArrayList; 8 import java.util.Collections; 9 import java.util.Comparator; 10 im

词频统计-功能一

一.完成一个小程序 我 拿到这个题目之后,就决定用最不熟悉的c#来实现,因为老师说不懂的去学才会有进步.布置任务后的第二天就开始去图书馆借了两本书<c#从入门到精髓>,<c#项目实战>,拿到书之后看了入门书<c#从入门到精髓>,看书的过程时痛苦的,因为发现大二选修课学的c#全交还给老师了,只能重头再学了.唯一有点印象的就是窗口应用程序,基于UI的设计. 写代码首先需要工具,由于电脑上没有visual studio的安装包,当时求助了度娘. 如果没有安装包的同学们,可以借

第二周作业-词频统计

本周作业是词频统计,编程具体要求如下: https://edu.cnblogs.com/campus/nenu/SWE2017FALL/homework/922 对实现功能进行简要的介绍: 功能一:小文件输入,为表明程序能跑.需要在控制台下输入命令,得到文件中不重复的总单词数.并对单词出现的次数进行排序输出. 功能二:支持命令行输入英文作品的文件名,亲自录入,输出显示不重复单词总数,并对出现频率最高的前10的单词进行输出 功能三:支持命令行输入存储有英文作品文件的目录名,批量统计词频. 功能四:

(第二周)新英文词频统计

需求分析 1.两种读取文件的方法(建立两个类):  小文本输入.命令行输入文件名 2.进行词频统计 3.对结果进行排序并输出 https:https://git.coding.net/yanzouzhe/ywcptj.git SSH:[email protected]:yanzouzhe/ywcptj.git 功能实现 1.小文本输入读取文件 public class Article { /** * @param args */ String content;// 保存文章的内容 String[

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

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

java词频统计——web版支持

需求概要: 1.把程序迁移到web平台,通过用户上传TXT的方式接收文件. 2.用户直接输入要统计的文本,服务器返回结果 3.在页面上给出链接 (如果有封皮.作者.字数.页数等信息更佳)或表格,展示经典英文小说词频统计结果: 4.支持用户自定义单词分隔符: 5.词汇范围对比(额外项). 分析和设计: 1.创建web工程,利用servlet上传文件的技术实现用户向服务器上传文件.页面设置表单类型为enctype="multipart/form-data",创建文件上传文本框<inp

Hadoop基础学习(一)分析、编写并运行WordCount词频统计程序

前面已经在我的Ubuntu单机上面搭建好了伪分布模式的HBase环境,其中包括了Hadoop的运行环境. 详见我的这篇博文:http://blog.csdn.net/jiyiqinlovexx/article/details/29208703 我的目的主要是学习HBase,下一步打算学习的是将HBase作为Hadoop作业的输入和输出. 但是好像以前在南大上学时学习的Hadoop都忘记得差不多了,所以找到以前上课做的几个实验:wordCount,PageRank以及InversedIndex.

Python语音实现词频统计

需求: 1.设计一个词频统计的程序. 2.英语文章中包含的英语标点符号不计入统计. 3.将统计结果按照单词的出现频率由大到小进行排序. 设计: 1.基本功能和用法会在程序中进行提示. 2.原理是利用分隔符分词存入列表,然后从列表读出存入字典,键为词,值存放词的数量. 代码如图所示: 1.导入程序所需模块. 2.定义readfile类,实现去除文章中标点符号的功能. 3.定义一个getstr类,对结果输出格式进行定义. 4.构造程序主函数. 测试用例: 测试用例我选择了马丁.路德.金的演讲稿. 部