java 读取文本统计单词_java应用之――读取word英文文档,统计单词频次并输出到excel...

该文是java读取文件写入文件的应用,相关知识见上篇博文https://blog.csdn.net/nnnora/article/details/80734917

一个例子:读取word英文文档,统计单词频次并输出到excelpublic FileOutputStream getwordsFrequency(MultipartFile file) { FileOutputStream fos = null; try { //读取word文件 String path = "Shocking level of sexual harassment at music festivals.docx"; String buffer = ""; if (path.endsWith(".doc")) { ClassPathResource classPathResource = new ClassPathResource(path); WordExtractor wordExtractor = new WordExtractor(classPathResource.getInputStream()); buffer = wordExtractor.getText(); } else if (path.endsWith("docx")) { ClassPathResource classPathResource = new ClassPathResource(path); XWPFDocument xdoc = new XWPFDocument(classPathResource.getInputStream()); POIXMLTextExtractor extractor = new XWPFWordExtractor(xdoc); buffer = extractor.getText(); } else { System.out.println("此文件不是word文件!"); } Pattern expression = Pattern.compile("[a-zA-Z'\\-]+"); //定义正则表达式匹配单词 Matcher matcher = expression.matcher(buffer); Map map = new TreeMap<>(); String word = ""; int n = 0; Integer times = 0; while(matcher.find()){ //是否匹配单词 word = matcher.group(); //得到一个单词,树映射中的键 n++; if( map.containsKey(word) ){ //如果该键存在,则表示单词出现过 times = map.get(word); //得到单词出现的次数 map.put(word, times+1); } else { map.put(word, 1); //否则单词是第一次出现,直接放入map } } List> list = new ArrayList<>(map.entrySet()); Comparator> comparator = new Comparator>(){ @Override public int compare(Map.Entry m1, Map.Entry m2) { return (m2.getValue()).compareTo(m1.getValue()); } }; Collections.sort(list, comparator); System.out.println("统计分析如下:"); System.out.println("文章中单词总数" + n + "个"); //写入excel //第一步,创建一个workbook对应一个excel文件 HSSFWorkbook workbook = new HSSFWorkbook(); //第二部,在workbook中创建一个sheet对应excel中的sheet HSSFSheet sheet = workbook.createSheet("词频文件"); //第三部,在sheet表中添加表头第0行,老版本的poi对sheet的行列有限制 HSSFRow row = sheet.createRow(0); //第四步,创建单元格,设置表头 HSSFCell cell = row.createCell(0); cell.setCellValue("单词"); cell = row.createCell(1); cell.setCellValue("频次"); //第五步,写入实体数据 int i = 0; for(Map.Entry entity : list){ HSSFRow row1 = sheet.createRow(i + 1); row1.createCell(0).setCellValue(entity.getKey()); row1.createCell(1).setCellValue(entity.getValue()); i++; } //将文件保存到指定的位置 try { fos = new FileOutputStream("wordsResult.xls"); workbook.write(fos); logger.info("写入成功"); fos.close(); } catch (IOException e) { logger.error("@@WriteFileError", e); } }catch (Exception e){ logger.error("@@ReadFileError", e); } return fos; }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值