java 英文词频统计


编写一个英文词频统计的程序。统计时不区分大小写,忽略所有的数字和标点符号。要求能处理普通的
txt 文本和 html 文本。在处理 html 文本时,要求过滤掉所有的 html 标签

分析:
这个做的比较水,处理Html格式时只是把尖括号和角括号里的内容去掉了
剩下的参考了一些别的网页,利用了 正则表达式map

代码:
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
import java.io.*;

public class Seven {
	static void countTextWords(String string){
		String stringArray[]=string.split("[^a-zA-Z]");
		
		final Map<String,Integer> map=new HashMap<String,Integer>();
		Integer count;
		for(int i=0;i<stringArray.length;i++){
			count=map.get(stringArray[i]);
			if(count==null){
				map.put(stringArray[i], 1);
			}else{
				map.put(stringArray[i], count+1);
			}
		}
		map.remove("");    //不知道为什么会有 什么值都不是的东西统计进去,这样可以去掉
		Set set=map.keySet();
		
		Integer sum=0,value;
		String key;
		for(Iterator iter=set.iterator();iter.hasNext();){   //先计算出总的单词数
			key=(String)iter.next();
			value=map.get(key);
			sum+=value;
		}
		for(Iterator iter=set.iterator();iter.hasNext();){
			key=(String)iter.next();
			value=map.get(key);
			float frequency=(float)value/sum;
			
			java.text.DecimalFormat df=new java.text.DecimalFormat("#0.000");
			System.out.println(key+":"+value+"  "+df.format(frequency));
		}

	}
	
	static void countHtmlWords(String string){
		string=string.replaceAll("<.*?>", "");
		countTextWords(string);
	}
	
	public static void main(String[] args) throws IOException {
		System.out.println("本程序统计txt或html文件的英文词频");
		System.out.println("注意:此程序不识别缩写词,会把缩写词以'为界当做两个单词处理!");
		System.out.println("请输入文件(绝对路径,包括后缀名):");
		Scanner reader=new Scanner(System.in);
		String name=reader.next();
		
		String context="";
		int c;

		FileReader fr=new FileReader(name);
		while((c=fr.read())!=-1){
			context+=(char)c;
		}
		context=context.toLowerCase();

		
		if(name.endsWith(".txt"))
			countTextWords(context);
		else if(name.endsWith(".html"))
			countHtmlWords(context);
		else
			System.out.println("不处理这种文件");
		reader.close();
		fr.close();
		
	}
}




参考网页:

 * http://blog.sina.com.cn/s/blog_7750745b0101c09d.html
 * http://blog.csdn.net/yuhua3272004/article/details/3075436
 * http://www.blogjava.net/changedi/archive/2013/01/20/394460.html
 * http://www.runoob.com/regexp/regexp-syntax.html
 * http://zhidao.baidu.com/link?url=Vr8hh5fydfJT_JEa_C3pK4rTC9oxKm12EuPMWmRfjRbVv37dwdgjVE14uhwJpuonlbKiTzHIKM6iKeo8pE3pzvwPq4GiEoVKud2Jt0Yd3dy
 * http://zhidao.baidu.com/link?url=cHSU6n1ltAwxp-hAyPmBHWQzUR9d7ymBtMUv20kBtL69CPSUFUZwl1ma_H1LSMZjLzXwWZfZsy0JkQH3s7l5Dq

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值