统计单词频率

今天老师又安排了一个任务:统计一个文件中出现最多的几个单词出现的频率。

怎么说呢,还是一点不会,只能上网搜,通过两小时的奋斗,我还是没能做出来,但是我知道了如何从读取文件中的信息的代码以及如何统计单词频率的代码;然而,我无法把他们合起来,也无法理解许多代码的作用,就只知道其功能,所以我想,我还是该再去借一本书随身背着,然后就是多花时间学习java了。

今晚又经过三个多小时,又搜了搜想了想,还把一些相似的代码进行对照,然而我还是无法改动代码分毫,我觉得我很无能,感觉三个多小时是白搭了,一事无成,也开始慌了,真的真的该下功夫学习java了。

以下是我的未实现功能的代码:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;

public class test {

      public static void findEnglishNum(String text){
          //找出所有的单词
          String[] array = {".", " ", "?", "!"};
          for (int i = 0; i < array.length; i++) {
              text = text.replace(array[i],",");
          }
          String[] textArray = text.split(",");  

          //遍历 记录
          Map<String, Integer> map = new HashMap<String, Integer>();
          for (int i = 0; i < textArray.length; i++) {
              String key = textArray[i];
              //转为小写
              String key_l = key.toLowerCase();
              if(!"".equals(key_l)){
                  Integer num = map.get(key_l);
                  if(num == null || num == 0){
                      map.put(key_l, 1);
                  }else if(num > 0){
                      map.put(key_l, num+1);
                  }
              }
          }
          //输出到控制台
          System.out.println("各个单词出现的频率为:");
          Iterator<String> iter = map.keySet().iterator();
          while(iter.hasNext()){
              String key = iter.next();
              Integer num = map.get(key);
              System.out.println(key + "\n\t\t" + num + "次\n-------------------");
          }
      }

    public static void main(String[] args) {
        fread("G:\\yingyu.txt");
        findEnglishNum()
    }
    // 读取文件:
    public static void fread(String fileurl) {
        File file = new File(fileurl);
        BufferedReader bfr = null;
        try {
            bfr = new BufferedReader(new FileReader(file));
            String tem = null;
            String value = "";
            while ((tem = bfr.readLine()) != null) {
                value = value + tem;
            }
            System.out.println(value);
            // 将读取的字符串转换成字符数组:
            char[] c = value.toCharArray();
            // 定义一个map来存储结果:
            // HashMap<Character,Integer> tm = new
            // HashMap<Character,Integer>(Collections.reverseOrder());
            TreeMap<Character, Integer> tm = new TreeMap<Character, Integer>(Collections.reverseOrder());// TreeMap可排序(传入一个反转比较器)

            for (int i = 0; i < c.length; i++) {
                char charSrc = c[i];
                if (tm.containsKey(charSrc)) { // 判断该键的值是否存在
                    int count = tm.get(charSrc);
                    tm.put(charSrc, count + 1);
                } else {
                    tm.put(charSrc, 1);
                }
            }

            // 取出Map中的键和值
            Iterator<Map.Entry<Character, Integer>> titer = tm.entrySet().iterator();
            while (titer.hasNext()) {
                Map.Entry<Character, Integer> map = titer.next();
                char key = map.getKey();
                int valu = map.getValue();
                System.out.println(key + "出现过" + valu + "次!");
            }

        } catch (Exception e) {
            System.err.println("文件读取错误");
        } finally {
            try {
                if (bfr != null) {
                    bfr.close();
                }
            } catch (Exception e2) {
                System.err.println("文件关闭错误");
            }
        }
    }
}
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Scanner;

public class tongji {
     public static String txt2String(File file){
            StringBuilder result = new StringBuilder();
            try{
                BufferedReader br = new BufferedReader(new FileReader(file));//构造一个BufferedReader类来读取文件
                String s = null;
                while((s = br.readLine())!=null){//使用readLine方法,一次读一行
                    result.append(System.lineSeparator()+s);
                }
                br.close();
            }catch(Exception e){
                e.printStackTrace();
            }
            return result.toString();
        }
     //读取文件信息的方法。

     public static void findEnglishNum(String text){
         //找出所有的单词
         String[] array = {".", " ", "?", "!"};
         for (int i = 0; i < array.length; i++) {
             text = text.replace(array[i],",");
         }
         String[] textArray = text.split(",");  

         //遍历 记录
         Map<String, Integer> map = new HashMap<String, Integer>();
         for (int i = 0; i < textArray.length; i++) {
             String key = textArray[i];
             //转为小写
             String key_l = key.toLowerCase();
             if(!"".equals(key_l)){
                 Integer num = map.get(key_l);
                 if(num == null || num == 0){
                     map.put(key_l, 1);
                 }else if(num > 0){
                     map.put(key_l, num+1);
                 }
             }
         }
         //输出到控制台
         System.out.println("各个单词出现的频率为:");
         Iterator<String> iter = map.keySet().iterator();
         while(iter.hasNext()){
             String key = iter.next();
             Integer num = map.get(key);
             System.out.println(key + "\n\t\t" + num + "次\n-------------------");
         }
     }

     public static void main(String[] arg) {
        File file = new File("G:/yingyu.txt");
        System.out.println(txt2String(file));

        String abc = "Welcome welcome to ADempiere, a commons-based peer-production of Open Source ERP Applications. This Wiki is for the global community to contribute and share know-how and domain expertise. We hope you can find as much open information and participate in making it most usable for everyone. This project has a bazaar of Citizens with a Community Council Team which work in theFunctional Team and Technical Team along the Software Development Procedure supported and funded by the foundation ADempiere";  

        findEnglishNum(abc);

    }
}

