准确高效的TextIn文档解析:一项开发痛点的解决方案

一、写在前面的话

最近接到一项需求(咨询),计划是做企业级的知识库问答,将相关业务的现有数据、材料做清洗整合,建立数据库,通过问答工具提高业务部门的工作效率。

对现有的开源方法做了一些调研后,笔者发现开发工作在流程第一步就比较难顺畅推进。原因在于,需求方的重要数据有很大一部分来自还没完全实现无纸化办公的环境,以扫描档居多,也包含一部分手写批注或修正,而结合现有的开源工具,自研开发难度相当高。在此分享一下调研过程中的收获。

二、还得是专业的长文档解析

长文档解析并不是一项产生时间很久的需求。在大模型应用进入市场之前,传统的智能文字处理工具已经能满足C端用户的大部分阅读、编辑需求。此前,OCR主要用于处理单页发票、卡、证等,长文档识别缺乏应用场景。

随着LLM在过去一年中的快速发展,我们逐渐发掘AI在处理大量信息内容并提取、总结、帮助分析方面强大的优势,对长文档做高效、准确解析的需求很快浮现。笔者进行调研的基础正是处理长篇且版面复杂的PDF文件。

首先,笔者考虑的是大家通常使用的开源工具,能够支持电子档PDF的提取,但也发现PyPDF2等工具对中文的支持不太理想,距离企业需求的准确度仍有比较大的差距。而结合一些可订阅的OCR工具,例如一些大厂的云服务,一定程度上满足了扫描文件识别要求,但依旧产生两个问题:

1、OCR识别的耗时较长,在处理长文档时体验感不佳;
2、从技术原理来说,OCR返回的信息是文本与相应坐标,一般按行输出字符内容,缺少序列与段落信息,更难以应对有线甚至无线表格、多栏文档这样的复杂板式。
在这里插入图片描述

总体来说,要基于现有方法实现解析文档的需求,自研难度较大,难以实现理想的速度、泛化能力和兼容性,而如果使用大量数据标注做模型训练,又会需要相当高的成本与漫长的开发周期。因此,笔者测试了目前市场上专业的文档解析产品,并发现一款能解决痛点的产品:合合信息TextIn平台的文档解析。

这款产品能提供PDF转Markdown服务,测试下来速度也令人满意,处理100页左右的长文档,能在3s以内输出结果。这是笔者比较过的好几款市面上的产品中速度最快的,有一些产品20页以内的文档需要几十秒处理时间,在效率和体验感差异巨大。

笔者也通过TextIn平台与合合信息的技术人员简单交流了文档解析的技术使用,根据他们的内部测试,在同一批数据上,使用同样的Prompt给到大模型做信息抽取,比较纯OCR和markdown格式输出的差异,发现Markdown格式的抽取准确率要高于纯OCR输出不少。

这也是比较好理解的,我们知道在LLM训练时,大家一般会采用Markdown格式作为训练语料,而同格式的输入对大模型来说较为友好。笔者在测试后发现:要加快问答产品的研发周期,还得是专业的长文档解析。

三、使用TextIn文档解析工具增强LLM问答

分享几个测试案例。主要是一开始用大模型自带解析无法正确应答的,在用TextIn文档解析后做了二次尝试。

笔者上传一份技术专业文件扫描档,并向Kimi提出一个检索式内容问题,回答为文本内容不包含。而同样的文本,经过文档解析转换后,提出一样的问题,Kimi能够准确回答

在这里插入图片描述

在扫描原文件中,可以对结果进行验证。

在这里插入图片描述
在海螺AI,笔者测试了两份含表格文件。第一份为公司文件。

在这里插入图片描述
在这里插入图片描述
针对扫描档,海螺回复内容为空。由于海螺暂时不支持Markdown格式,将文档解析输出结果手动转为txt格式,能正确给出答案,且指明了位置。

回到原文件,也可以方便地定位到信息。

在这里插入图片描述

第二份为财报文件。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
同样地,经由文档解析后,大模型的答复得到显著提升。

TextIn这款产品符合开发知识库问答需要的几大要素:快速解析、高准确度与良好的兼容性,解决了当前开发过程中的痛点。

四、试用方式

分享一下TextIn文档解析的使用方式,希望能给与笔者遇到类似困难的开发者提供一些思路。同时,笔者注册的时候发现这款产品现在正处于内测阶段,平台给每位开发者提供每周7000页的额度福利,有需要的C站朋友也可以通过“合研社”公众号领取。

产品官网链接:https://www.textin.com/market/detail/pdf_to_markdown

文档解析产品在TextIn平台,第一次使用需要注册账号,速度也很快,点击页面上的“免费体验”就可以试用了。
对开发者来说,如果需要用代码调用,也有对应的接口文档内容
https://www.textin.com/document/pdf_to_markdown

平台提供了一个Playground,帮开发者们预先调试接口。

在这里插入图片描述

在这里插入图片描述
简单配置一些接口参数,发起调用后,就能查看调用结果。

如果想用python调用,既可以参考平台上的通用示例代码,也可以通过公众号“合研社”,联系合合技术团队,获得更全面的demo代码。

开始试用👉TextIn平台

  • 54
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 37
    评论
好的,我来为您介绍一下Java代码实现解析text文档内容并存入数据库的方法。 首先,需要导入以下的库: ```java import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; ``` 然后,需要连接数据库: ```java Connection conn = null; String url = "jdbc:mysql://localhost:3306/database_name"; // 数据库地址 String user = "root"; // 数据库用户名 String password = "password"; // 数据库密码 try { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection(url, user, password); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } ``` 接下来,我们需要读取text文档内容并逐行解析: ```java File file = new File("file_path"); // 文件路径 BufferedReader reader = null; try { reader = new BufferedReader(new FileReader(file)); String line; while ((line = reader.readLine()) != null) { // 解析每一行内容,并将其存入数据库 String[] array = line.split(","); String name = array[0]; int age = Integer.parseInt(array[1]); String address = array[2]; String sql = "INSERT INTO table_name (name, age, address) VALUES (?, ?, ?)"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, name); pstmt.setInt(2, age); pstmt.setString(3, address); pstmt.executeUpdate(); } } catch (Exception e) { e.printStackTrace(); } finally { if (reader != null) { try { reader.close(); } catch (Exception e) { e.printStackTrace(); } } } ``` 最后,别忘了关闭数据库连接: ```java if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } ``` 以上就是Java代码实现解析text文档内容并存入数据库的方法,希望可以帮到您!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 37
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员洲洲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值