实现功能有统计全部单词数(不记重复)
单词按频率排序输出。
package exam.b;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author 小e
*
* 2010-5-27 下午10:08:29
*/
public class TextAnalyse {
class Word{
String str;
int num;
public Word(String str){
this.str = str;
num = 1;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + getOuterType().hashCode();
result = prime * result + num;
result = prime * result + ((str == null) ? 0 : str.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Word other = (Word) obj;
if (!getOuterType().equals(other.getOuterType()))
return false;
if (num != other.num)
return false;
if (str == null) {
if (other.str != null)
return false;
} else if (!str.equals(other.str))
return false;
return true;
}
private TextAnalyse getOuterType() {
return TextAnalyse.this;
}
public void increase(){
synchronized (this) {
num ++;
}
}
@Override
public String toString() {
// TODO Auto-generated method stub
return str + "[" + num + "]";
}
}
private String path;
private int wordNums;//出现的单词个数
private Map<String, Word> wordsMap;
private List<String> onceWords;
private List<Word> allWord;
public TextAnalyse(String path) {
this.path = path;
wordsMap = new HashMap<String, Word>();
allWord = new ArrayList<Word>();
}
//单词的比较器
Comparator<Word> wordComparator = new Comparator<Word>() {
@Override
public int compare(Word w1,Word w2) {
return w2.num - w1.num;
}
};
/**
* 文本分析
*/
public void analyse(){
try {
RandomAccessFile rf = new RandomAccessFile(path,"rw");
String str;
String words[];
while((str = rf.readLine()) != null){
words = str.split("\\s+");
add2Set(words);
}
Collections.sort(allWord, wordComparator);//对所有单词按出现次数排序
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 返回单词出现的次数
* @return
*/
public int getWordsNum(){
return wordNums;
}
/**
* 得到只出现一次的单词
* @return
*/
public List<String> getOnceWords(){
if(onceWords == null){
onceWords = new ArrayList<String>();
for(String str : wordsMap.keySet()){
if(wordsMap.get(str).num == 1){
onceWords.add(str);
}
}
}
return onceWords;
}
public List<Word> getAllWord(){
return allWord;
}
private void add2Set(String[] words) {
for(String str : words){
Word word = new Word(str);
if(wordsMap.containsKey(str)){
wordsMap.get(str).increase();//单词个数自增
}else{
wordsMap.put(str, word);
allWord.add(word);
wordNums ++;
}
}
}
public static void main(String[] args) {
TextAnalyse ta = new TextAnalyse("words.txt");
ta.analyse();
System.out.format("文中共出现单词%d次\n", ta.getWordsNum());
System.out.println("出现一次的单词");
for(String word : ta.getOnceWords()){
System.out.print(word + " ");
}
System.out.println("单词按频率从高到底排序");
for(Word word : ta.allWord){
System.out.println(word);
}
}
}
分享到:
相关推荐
如果不想在学习中一直查询单词或者下载翻译软件的话,建议学习这些单词,对于初学者作用较大。
实现一个文件单词统计并绘图的JAVA程序
* 单词统计算法的主要步骤是:读取文件中的内容,使用正则表达式匹配单词,统计单词出现的次数,并将结果写入到输出文件中。 * 在本例中,使用 `Pattern` 和 `Matcher` 类来实现正则表达式匹配,使用 `TreeMap` 来...
在这个特定的项目中,"JAVA实现的单词统计、绘制图表程序"是一个利用Java编写的工具,它的主要功能是分析文本文件中的单词频率,并通过图表展示这些数据。这个程序对于文本挖掘、语言学研究或者教育场景都非常实用。...
### Java词频统计算法(使用单词树) #### 背景与问题 在文本处理领域,词频统计是一项常见的任务。例如,在自然语言处理、搜索引擎优化、文档分类等应用场景中,了解某个词语出现的频率至关重要。传统的词频统计...
【标题】:“单词统计排序输出(java的GUI实现)”是一个使用Java编程语言设计的图形用户界面(GUI)应用程序,其主要功能是处理英文文本,统计其中的单词数量,并按字母顺序排列显示每个单词的出现次数。...
Java TreeMap统计单词出现的次数 Java TreeMap是一个有序的Map实现,它可以根据对象的自然顺序或自定义的比较器对键进行排序。在本例中,我们使用TreeMap来统计一个句子或一个段落中单词出现的次数,并按照字母表...
可以用简单的图形界面显示文本所有英文单词的数目,并可以查询固定单词的个数
在这个"单词统计案例"中,我们将深入探讨Hadoop如何处理文本数据,进行简单的单词计数任务。这个任务是Hadoop初学者经常接触的经典示例,它展示了Hadoop MapReduce的基本工作原理。 MapReduce是Hadoop的核心计算...
创建一个类,实现统计文本文件中各类字符和字符串的个数的功能,要求实现: 按单词统计,输出各个单词的数量
"chongfu.rar_Java字符串空格_单词统计_统计单词"这个标题暗示了我们将重点研究基于空格分隔的字符串进行单词统计的方法。 首先,我们需要理解Java中的字符串对象。`String`类在Java中是不可变的,这意味着一旦创建...
"单词统计小程序"是一款专为处理文本文件设计的实用工具,其主要功能是高效地计算出文本文件中的单词总数。这个小程序在各种场景下都非常有用,例如在写作、编辑、学术研究或者语言学习中,可以帮助用户快速了解文档...
【Java单词统计程序详解】 本Java程序旨在完成一个单词统计任务,从用户指定的TXT文本中读取英文单词,统计每个单词出现的次数,并通过图形化界面展示统计结果。以下是程序设计的关键知识点: 1. **文件操作**: ...
总的来说,"yyc.rar_单词本java" 是一个基于Java的文本处理工具,它利用Java的文件读写、字符串处理和数据结构等特性,实现了对英文文章的单词统计,为用户提供了一种便捷的单词频率分析手段。对于学习Java编程和...
编写程序,统计英文文本文件中的字符数目和单词数目。程序运行时,输入要统计的文件的名称,程序处理后输出字符数目和单词数目。 (程序去除文本开头的空格与回车,统计中将回车换行也统计在内,算两个字符)
本篇Java作业是关于单词统计的程序设计,目标是读取一个纯英文单词组成的TXT文本,统计其中每个单词的出现次数,并以图形化的方式展示结果。以下是对该作业的详细解析: 首先,程序需要实现的基本功能包括: 1. ...
### 编写Java程序实现统计单词个数功能 本文旨在详细介绍如何通过Java编程结合Hadoop技术来实现统计文件中单词个数的功能。该过程包括了客户端环境的搭建、Hadoop集群的基本操作、Java程序的设计与编写等多个方面。...
在本Java实验项目中,我们将关注的是文本处理和单词统计,这是编程中常见的任务,尤其在数据处理、信息检索和自然语言处理等领域。这个项目主要包含两个部分:一是统计含有子字符串"or"的单词个数,二是统计以字符"m...
本项目“e8_1.rar_单词统计_统计单词”就是一个使用Java实现的简单程序,旨在统计用户输入的一句话中的单词数量。这个小程序可以作为一个基础的文本处理示例,帮助初学者理解字符串操作、正则表达式以及控制流在Java...
### 统计字母个数Java小程序详解 #### 程序功能概述 本文将详细介绍一个简单的Java程序,该程序的功能是统计给定字符串中的字母数量。这个小程序通过遍历字符串中的每个字符,并检查它们是否为字母来实现其功能。...