IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Java实现:四六级真题批量PDF文件英文单词词频分析、排序 -> 正文阅读

[Java知识库]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>>() {
            @Override
            public 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);
            //只要碰到一个非字母,函数就返回false
            if(Character.isLowerCase(ch)==false)
            {
                return false;
            }
        }
        return true;//如果运行到这里,就说明每个都是字母
    }
}

输出结果如下:
在这里插入图片描述
这样,就可以自己网上下载四六级真题,通过词频背单词啦,( ̄▽ ̄)~*。

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-08-05 17:11:57  更:2021-08-05 17:15:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/12 18:59:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码