#统计名著中汉字出现频率

##统计文本中每个汉字出现的次数,不同的汉字数,汉字的重复率

  • 因为最近发现成人英语掌握的词汇量大概是2-3万(有个词汇测试网站的数据);
  • 而常用的汉字是5000字,我想统计下读《三国演义》需要的词汇量;
  • 也统计了下英文名著的词汇量 统计英文名著中单词出现频率
package com.liu.practice.common;import java.io.BufferedReader;
import java.io.File;
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;
import java.util.regex.Matcher;
import java.util.regex.Pattern;/*** 统计文本中每个汉字出现的次数,不同的汉字数,汉字的重复率* 因为最近发现成人英语掌握的词汇量大概是2-3万(有个词汇测试网站的数据),* 而常用的汉字是5000字,我想统计下读《三国演义》需要的词汇量;* 有空再统计下英文名著的词汇量* * @author gary**/
public class StatisticCharacter {public static double totalCount = 0;public static double diffWord = 0;public static Map<String, Integer> characterMap = new HashMap<String, Integer>();public static ArrayList<Entry<String, Integer>> sortWordList;public static void main(String[] args) throws IOException {String fileName = "/users/gary/Documents/Study/Practice/sanguo1.txt";String words = "";File file = new File(fileName);BufferedReader bufferedReader = new BufferedReader(new FileReader(file));String str = null;while ((str = bufferedReader.readLine()) != null) {sumWordNum(str);}bufferedReader.close();System.out.println("总字数------" + totalCount);System.out.println("不同的字数------" + diffWord);sort(characterMap);FileWriter fileWriter = null;try {fileWriter = new FileWriter("/users/gary/Documents/Study/Practice/output.txt");for (Entry<String, Integer> entry : sortWordList) {//              System.out.println(entry.getKey() + "------" + entry.getValue());words += entry.getKey() + "------" + entry.getValue() + "\r\n";}fileWriter.write(words);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {if (fileWriter != null) {fileWriter.close();}}System.out.println("重复率-----" + ((totalCount-diffWord)/totalCount));}/*** 统计总字数和每个字出现的次数* * @param str*/public static void sumWordNum(String str) {int num;Pattern p = Pattern.compile("[\\u4e00-\\u9fa5]");Matcher matcher = p.matcher(str);while (matcher.find()) {totalCount++;if (!characterMap.containsKey(matcher.group())) {num = 1;diffWord++;characterMap.put(matcher.group(), num);} else {num = characterMap.get(matcher.group()) + 1;characterMap.put(matcher.group(), num);}}}/*** 按value排序hashmap,统计单词的频率从高到低* @param map*/public static void sort(Map<String, Integer> map){sortWordList  = new ArrayList<Map.Entry<String,Integer>>(map.entrySet());Collections.sort(sortWordList,new Comparator<Map.Entry<String, Integer>>() {public int compare(Map.Entry<String, Integer> map1 , Map.Entry<String, Integer> map2){return (map2.getValue() - map1.getValue());}});}}

输出结果:

总字数------493649.0
不同的字数------4028.0
重复率-----0.9918403562045097

文件中内容:

注意:可以用Safari打开txt,直接把文件拖到地址栏就可以了,如果乱码,可以选择显示不同编码

文中得正则参考:http://blog.csdn.net/w4bobo/article/details/17024019

Map的排序参考:http://bookc.github.io/2014/05/09/java-map-sort-method/

统计名著中汉字出现频率相关推荐

  1. 统计英文名著中单词出现频率

    统计单词出现的次数,不同的单词数,单词的重复率 目的 之前在一本学习英文的书中看到成人中文常用词汇5000字,英文大概2-3万字,感到很诧异,所以就有了这两篇文章.之前的中文名著统计 统计名著中汉字出 ...

  2. 经典:统计字符串中汉字,英文,数字,特殊符号个数

