基于javaGUI的文档识别工具制作

对于某些文本,其中富含了一些标志,需要去排除,以及去获得段落字数,以下是我个人写的一个比较简单的文档识别工具,含导入文件、导出文件以及一个简单的识别功能。

1、功能实现

以下功能实现纯属于个人想法,可能会有bug,仅供参考

     /*** 去除字符串中的"。",";","?","!",“,”* 将所有其他多余的符号转换为"  "* @param str  获取到的每行文字*/
public static String replaceStr(String str){String new_str = str.replaceAll(";|。|,|?|!|:|”|“|∶|:|,|!|;|—","  ");return new_str;}

将文本中的一些断句的中文标点和英文字符用两个空格来替换(为什么用两个空格呢?因为在我的测试文本中可能因为一些个人原因,存在一些单空格来,可能是打字太快导致的),然后利用splite(“ ”)来将句子切割,代码如下:

String new_tempString = replaceStr(tempString);
String[] strings = new_tempString.split("  ");

再通过识别中文,进行获取段落中的字数,代码如下:

 // 使用Unicode编码范围来判断汉字;这个方法不准确,因为还有很多汉字不在这个范围之内public static boolean isChineseByRange(String str) {if (str == null) {return false;}Pattern pattern = Pattern.compile("[\\u4E00-\\u9FCC]+");return pattern.matcher(str.trim()).find();}

2、布局设置

在这里,我使用的是GridBagLayout来进行布局,同时使用JPanel和JScrollPane来作为中间容器。

上图是我所设计的图形用户界面,整体代码:

