编写一个英文词频统计的程序。统计时不区分大小写,忽略所有的数字和标点符号。要求能处理普通的 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