    经典:统计字符串中汉字,英文,数字,特殊符号个数 package wzs.arithmetics;/*** 分别统计出其中字符串中汉字,英文字母,数字,其他字符数量* @author wWX15478 ...

  3. java 统计汉字个数_Java简单统计字符串中汉字,英文字母及数字数量的方法

    本文实例讲述了java简单统计字符串中汉字,英文字母及数字数量的方法.分享给大家供大家参考,具体如下: package org.zhy.demo.algorithm; /** * 有一个字符串,其中包 ...

  4. java识别汉字个数_统计字符串中汉字的个数

    字符串可以包括数字.字母.汉字或者其他字符.使用Charater类的isDigit()方法可以判断字符串中的某个字符是否为数字, 使用Character类的isLetter()方法可以判断字符串中的某 ...

  5. java 字符串 数字个数_Java简单统计字符串中汉字,英文字母及数字数量的方法...

    本文实例讲述了Java简单统计字符串中汉字,英文字母及数字数量的方法.分享给大家供大家参考,具体如下: package org.zhy.demo.algorithm; /** * 有一个字符串,其中包 ...

  6. Golang基础——统计字符串中汉字的数量

    统计字符串中汉字的数量 1. 编写代码分别定义一个整型.浮点型.布尔型.字符串型变量,使用fmt.Printf()搭配%T分别打印出上述变量的值和类型. 2. 编写代码统计出字符串"hell ...

  7. 位运算—统计文本文件中汉字的个数

    声明:这些内容主要是面向C语言的初学者,尤其是正在学习C语言的学生. C语言进行底层开发时经常会用到位运算,比如操作系统中的各种描述符,不同的位代表着不同的含义,经常需要按位赋值.关于位运算的细节,教 ...

  8. 模拟MapReduce编程的程序案例(用于统计文本中单词出现频率)

    本案例要实现的目标: 1.模拟修改配置,通过发指令的方式统计一个文件中出现的单词的字数. 案例代码结构如下: 在整个案例中需要有以下几类文件: A:worker服务端,用于类似Mapreduce接收j ...

  9. 统计字符串中汉字数目C++

    #include<iostream> #include<string> using namespace std;int main(void) {int n, i, m = 0; ...

最新文章

  1. 河北省重大系统征集系统案例分析
  2. Sql Server'不允许保存更改'错误►防止保存需要重新创建表的更改
  3. U盘安装Windows 7 方法
  4. pat数素数 20 c语言,PAT乙级C语言1013 数素数
  5. 十大场景带你玩转外国
  6. 推荐5款好用的Linux音乐播放器
  7. Pandas-层次化索引
  8. 在 Ubuntu 14.04 中安装 Pepper Flash Player For Chromium-转
  9. 精功科技押宝互联网服务业 盘古数据承诺未来业绩大逆转
  10. matplotlib绘制横向柱状图
  11. Unity 外部资源无法拖入Unity
  12. csc.exe(C# 编译器)
  13. 你的知识需要管理-博学审问慎思明辨笃行
  14. Windows10安装fiddler工具安装证书失败总结手机抓包总结
  15. 强化学习笔记3-Python/OpenAI/TensorFlow/ROS-规划博弈
  16. 一文读懂GPU服务器
  17. 今天大年三十,新年快乐,我在这里给大家整理了一下除夕的习俗,来看看吧
  18. picker-view——实现picker自定义样式
  19. Pr学习(3)AI CC2017/2018 如何破解?
  20. Webbrowser 使用IE 最高版本

热门文章

  1. Alibaba SWE 实习岗 笔试题 JAVA
  2. 【MySQL】创建数据库表
  3. 【推荐】mysql联合 索引(复合索引)的探讨
  4. 计算机打字题数字知识,电脑打字出现的是数字怎么办
  5. php单例是什么意思,什么是PHP单例模式?
  6. 资本寒冬,看咕咚、Keep、Feel们如何逆势而上
  7. 机器学习(二)线性模型——线性回归、对数几率回归、线性判别分析
  8. 保险业首季度保费收入猛增五成
  9. WNM2020-3/TR MOS场效应晶体管
  10. 龙芯软件开发(6)--CPU龙芯2E