20211220-读取word文档中的文字

读取word文档中的文字

代码


import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.usermodel.CharacterRun;
import org.apache.poi.hwpf.usermodel.Paragraph;
import org.apache.poi.hwpf.usermodel.Range;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
import org.apache.poi.xwpf.usermodel.XWPFDocument;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;

public class Duilie {
    public static void main(String[] args) {
        try {
            //文件输入流
            InputStream is = new FileInputStream(new File("D:\\文件\\工作记录.docx"));
            //创建一个文本
            XWPFDocument xwpfDocument = new XWPFDocument(is);
            //从OOXML读取数据
            XWPFWordExtractor xwpfWordExtractor = new XWPFWordExtractor(xwpfDocument);


            //从文档中读出字符串
            String text = xwpfWordExtractor.getText();

            //只匹配文章中的汉字
            String regEx = "[\\u4E00-\\u9FA5\\uf900-\\ufa2d]";
            Pattern compile = Pattern.compile(regEx);


            Matcher matcher = compile.matcher(text);

            List<String> list = new ArrayList<>();

            //每个字符写到集合中
            while(matcher.find()){
                String group = matcher.group();

                list.add(group);
            }

            //统计每个字出现的次数
            HashMap<String,Integer>  map = new HashMap<>();
            for(String str : list){
                if(map.containsKey(str)){
                    Integer integer = map.get(str);
                    integer = integer+1;
                    map.put(str,integer);
                }else{
                    map.put(str,1);
                }
            }

            //给出现的个数排序
           List<Node> nodeList = new ArrayList<>();

            for(Map.Entry<String,Integer> entry : map.entrySet()){
                String key = entry.getKey();
                Integer value = entry.getValue();
                Node node = new Node(value,key);
                nodeList.add(node);
            }

            List<Node> sortList = nodeList.stream().sorted(Comparator.comparing(Node::getCount)).collect(Collectors.toList());

            List<List<Object>> content = new ArrayList<>();
            for(Node node : sortList){
                List<Object> collist = new ArrayList<>();
                collist.add(node.getStr()+":"+node.getCount());
                content.add(collist);
                System.out.println(node.getStr()+":"+node.getCount());
            }

            ExcelUnit.toExcel(content,"字符统计");






        } catch (Exception e) {
            e.printStackTrace();
        }
    }


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值