统计名著中汉字出现频率
来源:互联网 发布:网络测线仪价格 编辑:程序博客网 时间:2024/04/28 13:07
统计名著中汉字出现频率
统计文本中每个汉字出现的次数,不同的汉字数,汉字的重复率
- 因为最近发现成人英语掌握的词汇量大概是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 block e.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 0
- 统计名著中汉字出现频率
- 统计一篇文章中出现频率最高的汉字,java
- java中如何统计一段文本每个汉字出现频率
- 汉字频率统计
- 统计文件中单词出现的频率
- 统计一篇短文中单词出现频率
- 统计文件中字符串出现的频率
- 用于统计日常QQ聊天中会用到几个不同的汉字和每个汉字出现频率的Qt小程序
- 字词出现频率统计
- java统计文件中字母出现的频率
- 使用hash算法统计字符串中字符出现的频率
- 统计一篇文章中单词出现的频率
- 统计历年6级真题及答案中单词出现频率
- STL统计英文中单词出现频率的问题
- 统计文本中各单词出现的频率(JavaWeb)
- 统计文章中出现的单词频率java小程序
- 统计文本中出现频率最高的10个词
- 统计字符串中出现频率最高的字符
- 将UTF8的NSData转换成NSSting
- 史上最全的iOS面试题及答案
- 浅谈HTTP中Get与Post的区别
- myeclipse中tomcat内存大小的设置
- The VMware Authorization Service is not running.
- 统计名著中汉字出现频率
- 基于xml的Spring多数据源配置和使用
- 对“AMBA 总线”的理解
- 哈哈,我都不知道我写的是什么
- Java 程序员们值得一看的好书推荐
- JAVA静态方法使用注意事项
- 内连接、外连接
- u-boot中SPL源代码分析
- 华硕开机时出现无法验证数字签名驱动