Java实现:四六级真题批量PDF文件英文单词词频分析、排序
需求:有一堆英语考试真题(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文件英文单词词频分析、排序相关推荐
- 考研英语真题-四六级真题-计算机二级真题分享
考研英语真题-四六级真题-计算机二级真题分享 准备的资料 给准备复习朋友准备了一堆资料,收集整理自网络,欢迎转发分享给你需要的朋友. 这次准备的资料分别有: •考研英语一和考研英语二,2009年至20 ...
- 英语四级及英语六级相关资料,历年四六级真题汇总(含听力字幕与答案解析)
最近网上收集了一些关于英语四六级相关资料,内容仅供大家参考. 说明:以下内容均来自于网上,仅供大家参考学习,根据自身情况进行选择合适的内容(重点:学习好基础很重要,自己课程安排优先). 英语四级资源截 ...
- 2016年至2020年英语四六级真题解析听力音频文件
2020年9月英语六级真题&解析&听力音频文件-第一套 https://download.csdn.net/download/qq_36596540/13507098 2020年9月英 ...
- 2017-2020年英语四六级真题及答案汇总
2020年四六级英语考试真题试卷(可打印): 链接:https://pan.baidu.com/s/14NX_v6D9cLM-ZJUoniP5og 提取码:c58l
- 四六级真题长难句分析与应用
一.基本结构的长难句 基本结构的长难句主要考点:断开和简化 什么是长难句? 其实就是多件事连在了一块,这时候句子就变长.变难了 分析步骤: 第一件事就是要把长难句给断开,把多件事断开成一件一件的事情, ...
- 2010-2014历年六级真题pdf下载
含有解析的历年六级真题pdf: 网盘链接:http://pan.baidu.com/s/1dESMaTr 密码:ws8a
- 2015年 第06届 蓝桥杯 Java B组 决赛真题详解及小结
蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:大部 ...
- 2016年 第07届 蓝桥杯 Java B组 决赛真题详解及小结
蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:大部 ...
- 2017年 第08届 蓝桥杯 Java B组 决赛真题详解及小结
蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 ...
- 2018年 第09届 蓝桥杯 Java B组 决赛真题详解及小结
蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:大部 ...
最新文章
- Docker安全加固——利用LXCFS增强docker容器隔离性和资源可见性
- mysql ef6 您的项目引用了最新版_您的项目引用了最新实体框架;但是,找不到数据链接所需的与版本兼容的实体框架数据库 EF6使用Mysql的技巧...
- 深度学习 dns tunnel检测 使用统计特征 全连接网络——精度99.8%
- python实现自动发送微博,当自己写博客时同步上去。
- dynamips模拟器模块详细介绍
- efcore根据多个条件更新_EFCore.Sharding(EFCore开源分表框架)
- 第三次学JAVA再学不好就吃翔(part78)--List类
- 扒一扒工业机器人编程语言和种类
- POJ 2433 枚举
- 定制控件消息处理函数
- python类的实例方法必须创建对象后_Python3 类方法,实例方法,静态方法详解...
- 绑定host域名 修改手机hosts域名
- 网络虚拟化-云计算-虚拟网络基础架构-软件定义网络(SDN)-控制器
- Oracle 锁表查询大全
- 我在Facebook工作的十大经验分享
- linux 云锁 端口,问一下,云锁安装后还可以修改端口吗?
- Explainability in Graph Neural Networks:A Taxonomic Survey 图可解释
- 计算机网络系统的维护,简论事业单位计算机网络管理系统的维护
- Macbook Pro 鼠标卡顿问题
- QT全自动检测,挂载U盘