统计名著中汉字出现频率
#统计名著中汉字出现频率
##统计文本中每个汉字出现的次数,不同的汉字数,汉字的重复率
- 因为最近发现成人英语掌握的词汇量大概是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/
统计名著中汉字出现频率相关推荐
- 统计英文名著中单词出现频率
统计单词出现的次数,不同的单词数,单词的重复率 目的 之前在一本学习英文的书中看到成人中文常用词汇5000字,英文大概2-3万字,感到很诧异,所以就有了这两篇文章.之前的中文名著统计 统计名著中汉字出 ...
- 经典:统计字符串中汉字,英文,数字,特殊符号个数
经典:统计字符串中汉字,英文,数字,特殊符号个数 package wzs.arithmetics;/*** 分别统计出其中字符串中汉字,英文字母,数字,其他字符数量* @author wWX15478 ...
- java 统计汉字个数_Java简单统计字符串中汉字,英文字母及数字数量的方法
本文实例讲述了java简单统计字符串中汉字,英文字母及数字数量的方法.分享给大家供大家参考,具体如下: package org.zhy.demo.algorithm; /** * 有一个字符串,其中包 ...
- java识别汉字个数_统计字符串中汉字的个数
字符串可以包括数字.字母.汉字或者其他字符.使用Charater类的isDigit()方法可以判断字符串中的某个字符是否为数字, 使用Character类的isLetter()方法可以判断字符串中的某 ...
- java 字符串 数字个数_Java简单统计字符串中汉字,英文字母及数字数量的方法...
本文实例讲述了Java简单统计字符串中汉字,英文字母及数字数量的方法.分享给大家供大家参考,具体如下: package org.zhy.demo.algorithm; /** * 有一个字符串,其中包 ...
- Golang基础——统计字符串中汉字的数量
统计字符串中汉字的数量 1. 编写代码分别定义一个整型.浮点型.布尔型.字符串型变量,使用fmt.Printf()搭配%T分别打印出上述变量的值和类型. 2. 编写代码统计出字符串"hell ...
- 位运算—统计文本文件中汉字的个数
声明:这些内容主要是面向C语言的初学者,尤其是正在学习C语言的学生. C语言进行底层开发时经常会用到位运算,比如操作系统中的各种描述符,不同的位代表着不同的含义,经常需要按位赋值.关于位运算的细节,教 ...
- 模拟MapReduce编程的程序案例(用于统计文本中单词出现频率)
本案例要实现的目标: 1.模拟修改配置,通过发指令的方式统计一个文件中出现的单词的字数. 案例代码结构如下: 在整个案例中需要有以下几类文件: A:worker服务端,用于类似Mapreduce接收j ...
- 统计字符串中汉字数目C++
#include<iostream> #include<string> using namespace std;int main(void) {int n, i, m = 0; ...
最新文章
- 河北省重大系统征集系统案例分析
- Sql Server'不允许保存更改'错误►防止保存需要重新创建表的更改
- U盘安装Windows 7 方法
- pat数素数 20 c语言,PAT乙级C语言1013 数素数
- 十大场景带你玩转外国
- 推荐5款好用的Linux音乐播放器
- Pandas-层次化索引
- 在 Ubuntu 14.04 中安装 Pepper Flash Player For Chromium-转
- 精功科技押宝互联网服务业 盘古数据承诺未来业绩大逆转
- matplotlib绘制横向柱状图
- Unity 外部资源无法拖入Unity
- csc.exe(C# 编译器)
- 你的知识需要管理-博学审问慎思明辨笃行
- Windows10安装fiddler工具安装证书失败总结手机抓包总结
- 强化学习笔记3-Python/OpenAI/TensorFlow/ROS-规划博弈
- 一文读懂GPU服务器
- 今天大年三十,新年快乐,我在这里给大家整理了一下除夕的习俗,来看看吧
- picker-view——实现picker自定义样式
- Pr学习(3)AI CC2017/2018 如何破解?
- Webbrowser 使用IE 最高版本