【第二周】Java实现英语文章词频统计(改进1)
本周根据杨老师的spec对英语文章词频统计进行了改进
1.需求分析:
对英文文章中的英文单词进行词频统计并按照有大到小的顺序输出,
2.算法思想:
(1)构建一个类用于存放英文单词及其出现的次数
class WordAndNum{
public String word;
public int num;
}
(2)从txt中获取字符串
BufferedReader in=new BufferedReader(new FileReader("D:\\test.txt"));
String line=null;
while((line=in.readLine())!=null)
(3)将字符串中的单词截取出来存到ArrayList中
ArrayList<WordAndNum> list=new ArrayList<WordAndNum>();
int index1=0;
int index2 = 0;
//截取英文单词
index1=line.indexOf(" ");
String word=line.substring(0,index1);
WordAndNum wdn=new WordAndNum();
wdn.word=word;
wdn.num=1;
list.add(wdn);
for(int i=index1+1;i<line.length();i++){
if(line.charAt(i)==','||line.charAt(i)=='.'||line.charAt(i)==';'||line.charAt(i)==' '||line.charAt(i)=='?'){
index2=i;
WordAndNum wdn2=new WordAndNum();
word=line.substring(index1+1,index2);
wdn2.word=word;
boolean flag=falsefor(int j=0;j<list.size();j++){
if(list.get(j).word.equals(word)){
wdn2.num=list.get(j).num+1;
list.set(j, wdn2);
flag=true;
break;
}
}
if(flag==false){
wdn2.num=1;
list.add(wdn2);
}
index1=index2;
}
}
(4)对ArrayList进行冒泡排序
//冒泡排序
for(int i=0;i<list.size();i++){
for(int j=0;j<list.size()-i-1;j++){
if(list.get(j).num<list.get(j+1).num){
WordAndNum wd1=list.get(j);
WordAndNum wd2=list.get(j+1);
list.set(j, wd2);
list.set(j+1, wd1);
}
}
}
3.具体代码
package ruan.jian.gong.cheng; import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList; class WordAndNum{
public String word;
public int num;
} public class wordNum2 {
public static void main(String[] args) {
try{
BufferedReader in=new BufferedReader(new FileReader("D:\\test.txt"));
String line=null;
ArrayList<WordAndNum> list=new ArrayList<WordAndNum>();
while((line=in.readLine())!=null){
int index1=0;
int index2 = 0;
//截取英文单词
index1=line.indexOf(" ");
String word=line.substring(0,index1);
WordAndNum wdn=new WordAndNum();
wdn.word=word;
wdn.num=1;
list.add(wdn);
for(int i=index1+1;i<line.length();i++){
if(line.charAt(i)==','||line.charAt(i)=='.'||line.charAt(i)==';'||line.charAt(i)==' '||line.charAt(i)=='?'){
index2=i;
WordAndNum wdn2=new WordAndNum();
word=line.substring(index1+1,index2);
wdn2.word=word;
boolean flag=false;
for(int j=0;j<list.size();j++){
if(list.get(j).word.equals(word)){
wdn2.num=list.get(j).num+1;
list.set(j, wdn2);
flag=true;
break;
}
}
if(flag==false){
wdn2.num=1;
list.add(wdn2);
}
index1=index2;
}
}
}
//冒泡排序
for(int i=0;i<list.size();i++){
for(int j=0;j<list.size()-i-1;j++){
if(list.get(j).num<list.get(j+1).num){
WordAndNum wd1=list.get(j);
WordAndNum wd2=list.get(j+1);
list.set(j, wd2);
list.set(j+1, wd1);
}
}
}
for(int i=0;i<list.size();i++){
System.out.println(list.get(i).word+"==="+list.get(i).num);
}
}catch(Exception e){
e.printStackTrace();
} }
}
4.以如下英文文章为例,输出结果为