import javax.swing.*;
import javax.swing.filechooser.FileSystemView;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.regex.Pattern;public class GUIdesign extends JFrame {public static void main(String[] args) {GUIdesign jf = new GUIdesign();jf.setTitle("文档识别工具1.0");jf.setSize(400,300);jf.setLocation(400,200);GridBagLayout gridBagLayout1 = new GridBagLayout();GridBagConstraints c1 = new GridBagConstraints();jf.setLayout(gridBagLayout1);c1.gridheight = 1;c1.gridwidth = GridBagConstraints.REMAINDER;c1.weightx = 2;c1.weighty = 2;GridBagLayout gridBagLayout2 = new GridBagLayout();GridBagConstraints c2 = new GridBagConstraints();JPanel jPanel1 = new JPanel();jPanel1.setLayout(gridBagLayout2);/** 第一栏 请选择文件 + textFiled + 导入按钮*/c2.gridwidth = 1;c2.gridheight = 1;c2.weightx = 3;c2.weighty = 3;JLabel jLabel1 = new JLabel("请选择文件");gridBagLayout2.setConstraints(jLabel1,c2);jPanel1.add(jLabel1);c2.gridwidth = 1;c2.gridheight = 1;c2.weightx = 3;c2.weighty = 3;JTextField jTextField1 = new JTextField(10);gridBagLayout2.setConstraints(jTextField1,c2);jPanel1.add(jTextField1);c2.gridwidth = GridBagConstraints.REMAINDER;c2.gridheight = 1;c2.weightx = 3;c2.weighty = 3;JButton jButton1 = new JButton("导入");gridBagLayout2.setConstraints(jButton1,c2);jPanel1.add(jButton1);/** 第二栏 请输入关键字 + textFiled + 识别按钮*/c2.gridwidth = 1;c2.gridheight = 1;c2.weightx = 3;c2.weighty = 3;JLabel jLabel2 = new JLabel("请输入关键字");gridBagLayout2.setConstraints(jLabel2,c2);jPanel1.add(jLabel2);c2.gridwidth = 1;c2.gridheight = 1;c2.weightx = 3;c2.weighty = 3;JTextField jTextField2 = new JTextField(10);gridBagLayout2.setConstraints(jTextField2,c2);jPanel1.add(jTextField2);c2.gridwidth = GridBagConstraints.REMAINDER;c2.gridheight = 1;c2.weightx = 3;c2.weighty = 3;JButton jButton2 = new JButton("识别");gridBagLayout2.setConstraints(jButton2,c2);jPanel1.add(jButton2);/** 第三栏 导出按钮*/c2.gridwidth = GridBagConstraints.REMAINDER;c2.gridheight = 1;c2.weightx = 3;c2.weighty = 3;JButton jButton3 = new JButton("导出");gridBagLayout2.setConstraints(jButton3,c2);jPanel1.add(jButton3);gridBagLayout1.setConstraints(jPanel1,c1);jf.add(jPanel1);/*文本框,设置垂直滚动条,取消水平滚动条*/c1.gridheight = 2;c1.gridwidth = GridBagConstraints.REMAINDER;c1.weightx = 3;c1.weighty = 3;JScrollPane jScrollPane = new JScrollPane();jScrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);jScrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);JTextArea jTextArea = new JTextArea(10,30);jScrollPane.setViewportView(jTextArea);gridBagLayout1.setConstraints(jScrollPane,c1);jf.add(jScrollPane);//导入按钮事件,选择文件,获取路径jButton1.addActionListener(ActionListener-> {jTextArea.setText("");JFileChooser chooser = new JFileChooser();chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);chooser.showDialog(new JLabel(), "选择");File file = chooser.getSelectedFile();jTextField1.setText(file.getAbsolutePath());});//识别按钮事件,获取textfield文本,获取文件文本,并判断jButton2.addActionListener(ActionListener->{jTextArea.setText("");File file = new File(jTextField1.getText());System.out.println(file);BufferedReader br = null;try {String keyWord = jTextField2.getText();System.out.println(keyWord);br = new BufferedReader(new FileReader(file));String tempString = null;int line = 1;while ((tempString = br.readLine())!=null){String new_tempString = replaceStr(tempString);String[] strings = new_tempString.split(" ");int count = 0;for (String str : strings){int code = 0;if (str.contains(keyWord)){char[] chars = str.toCharArray();for (char aChar : chars) {if (isChineseByRange(String.valueOf(aChar))){code++;}}count++;jTextArea.append("line"+line+",第"+count+"个"+",字数:"+code+"\n");System.out.println(str);System.out.println("line"+line+",第"+count+"个"+",字数:"+code);}}line++;}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally {if (br!=null){try {br.close();} catch (IOException e) {e.printStackTrace();}}}});//导出按钮事件,将显示的文字导出成txt文件jButton3.addActionListener(ActionListener->{int result = 0;File file = null;String path = null;Component chatFrame = null;JFileChooser fileChooser = new JFileChooser();FileSystemView fsv = FileSystemView.getFileSystemView();     //注意了,这里重要的一句System.out.println(fsv.getHomeDirectory());                  //得到桌面路径fileChooser.setCurrentDirectory(fsv.getHomeDirectory());fileChooser.setDialogTitle("请选择要上传文件的路径");fileChooser.setApproveButtonText("确定");fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);result = fileChooser.showOpenDialog(chatFrame);if (JFileChooser.APPROVE_OPTION == result) {path=fileChooser.getSelectedFile().getPath();System.out.println("path: "+path);file = new File(path);PrintWriter pw = null;try {pw=new PrintWriter(file);pw.write(jTextArea.getText());pw.flush();} catch (FileNotFoundException e) {e.printStackTrace();}finally {pw.close();}}});windowsClose(jf);jf.setVisible(true);}//关闭窗体事件private static void windowsClose(JFrame jFrame){jFrame.addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {System.exit(0);}});}/*** 去除字符串中的"。",";","?","!",“,”* 将所有其他多余的符号转换为" "* @param str  获取到的每行文字*/public static String replaceStr(String str){String new_str = str.replaceAll(";|。|,|?|!|:|”|“|∶|:|,|!|;|—","  ");return new_str;}// 使用Unicode编码范围来判断汉字;这个方法不准确,因为还有很多汉字不在这个范围之内public static boolean isChineseByRange(String str) {if (str == null) {return false;}Pattern pattern = Pattern.compile("[\\u4E00-\\u9FCC]+");return pattern.matcher(str.trim()).find();}
}

以上是我写该小工具的所有代码,也许功能并不全面,仅为一些java初学GUI的朋友们提供图形界面设计和功能结合的思路。如有错误,请指正。

