需求:有一堆英语考试真题(PDF格式),读取PDF,然后分析每个单词出现的词频,输出到一个txt文本中,每行是“单词 词频”,结果按照词频降序排列。

思路:使用一个LinkedHashMap,Key是单词,Value是词频,逐个遍历每个pdf文件,读取pdf中的所有文本,对于文本按照各种标点符号进行分割,将全部单词转为小写,遍历每个单词,看在map中是否存在,存在则词频+1,不存在则put增加新的单词。

代码如下:

import com.yzk18.commons.IOHelpers;
import com.yzk18.docs.PDFHelpers;
import org.apache.pdfbox.pdmodel.PDDocument;
import java.util.*;public class WordFrequency {public static void main(String[] args) {//扫描PDF文件目录String dir = "E:\\英语\\六级英语\\2020年7月";//遍历文件夹下所有PDF文件String[] pdfFiles = IOHelpers.getFilesRecursively(dir,"pdf");LinkedHashMap<String,Integer> map = new LinkedHashMap<>();for (String pdfFile : pdfFiles){PDDocument doc = PDFHelpers.openFile(pdfFile);//读取这个PDF所有的文本String text = PDFHelpers.parseText(doc);//通过不同标点符号分割出单词String[] words = text.toLowerCase().split("\\s|\\.|\\,|\\:|\\!|\\?|;|\\(|\\)");for(String word : words){//如果这个word不是英语单词,则跳过if(!isEnglishWord(word)){//处理下一个单词continue;}if(word.equals("")){continue;}//是否是全部由字母组成的Integer freq = map.get(word);//获得当前的词频if(freq==null){map.put(word,1);//之前没出现过这个单词,记录为1}else{map.put(word,freq+1);//如果出现过则递增}}PDFHelpers.close(doc);}String outputString="";List<Map.Entry<String, Integer>> infoIds =new ArrayList<Map.Entry<String, Integer>>(map.entrySet());//按照词频排序Collections.sort(infoIds, new Comparator<Map.Entry<String, Integer>>() {@Overridepublic int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {Integer p1 =  o1.getValue();Integer p2 = o2.getValue();;return Integer.valueOf(p2)-Integer.valueOf(p1);//如果要升序, 改为return Integer.valueOf(p1)-Integer.valueOf(p2);}});//转换成新map输出LinkedHashMap<String, Integer> newMap = new LinkedHashMap <String, Integer>();for(Map.Entry<String,Integer> entity : infoIds){newMap.put(entity.getKey(), entity.getValue());}//输出词频for(String word : newMap.keySet())//keySet()是map中所有key的集合{int freq = map.get(word);//System.out.println(word+"="+freq);outputString = outputString+word+" "+freq+"\r\n";}//结果输出到某个路径下的txt文件中IOHelpers.writeAllText("d:/1.txt", outputString);}//判断s是否是一个英文单词(全部由英文字母组成)public static boolean isEnglishWord(String s){for(int i=0;i<s.length();i++){char ch = s.charAt(i);//只要碰到一个非字母,函数就返回falseif(Character.isLowerCase(ch)==false){return false;}}return true;//如果运行到这里,就说明每个都是字母}
}

输出结果如下:

这样,就可以自己网上下载四六级真题,通过词频背单词啦,( ̄▽ ̄)~*。

Java实现:四六级真题批量PDF文件英文单词词频分析、排序相关推荐

  1. 考研英语真题-四六级真题-计算机二级真题分享

    考研英语真题-四六级真题-计算机二级真题分享 准备的资料 给准备复习朋友准备了一堆资料,收集整理自网络,欢迎转发分享给你需要的朋友. 这次准备的资料分别有: •考研英语一和考研英语二,2009年至20 ...

  2. 英语四级及英语六级相关资料,历年四六级真题汇总(含听力字幕与答案解析)

    最近网上收集了一些关于英语四六级相关资料,内容仅供大家参考. 说明:以下内容均来自于网上,仅供大家参考学习,根据自身情况进行选择合适的内容(重点:学习好基础很重要,自己课程安排优先). 英语四级资源截 ...

  3. 2016年至2020年英语四六级真题解析听力音频文件

    2020年9月英语六级真题&解析&听力音频文件-第一套 https://download.csdn.net/download/qq_36596540/13507098 2020年9月英 ...

  4. 2017-2020年英语四六级真题及答案汇总

    2020年四六级英语考试真题试卷(可打印): 链接:https://pan.baidu.com/s/14NX_v6D9cLM-ZJUoniP5og 提取码:c58l

  5. 四六级真题长难句分析与应用

    一.基本结构的长难句 基本结构的长难句主要考点:断开和简化 什么是长难句? 其实就是多件事连在了一块,这时候句子就变长.变难了 分析步骤: 第一件事就是要把长难句给断开,把多件事断开成一件一件的事情, ...

  6. 2010-2014历年六级真题pdf下载

    含有解析的历年六级真题pdf: 网盘链接:http://pan.baidu.com/s/1dESMaTr 密码:ws8a

  7. 2015年 第06届 蓝桥杯 Java B组 决赛真题详解及小结

    蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:大部 ...

  8. 2016年 第07届 蓝桥杯 Java B组 决赛真题详解及小结

    蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:大部 ...

  9. 2017年 第08届 蓝桥杯 Java B组 决赛真题详解及小结

    ​​​​​蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 ...

  10. 2018年 第09届 蓝桥杯 Java B组 决赛真题详解及小结

    蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:大部 ...

最新文章

  1. Docker安全加固——利用LXCFS增强docker容器隔离性和资源可见性
  2. mysql ef6 您的项目引用了最新版_您的项目引用了最新实体框架;但是,找不到数据链接所需的与版本兼容的实体框架数据库 EF6使用Mysql的技巧...
  3. 深度学习 dns tunnel检测 使用统计特征 全连接网络——精度99.8%
  4. python实现自动发送微博,当自己写博客时同步上去。
  5. dynamips模拟器模块详细介绍
  6. efcore根据多个条件更新_EFCore.Sharding(EFCore开源分表框架)
  7. 第三次学JAVA再学不好就吃翔(part78)--List类
  8. 扒一扒工业机器人编程语言和种类
  9. POJ 2433 枚举
  10. 定制控件消息处理函数
  11. python类的实例方法必须创建对象后_Python3 类方法,实例方法,静态方法详解...
  12. 绑定host域名 修改手机hosts域名
  13. 网络虚拟化-云计算-虚拟网络基础架构-软件定义网络(SDN)-控制器
  14. Oracle 锁表查询大全
  15. 我在Facebook工作的十大经验分享
  16. linux 云锁 端口,问一下,云锁安装后还可以修改端口吗?
  17. Explainability in Graph Neural Networks:A Taxonomic Survey 图可解释
  18. 计算机网络系统的维护,简论事业单位计算机网络管理系统的维护
  19. Macbook Pro 鼠标卡顿问题
  20. QT全自动检测,挂载U盘

热门文章

  1. python编程一球从100米_Python一个球100米高空落下,每次落下后反弹高度是原高度的一半,再落下...
  2. 头脑王者 物理化学生物
  3. Java工程师需要学习云原生吗?
  4. 统计矩形中的正方形和长方形
  5. Excel如何将xlsx后缀格式的文件转为xls格式?
  6. php 根据身份证计算年龄
  7. UWB定位系统场景的分析
  8. 技能提升----直流有刷电机控制方案之经典
  9. 量化交易学习——熟读github上的开源交易策略框架
  10. 推荐几款好用的压缩软件