原文地址:https://www.cnblogs.com/sljslj/p/9775513.html

时间: 2024-11-10 11:09:02

统计单词频率的相关文章

统计单词频率--map

问题描述: 输入一个单词列表,每行一个单词,统计单词出现的频率 思路: 主要是使用c++中的map容器.map实质上是一个二叉查找树,可以做到插入.删除.查询,平均查询时间在O(logn).n为map中元素的个数,将字符串数据插入到map后,再用迭代器去访问map中的元素时,其实是按照map中插入的字符串的字典序进行访问的. map可以建立任意两种数据类型的关系,形式为map<type1,type2>map1.type1表示键key,type2表示值value.键是用来进行索引. 源代码: 1

统计一段文章的单词频率,取出频率最高的5个单词和个数(python)

练习题:统计一段英语文章的单词频率,取出频率最高的5个单词和个数(用python实现) 怎么判定单词?1 不是字母的特殊字符作为分隔符分割字符串 (避免特殊字符的处理不便,全部替换成'-')2 遍历字符串,取每个word3 正则匹配 怎么统计个数?将wordlist的word和word的个数放入dict,排序 ''' dinghanhua 2018-11-11 练习:一段英文文章,统计每个单词的频率,返回出现频率最高的5个单词和次数 ''' import re art = ' If we wan

素数,回文,统计单词

素数 设计思想 按照除k取余的思想,循环进行除法取余数,余数为零表示可以被其他数整出,则不是素数. package numbe; import java.util.Scanner; public class Prime { public static void main(String[] args) { int i = 0; System.out.println("1. 3-100 2. 任意两数 3. 最大十个和最小十个"); Scanner sc = new Scanner(Sys

统计单词个数

驱动开发的第六章让我了解了统计单词个数的Linux驱动程序开发和测试的完整过程. Linux系统将每一个驱动都映射成一个文件,这些文件被称为设备文件或驱动文件,都保存在/dev目录中.由于大多数Linux驱动都有与其对应的设备文件,因此与Linux驱动交换数据就变成了与设备文件交换数据. 编写Linux驱动程序的步骤:第一步,建立Linux驱动骨架(装载和卸载Linux驱动):第二步,注册和注销设备文件:第三步,指定与驱动相关的信息:第四步,指定回调函数:第五步,编写业务逻辑:第六步,编写mak

NOIP2001 统计单词个数

题三 统计单词个数(30分) 问题描述 给出一个长度不超过200的由小写英文字母组成的字母串(约定;该字串以每行20个字母的方式输入,且保证每行一定为20个).要求将此字母串分成k份(1<k<=40),且每份中包含的单词个数加起来总数最大(每份中包含的单词可以部分重叠.当选用一个单词之后,其第一个字母不能再用.例如字符串this中可包含this和is,选用this之后就不能包含th). 单词在给出的一个不超过6个单词的字典中. 要求输出最大的个数. 输入格式 去部输入数据放在文本文件input

codevs 1040 统计单词个数

1040 统计单词个数 2001年NOIP全国联赛提高组  题目等级 : 黄金 Gold 题目描述 Description 给出一个长度不超过200的由小写英文字母组成的字母串(约定;该字串以每行20个字母的方式输入,且保证每行一定为20个).要求将此字母串分成k份(1<k<=40),且每份中包含的单词个数加起来总数最大(每份中包含的单词可以部分重叠.当选用一个单词之后,其第一个字母不能再用.例如字符串this中可包含this和is,选用this之后就不能包含th)(管理员注:这里的不能再用指

第六章第一个Linux驱动程序:统计单词个数

第六章介绍如何在多种平台,使用多种方法测试Linux驱动. 本章主讲统计单词个数的算法的实现技术:Linux驱动.统计单词个数的功能是封装在Linux驱动中的.驱动不一定是直接和硬件打交道的,还可以喝普通的library一样提供其他程序的调用来实现特定功能的. 第一节Linux驱动到底是个什么东西 Linux驱动和普通的Linux API没有本质上的区别,只是使用Linux驱动的方式和使用Linux API的方法不同. Linux系统将每一个驱动都映射成一个文件,这些文件称为设备文件或驱动文件,

洛谷 【P1026】统计单词个数

P1026 统计单词个数 题目描述 给出一个长度不超过200的由小写英文字母组成的字母串(约定;该字串以每行20个字母的方式输入,且保证每行一定为20个).要求将此字母串分成k份(1<k<=40),且每份中包含的单词个数加起来总数最大(每份中包含的单词可以部分重叠.当选用一个单词之后,其第一个字母不能再用.例如字符串this中可包含this和is,选用this之后就不能包含th). 单词在给出的一个不超过6个单词的字典中. 要求输出最大的个数. 输入输出格式 输入格式: 每组的第一行有二个正整

第六章 第一个Linux驱动程序:统计单词个数 心得笔记

一.Linux系统将每个驱动都映射成一个文件.这些文件称为设备文件或驱动文件,都保存在/dev目录中.这使得与Linux驱动进行交互就向与普通文件进行交互一样容易.大多数Linux驱动都有与其对应的设备文件,因此与Linux驱动交换数据变成与驱动设备交换数据. 二.编写Linux驱动程序 1.建立Linux驱动骨架           Linux内核在使用驱动时需要装载与卸载驱动        装载驱动:建立设备文件.分配内存地址空间等:module_init 函数处理驱动初始化