一 实现主要功能:
统计一篇英文文章的单词出现的频数并输出到文件。
二 处理流程:
1. 读入要分析的文件,从给定文件中获取单词信息,并存储到字串中。
2. 对字串进行预处理,包括标点符号的处理,多空格的处理。
3. 对处理后的字串进行分割,遍历,统计词频。
4. 将词频统计结果写入到指定的文件中。
三 代码实现(JAVA语言实现)
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; public class WordStatistics { public void getWordRate(String sourceFileName) { try { // 从给定文件中获取单词信息,并存储到字串中 String allWords = getFileWords(sourceFileName); // 将字符串转换成小写 allWords = allWords.toLowerCase(); allWords = allWords.replaceAll("[^A-Za-z]", " "); allWords = allWords.substring(4); allWords = allWords.replaceAll("\\s+", " "); // 将字串进行分割,存储到字符串数组 String[] singleWord = allWords.split("\\s+"); // 进行词频统计,将统计结果放到Map里,key为单词,value为单词出现的次数 Map<String, Integer> wordsMap = new HashMap<String, Integer>(); for (int i = 0; i < singleWord.length; i++) { String key = singleWord[i]; if (wordsMap.get(key) != null) { // 如果该单词已经存在map中,则对应的单词次数加1 int value = ((Integer) wordsMap.get(key)).intValue(); value++; wordsMap.put(key, new Integer(value)); } else { // 如果单词不在map中,则将该单词放入,初始化词频次数为1 wordsMap.put(key, new Integer(1)); } } // 将词频统计结果写入到指定的result.txt中 BufferedWriter bw = new BufferedWriter(new FileWriter(new File( System.getProperty("user.dir") + "//result.txt"))); for (String key : wordsMap.keySet()) { bw.append((key + " : " + wordsMap.get(key))); // 追加换行 bw.newLine(); } bw.close(); } catch (IOException e) { e.printStackTrace(); } } private String getFileWords(String sourceFileName) { // 从给定文件中获取单词信息,并存储到字串中 String allWords = null; try { BufferedReader br = new BufferedReader(new FileReader(new File( System.getProperty("user.dir") + "//" + sourceFileName))); String tmp = null; while ((tmp = br.readLine()) != null) { // 读出每一行,并加入到allWords allWords += tmp; } br.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return allWords; } public static void main(String[] args) { WordStatistics ws = new WordStatistics(); ws.getWordRate("word.txt"); } }
四 执行效果
1. 输入:要统计的文件word.txt,如下:
2. 输出:保存到result.txt,result.txt内容如下: