一:引入读取pdf工具的jar

<dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox-app</artifactId><version>1.8.10</version>
</dependency>

二、代码

package book;import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.util.PDFTextStripper;import java.io.*;
import java.util.*;/*** @Description: 读取英文pdf并输出* @Author: ada* @Date: 2020/4/25 23:16* @Vervion: 1.0*/
public class PdfUtil {public static void main(String[] args) throws IOException {getWordsFromPdf("e:/Thinking In Java(英文版 第四版).pdf","e:/2.txt",15);}/** @Desciption: 从英文pdf中读取出现频率最高的单词,并输出到txt中* @param readPath   pdf文件位置* @param outPath    输出位置* @param p  出现次数* @Return: void* @Author: ada* @Date: 2020/4/26 0:51* @Version: 1.0*/public static void getWordsFromPdf(String readPath,String outPath,int p)  {String pdfContent="";try {pdfContent=readPDFtoFile(readPath);} catch (IOException e) {System.out.println(readPath+":文件读取异常");}if(pdfContent!=""){String[] lineWords=pdfContent.split("[^a-zA-z]");//单词-数字表Map<String,Integer> map=getTable(lineWords);List<Map.Entry<String,Integer>> list=sortMap(map);try {outFile(list,p,outPath);} catch (IOException e) {System.out.println(outPath+":文件输出异常");}}}/** @Desciption: 把排序后的list,按出现次数降序,按行输入到txt文件中* @param list   排序后的list* @param p      出现次数* @param path   保存文件路径* @Return: void* @Author: ada* @Date: 2020/4/26 0:45* @Version: 1.0*/public static void outFile(List<Map.Entry<String,Integer>> list,int p,String path) throws IOException {Map.Entry<String, Integer> mapping = null;File file = new File(path);//如果没有文件就创建if (!file.isFile()) {file.createNewFile();}BufferedWriter writer = new BufferedWriter(new FileWriter(path));for (int i = 0 ;i<list.size() ;i++) {mapping = list.get(i);if (mapping.getValue()>p){writer.write(mapping.getKey() + "\r\n");//System.out.println(mapping.getKey() + "=" + mapping.getValue());}}writer.close();System.out.println("出现频率为"+p+"次的单词已经按降序已经输入到:"+path);}/** @Desciption: 对单词-数量表,进行排序,得到排序后的数组* @param map 单词-数量表* @Return: java.util.List<java.util.Map.Entry<java.lang.String,java.lang.Integer>>  排序后的数组* @Author: ada* @Date: 2020/4/26 0:24* @Version: 1.0*/public static List<Map.Entry<String,Integer>> sortMap(Map<String,Integer> map){List<Map.Entry<String,Integer>> list=new ArrayList<>(map.entrySet());Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {public int compare(Map.Entry<String, Integer> mapping2, Map.Entry<String, Integer> mapping1){return mapping1.getValue().compareTo(mapping2.getValue());}});return list;}/** @Desciption: 输入内容数组,得到单词-数量表* @param content 内容数组* @Return: java.util.Map<java.lang.String,java.lang.Integer> 单词-数量表* @Author: ada* @Date: 2020/4/26 0:21* @Version: 1.0*/public static Map<String,Integer> getTable(String[] content){Map<String,Integer> map=new HashMap<>();for(int i=0;i<content.length;i++){if(content[i].length()>0 && content[i]!=""){if(map.containsKey(content[i])){map.put(content[i],map.get(content[i])+1);}else{map.put(content[i],0);}}}return map;}/** @Desciption: 读取PDf内容,返回string* @param sourceFile pdf文件路径* @Return: java.lang.String* @Author: ada* @Date: 2020/4/25 23:18* @Version: 1.0*/public static String readPDFtoFile(String sourceFile) throws IOException {//创建文档对象PDDocument doc =null;String content="";//加载一个pdf对象doc =PDDocument.load(new File(sourceFile));//获取一个PDFTextStripper文本剥离对象PDFTextStripper textStripper =new PDFTextStripper("GBK");content=textStripper.getText(doc);//System.out.println("内容:"+content);//System.out.println("全部页数"+doc.getNumberOfPages());//关闭文档doc.close();return content;}
}

统计pdf文章单词出现频率相关推荐

  1. C语言 统计英语文章单词的数目

    将一篇英文文章存入数据文件IN.DAT ( 每行的长度均小于80个字符,单词之间用空格或圆点隔开).设计程序,统计各单词出现的次数(不区分大小写).并按照出现次数由多到少的顺序显示统计结果,并将结果输 ...

  2. 模拟MapReduce编程的程序案例(用于统计文本中单词出现频率)

    本案例要实现的目标: 1.模拟修改配置,通过发指令的方式统计一个文件中出现的单词的字数. 案例代码结构如下: 在整个案例中需要有以下几类文件: A:worker服务端,用于类似Mapreduce接收j ...

  3. python中英文字频率_python实现统计文本中单词出现的频率详解

    本文实例为大家分享了python统计文本中单词出现频率的具体代码,供大家参考,具体内容如下 #coding=utf-8 import os from collections import Counte ...

  4. 软件工程作业之统计单词出现频率前10 的单词

    题目:统计文本中单词出现频率前十的单词并打印到显示屏 老师,之前我写在另外一个博客的:http://blog.csdn.net/u012337099/article/details/40345925 ...

  5. 使用Java统计英文文章的单词频率。

    spark中的入门级程序:WordCount.这次不是使用spark来完成的,而是使用原生的Java API.只要英文文章符合书写的规定,那么这个程序就没有什么问题. 先将指定文件中的内容读取到Str ...

  6. C语言统计文章单词出现的次数,统计英文文章中单词出现频率

    /* 运行此程序之前要将写有单词的英文文章以.txt格式保存在d:\word.txt */ #include #include #include #include #include #include ...

  7. python统计单词出现次数_用python统计单词出现频率

    用python的字典数据结构可以很方便地用来统计一篇文章的每个单词出现的频率.在文本相似度计算中,就经常需要用到一个单词在文章中的出现频率,进而可以根据两篇文章共有单词在相应文章中的频率比较,来计算相 ...

  8. 统计英文名著中单词出现频率

    统计单词出现的次数,不同的单词数,单词的重复率 目的 之前在一本学习英文的书中看到成人中文常用词汇5000字,英文大概2-3万字,感到很诧异,所以就有了这两篇文章.之前的中文名著统计 统计名著中汉字出 ...

  9. MapReduce Java API实例-统计单词出现频率

    场景 Windows下使用Java API操作HDFS的常用方法: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/11938210 ...

最新文章

  1. python实现二叉树遍历(前序遍历、中序遍历、后序遍历)
  2. 执行sql语句_一条SQL查询语句是如何执行的?
  3. ie浏览器升级_IE 被微软专家从浏览器里除名了,专家说它只是个兼容性解决方案...
  4. BNU OJ 第26303 题 Touchscreen Keyboard
  5. 水晶报表之创建子报表
  6. JavaScript创建对象:深入理解编程原理
  7. ISSCC2021 基于SRAM的存内计算16.3阅读记录
  8. 【HTML】3.Form表单
  9. IT行业十大热门职位
  10. 申万一级行业指数是什么?
  11. 干货集中营(分享)-每日分享妹子图和技术干货
  12. Scratch 被禁止访问;Linux 内核历史报告2020 等开源之道每周评论2020 09 15
  13. RFC5766-TURN协议
  14. Unity 使用陀螺仪判断手机方向
  15. 选中DataGridView行,将数据返填到TextBox控件
  16. 学计算机颈椎痛,每天对着电脑颈椎很疼怎么办
  17. MySQL 存储过程和函数
  18. BERTopic:NLP主题模型的未来!
  19. 2008年软考初级程序员试题(下午题)
  20. NW.js的简单使用

热门文章

  1. 苹果怎么应用分身_苹果应用为什么闪退?怎么解决闪退问题?
  2. 追觅、戴森、小狗吸尘器,谁的性价比最高
  3. 新手适合学C4D还是3dmax?
  4. 2022青少年眼健康产业展,中国眼科医学与眼科医疗展会
  5. 如何向 Oracle 表中的 Date 字段插入日期及时间
  6. 如何将QQ聊天记录保存或导入到新安装的QQ里面!
  7. 安卓手机应用软件UI界面设计展示PR样机模板MOGRT
  8. SpringBoot 开篇
  9. 线性资本王淮:明年人工智能泡沫将达到顶点
  10. 海宇勇创配配通智能名片:企业该如何选择人工智能名片?