• 第一次作业----词频统计


    一 实现主要功能:

       统计一篇英文文章的单词出现的频数并输出到文件。

    二 处理流程:

     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内容如下:

        

  • 相关阅读:
    web工作流管理系统开发之十八 工作流会签的相关实现
    工作流系统之三十一 回退流的实现
    web工作流管理系统开发之五 开源osworkflow之用户系统改造
    web工作流管理系统开发之十九 工作流系统的事务处理
    web工作流管理系统开发之十五 流程变量与表达式
    工作流系统开发之二十二 dotnet版工作流引擎
    web工作流管理系统开发之十七 任务管理
    利用httpclient+jericho多线程实现抓取网页内容
    工作流系统之二十六 .net工作流系统之扩展性
    工作流系统之二十九 详解工作流实例的一次流转
  • 原文地址:https://www.cnblogs.com/tanliming/p/5845850.html
Copyright © 2020-2023  润新知