教你用java统计目录下所有文档的词频

时间:2022-09-18 16:58:56

本文是统计目录下所有文档的词频top10,非单个文档,包含中文和英文。

直接上代码:

 package com.huawei.wordcount;

 import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry; public class WordCount { public static void main(String args[]) throws Exception {
String filebashpath = "/Users/gwl/Documents/wordcount/aa/";
HashMap<String, Integer> map = new HashMap<String, Integer>();
printTen(filebashpath, map);
} public static void printTen(String filepath, HashMap<String, Integer> map) { ArrayList<File> files = getListFiles(filepath);
BufferedReader br = null;
String line = null; try {
for (File file : files) {
//对于swp、swo等这些不正常退出产生的文件进行排除
if (file.toString().contains(".sw")) {
continue;
}
br = new BufferedReader(new FileReader(file));
while ((line = br.readLine()) != null) {
line.toLowerCase();
//匹配分隔符,包括标点符号和一些特殊字符。
String reg1 = "\\,|\\。|\\,|\\;|\\ |\\#|\\$|\\^|\\&|\\*|\\?|\\.|\\!|\\:|\\(|\\)|\\+|\\=|\\[|\\]|\\;";
//输出的单词或语句必须是中文、大小写字母、数字、"-"、"_"组成。
String reg2 = "^[\\u4e00-\\u9fa5_a-zA-Z0-9]+$";
String str[] = line.split(reg1);
for (String s : str) {
if (s.matches(reg2)) {
if (!map.containsKey(s)) {
map.put(s, 1);
} else {
map.put(s, map.get(s) + 1);
}
}
}
}
} } catch (IOException ioException) {
ioException.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} List<Entry<String, Integer>> list =
new ArrayList<Entry<String, Integer>>(map.entrySet()); Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
// 降序排序
public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {
return o2.getValue().compareTo(o1.getValue());
}
}); int i = 10;
for (Entry<String, Integer> e : list) {
if (i > 0) {
System.out.println(e.getKey() + ":" + e.getValue());
i--;
}
}
} public static ArrayList<File> getListFiles(Object obj) {
File directory = null; if (obj instanceof File) {
directory = (File) obj;
} else {
directory = new File(obj.toString());
} ArrayList<File> files = new ArrayList<File>();
if (directory.isFile()) {
files.add(directory);
return files;
} else if (directory.isDirectory()) {
File[] fileArr = directory.listFiles();
for (int i = 0; i < fileArr.length; i++) {
File fileOne = fileArr[i];
files.addAll(getListFiles(fileOne));
}
} return files;
}
}

注:分隔符正则匹配需要根据各自的情况进行定义。

当然数据量比较大的时候需要采用大数据计算,比如mapreduce,那样的话会简单很多。

教你用java统计目录下所有文档的词频的更多相关文章

  1. java 提取目录下所有子目录的文件到指定位置

    package folder; import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundExcept ...

  2. linux 系统统计目录下文件夹的大小

    du -ah --max-depth=1     这个是我想要的结果  a表示显示目录下所有的文件和文件夹(不含子目录),h表示以人类能看懂的方式,max-depth表示目录的深度. du命令用来查看 ...

  3. Java 加密、解密PDF文档

    本篇文章将介绍通过Java编程来设置PDF文档保护的方法.我们可以设置仅用于查阅文档的密码,即该通过该密码打开文档仅用于文档阅读,无法编辑:也可以设置文档编辑权限的密码,即通过该密码打开文档时,文档为 ...

  4. Java 合并、拆分PDF文档

    处理PDF文档时,我们可以通过合并的方式,来任意组几个不同的PDF文件或者通过拆分将一个文件分解成多个子文件,这样的好处是对文档的存储.管理很方便.下面将通过Java程序代码介绍具体的PDF合并.拆分 ...

  5. 无法对含有多个&period;java(或&period;class)文档的程序进行编译(或解释)

    通常初学者会出现这样的问题:无法对含有多个.java(或.class)文档的程序进行编译(或解释). root@yogile-VirtualBox:/alive/string# javac work/ ...

  6. 【原】中文Ubuntu主目录下的文档文件夹改回英文

    想把中文Ubuntu主目录下的文档文件夹改回英文,在Terminal下面操作的时候要输入中文特别不方便,于是便用了更改名字的想法 方法一: 首先把那几个中文名称修改成相应的英文,比如 Desktop. ...

  7. QJsonDocument实现Qt下JSON文档读写

    版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:QJsonDocument实现Qt下JSON文档读写     本文地址:http://tech ...

  8. python统计文档中词频

    python统计文档中词频的小程序 python版本2.7 效果如下: 程序如下,测试文件与完整程序在我的github中 #统计空格数与单词数 本函数只返回了空格数 需要的可以自己返回多个值 def ...

  9. 用java将简单的word文档换成pdf文档

    用java将简单的word文档换成pdf文档的方式很多,因为很多都没有实际测试过,所以这里就先泛泛的说一下 整体上来看分两种: 1.纯java代码实现,有很多优秀的开源软件可以用,比如poi,itex ...

随机推荐

  1. 【Java每日一题】20161117

    package Nov2016; public class Ques1117 { public static void main(String[] args) { Sub sub = new Sub( ...

  2. 手动配置 Android SDK

      下载地址与说明http://www.androiddevtools.cn/#sdk-list   手动添加 SDK   这是Android开发所需的sdk,下载并解压后,将解压出的整个文件夹复制或 ...

  3. mac os 常用终端软件工具

    1. homebrew 安装 网上很多版本返回400错误,以下为最新版本地址(2015/02/09) ruby -e "$(curl -fsSL https://raw.githubuser ...

  4. cocos2d源码剖析

    1. TextureAtlas http://www.cocoachina.com/bbs/read.php?tid-311439-keyword-TextureAtlas.html 2. Label ...

  5. Python3&period;4&plus;opencv3

    1.安装Python 3.4 for Windows 好的这好像没有什么可以说的 2.下载OpenCV 3和Numpy(OpenCV依赖Numpy库) 大家在这里就出了问题.如果使用直接使用pip i ...

  6. go语言defer panic recover用法总结

    defer defer是go提供的一种资源处理的方式.defer的用法遵循3个原则 在defer表达式被运算的同时,defer函数的参数也会被运算.如下defer的表达式println运算的同时,其入 ...

  7. 盘点海口最好吃的西餐厅top10

    Top 1:主厨的餐桌 餐厅地址:龙华区海秀路九号民航宾馆一楼大堂 主厨的餐桌Chef's Table是三位志同道合的大厨一起携手开办的西餐厅,正宗的西式料理.浓郁的浪漫气息,都是Chef's Tab ...

  8. Python框架学习之Flask中的蓝图与单元测试

    因为Flask框架的集成度很低,随着Flask项目文件的增多,会导致不太好管理.但如果对一个项目进行模块化管理的,那样子管理起来就会特别方便.而在Flask中刚好就提供了这么一个特别好用的工具蓝图(B ...

  9. ThreadPoolExecutor参数讲解

    1. 线程池可以节省创建多个线程带来的开销问题. 2. 线程池的参数如下: public ThreadPoolExecutor(int corePoolSize, int maximumPoolSiz ...

  10. json字符串和Json对象,以及json的基本了解

    考虑到python等语言中没有更好表示json对象的方法,所以使用JavaScript来介绍json 首先是json字符串: var str1 = '{ "name": &quot ...