5.结果分析:可以对英文文章进行词频统计并按从大到小进行输出
【第二周】Java实现英语文章词频统计(改进1)的更多相关文章
- 【第二周】Java实现英语文章词频统计
1.需求:对于给定的英文文章进行单词频率的统计 2.分析: (1)建立一个如下图所示的数据库表word_frequency用来存放单词和其对应数量 (2)Scanner输入要查询的英文文章存入Stri ...
- 1st 英文文章词频统计
英文文章词频统计: 功能:统计一篇英文文章的单词总数及出现频数并输出,之后排序,输出频数前十的单词及其频数. 实现方法:使用C语言,用fopen函数读入txt文件,fscanf函数逐个读入单词,结构体 ...
- 如何用java完成一个中文词频统计程序
要想完成一个中文词频统计功能,首先必须使用一个中文分词器,这里使用的是中科院的.下载地址是http://ictclas.nlpir.org/downloads,由于本人电脑系统是win32位的,因此下 ...
- 第二周java学习收获
JAVA学习第二周总结 教材学习内容总结 第二章:讲了标识符与关键字,以及基本数据类型:逻辑类型.整数类型.字符类型.浮点类型. 输入输出,System.in,System.out和数组. 第三章:运 ...
- 第二周java学习总结
学号 20175206 <Java程序设计>第二周学习总结 教材学习内容总结 第二章是基本数据类型与数组,第三章是运算符.表达式和语句的内容.如果说第一章是让我们了解JAVA,那么第二章和 ...
- java词频统计——改进后的单元测试
测试项目 博客文章地址:[http://www.cnblogs.com/jx8zjs/p/5862269.html] 工程地址:https://coding.net/u/jx8zjs/p/wordCo ...
- 20145231第二周Java学习笔记
20145231 <Java程序设计>第2周学习总结 教材学习内容总结 本周的学习采用的依然是先看课本,再看视频,然后实践敲代码,最后根据学习笔记总结完成博客. 第三章:基础语法 知识点比 ...
- 201521123021第二周Java学习总结
1.本章学习总结 ①初步掌握了Java程序简单的输入和输出. ②回顾了运算符和表达式的使用. ③在数据类型的学习的中,要注意各类型的取值范围,特别是byte型范围很小,若为128即溢出. ④在Java ...
- 201521123110第二周Java学习总结
1.本章学习总结 本周的Java学习相对前一周更进了一步,初步学习了Java简单的输入和输出,String类的对象创建后不能修改,它是不可变的,在Java中浮点型默认是double型与C中的int型不 ...
随机推荐
- LSTM网络应用于DGA域名识别--文献翻译--更新中
原文献名称 Predicting Domain Generation Algorithms with Long Short-Term Memory Networks原文作者 Jonathan Wood ...
- 用GO把你想说的话写到比特币链上
比特币除了币转账还有不少好玩的地方,比如把你想说的话写上去,可以当做留念.记录.或者装逼.今天用GO语言写了一个比特币交易构建.交易签名的程序. 生成的交易信息可以在比特币控制台用sendrawtra ...
- spark 例子wordcount topk
spark 例子wordcount topk 例子描述: [单词计算wordcount ] [词频排序topk] 单词计算在代码方便很简单,基本大体就三个步骤 拆分字符串 以需要进行记数的单位为K,自 ...
- Visual SVN 备份
-----------2018.11.27更新-------------- 这两天把SVN的服务器重做了,按照之前的LOAD,DUMP的方法备份恢复.发现了以下问题: 1,时间比较长,备份和恢复都很长 ...
- 20155328 2016-2017-2 《Java程序设计》 第十周学习内容总结
20155328 2016-2017-2 <Java程序设计>第十周学习总结 教材学习内容总结 JAVA和ANDROID开发学习指南 第22章 网络概览 两台计算机用于通信的语言叫做&qu ...
- KDTable如何添加合计行?
/** * 功能:添加合计行 * * @param table * 指定的KDTable * @param fields * 需要合计的列 */ public static void apendFoo ...
- Android 学习1
使用eclipse做为开发IDE, 导包快捷键 在显红的地方按shift+ctrl+o 另外自动补全使用alt+/
- 一个web应用的诞生(4)--数据存储
上一章实现了登录的部分功能,之所以说是部分功能,是因为用户名和密码写成固定值肯定是不可以的,一个整体的功能,至少需要注册,登录,密码修改等,这就需要提供一个把这些值存储到数据库的能力. 当前的主流数据 ...
- php使用mysql之sql注入(功)
sql注入就是用户通过构造sql语句,完成sql一系列操作 准备素材如下: 这是test.html <!DOCTYPE html> <html> <meta charse ...
- python Matplotlib数据可视化神器安装与基本应用
Matplotlib Matplotlib 是一个非常强大的 Python 画图工具; 手中有很多数据, Matplotlib能帮你画出美丽的: 线图; 散点图; 等高线图; 条形图; 柱状图; 3D ...