基于javaGUI的文档识别工具制作相关推荐

  1. sphinx:基于 Python 的文档生成工具

    sphinx:基于 Python 的文档生成工具 Motivation 对于软件开发来说,文档是软件可维护性的重要保障.sphinx 是一款文档生成工具,以 restructuredText 为标记语 ...

  2. 最全的在线帮助文档、知识库制作工具汇总,总有一款适合你!

    当前互联网时代,技术门槛越来越低,人人都可以建立并生成各式各样,多元化.多样化的站点.文档站点一般作为各行各业领域内的知识技术介绍及使用的资料站点,可提高资料的使用效率,保证资料的质量. 小编为大家整 ...

  3. java 接口文档工具_一款Java基于注释的接口文档生成工具

    一. 痛点 你还在手动维护接口文档嘛,花一个下午不停的复制粘贴代码里面的注释 接口字段变动,还得去更新文档,更新不及时导致文档不同步 或者你使用了swagger之类的基于注解,依靠运行时的文档工具,看 ...

  4. 基于文档注释接口文档生成工具(代码0侵入附源码)

    本文主要分享一个基于个人兴趣,旨在提高工作效率,开发了一个基于文档注释,接口文档生成工具,欢迎大佬指点. 源码以及使用demo地址 :传送门 1.前置介绍 1.1前世 现在大多数项目都走向了前后端分离 ...

  5. 基于WPF重复造轮子,写一款数据库文档管理工具(一)

    项目背景 公司业务历史悠久且复杂,数据库的表更是多而繁杂,每次基于老业务做功能开发都需要去翻以前的表和业务代码.需要理解旧的表的用途以及包含的字段的含义,表少还好说,但是表一多这就很浪费时间,而且留下 ...

  6. .NET平台开源项目速览(4).NET文档生成工具ADB及使用

    .NET平台开源项目速览(4).NET文档生成工具ADB及使用 原文:.NET平台开源项目速览(4).NET文档生成工具ADB及使用 很久以前就使用ADB这个工具来生成项目的帮助文档.功能强大,在学习 ...

  7. 简要介绍word文档转换为pdf格式文档的工具

    找了很多工具,其实都是乱七八糟的,没几个好用的,最好还是用Adobe Acrobat Pro吧,这个就很方便了,而且转换的也不错. ABC Amber PDF Converter ABC Amber ...

  8. PDF文档搜索工具:PDF Search Mac版

    PDF Search Mac版是一款运行在Mac平台上的PDF文档搜索工具,PDF Search for mac可以帮助用户快速搜索PDF文档,以便用户在数千个PDF文档之间即时查找最相关的页面,另外 ...

  9. 分享一款国内版的Gitbook在线文档创作工具

    GitBook满足了文档创作者和读者最原始的需求,让创作者专注于创作,让读者专注于阅读. 但对于国内的用户来说GitBook访问速度较慢,想体验更多功能的话得要付美金而且要绑信用卡很不方便. 网上关于 ...

最新文章

  1. Redis大集群扩容性能优化实践
  2. 无人驾驶:车道线检测,附代码
  3. SAP WM 能否使用LT12去确认一个需要2-step法确认的TO单?
  4. 制药行业验证过程中的偏差如何处理?
  5. AFNetworking和ASIHTTPRequest的比较
  6. 月薪5 千~1万的兼职你要不要?不限学历,不限男女!
  7. [UI界面]-UIWindow
  8. 3D建模电脑配置推荐(收藏)
  9. 罗马音平假名中文可复制_这首歌,代表了我们的青春,你会唱吗(附op罗马音中文音译)...
  10. 微信开发工具出现 [渲染层网络层错误]
  11. 美团跑腿地址选择器流程图[小程序]
  12. 用Pandas秒秒钟搞定24张Excel报表,还做了波投放分析!
  13. 解决MPx 无法在windows下运行
  14. A Hybrid ℓ1-ℓ0 Layer Decomposition Model for Tone Mapping
  15. asp.net留言板管理源代码
  16. 新手小白学JAVA 泛型 Collection List Set
  17. 人生无常,该来的总会来
  18. 若依报错com.alibaba.fastjson2.JSONArray cannot be cast to com.ruoyi.common.core.domain.model.LoginUser
  19. 陶闯博士超级对话:互联网的终极进化——从物理世界到数实世界
  20. 学习了一下python中使用adb命令的方法

热门文章

  1. 2022-2028年中国封装用胶膜行业运营现状及投资发展潜力报告
  2. Bert代码详解(二)重点
  3. PyTorch 学习笔记(四):权值初始化的十种方法
  4. pycharm debug后会出现 step over /step into/step into my code /force step into /step out 分别表示...
  5. 基于短语的统计机器翻(PBMT) 开源工具 :Moses
  6. TensorRT优化方案图例
  7. 如何在CPU上优化GEMM(下)
  8. 2021年大数据Flink(九):Flink原理初探
  9. java vector search_java.util.Vector.retainAll()方法实例
  10. The expression cannot be a selector(occur after a dot)下面是 what went wrong: Execution failed for task