当前位置: 首页 > news >正文

LLM应用构建前的非结构化数据处理(三)文档表格的提取

1.学习内容

本节次学习内容来自于吴恩达老师的Preprocessing Unstructured Data for LLM Applications课程,因涉及到非结构化数据的相关处理,遂做学习整理。
本节主要学习pdf中的表格数据处理

2.环境准备

和之前一样,可以参考LLM应用构建前的非结构化数据处理(一)标准化处理认识数据
,其中配置信息保持一致

同样的,需要unstructured.io上获取APIkey。

3.开始尝试

3.1导入环境

# Warning control
import warnings
warnings.filterwarnings('ignore')from unstructured_client import UnstructuredClient
from unstructured_client.models import shared
from unstructured_client.models.errors import SDKErrorfrom unstructured.staging.base import dict_to_elements
# 初始化API
s = UnstructuredClient(api_key_auth="XXX",server_url="https://api.unstrXXX",
)

3.2样例浏览

from IPython.display import Image
Image(filename="images/embedded-images-tables.jpg", height=600, width=600) 

输出如下:
在这里插入图片描述

3.3处理pdf文档

filename = "example_files/embedded-images-tables.pdf"with open(filename, "rb") as f:files=shared.Files(content=f.read(),file_name=filename,)req = shared.PartitionParameters(files=files,strategy="hi_res",hi_res_model_name="yolox",skip_infer_table_types=[],pdf_infer_table_structure=True,
)try:resp = s.general.partition(req)elements = dict_to_elements(resp.elements)
except SDKError as e:print(e)
# 找到处理数据中的Table元素的unstructured对象数据
tables = [el for el in elements if el.category == "Table"]
tables[0].text

输出如下:

'Inhibitor Polarization Corrosion be (V/dec) ba (V/dec) Ecorr (V) icorr (AJcm?) concentration (g) resistance (Q) rate (mmj/year) 0.0335 0.0409 —0.9393 0.0003 24.0910 2.8163 1.9460 0.0596 .8276 0.0002 121.440 1.5054 0.0163 0.2369 .8825 0.0001 42121 0.9476 s NO 03233 0.0540 —0.8027 5.39E-05 373.180 0.4318 0.1240 0.0556 .5896 5.46E-05 305.650 0.3772 = 5 0.0382 0.0086 .5356 1.24E-05 246.080 0.0919'

将其转为html形式

table_html = tables[0].metadata.text_as_html
table_html

输出如下:

'<table><thead><tr><th>Inhibitor concentration (g)</th><th>be (V/dec)</th><th>ba (V/dec)</th><th>Ecorr (V)</th><th>icorr (AJcm?)</th><th>Polarization resistance (Q)</th><th>Corrosion rate (mmj/year)</th></tr></thead><tbody><tr><td></td><td>0.0335</td><td>0.0409</td><td>—0.9393</td><td>0.0003</td><td>24.0910</td><td>2.8163</td></tr><tr><td>NO</td><td>1.9460</td><td>0.0596</td><td>—0.8276</td><td>0.0002</td><td>121.440</td><td>1.5054</td></tr><tr><td></td><td>0.0163</td><td>0.2369</td><td>—0.8825</td><td>0.0001</td><td>42121</td><td>0.9476</td></tr><tr><td>s</td><td>03233</td><td>0.0540</td><td>—0.8027</td><td>5.39E-05</td><td>373.180</td><td>0.4318</td></tr><tr><td></td><td>0.1240</td><td>0.0556</td><td>—0.5896</td><td>5.46E-05</td><td>305.650</td><td>0.3772</td></tr><tr><td>= 5</td><td>0.0382</td><td>0.0086</td><td>—0.5356</td><td>1.24E-05</td><td>246.080</td><td>0.0919</td></tr></tbody></table>'

3.4 格式化呈现

from io import StringIO 
from lxml import etreeparser = etree.XMLParser(remove_blank_text=True)
file_obj = StringIO(table_html)
tree = etree.parse(file_obj, parser)
print(etree.tostring(tree, pretty_print=True).decode())

输出如下:

<table><thead><tr><th>Inhibitor concentration (g)</th><th>be (V/dec)</th><th>ba (V/dec)</th><th>Ecorr (V)</th><th>icorr (AJcm?)</th><th>Polarization resistance (Q)</th><th>Corrosion rate (mmj/year)</th></tr></thead><tbody><tr><td/><td>0.0335</td><td>0.0409</td><td>&#8212;0.9393</td><td>0.0003</td><td>24.0910</td><td>2.8163</td></tr><tr><td>NO</td><td>1.9460</td><td>0.0596</td><td>&#8212;0.8276</td><td>0.0002</td><td>121.440</td><td>1.5054</td></tr><tr><td/><td>0.0163</td><td>0.2369</td><td>&#8212;0.8825</td><td>0.0001</td><td>42121</td><td>0.9476</td></tr><tr><td>s</td><td>03233</td><td>0.0540</td><td>&#8212;0.8027</td><td>5.39E-05</td><td>373.180</td><td>0.4318</td></tr><tr><td/><td>0.1240</td><td>0.0556</td><td>&#8212;0.5896</td><td>5.46E-05</td><td>305.650</td><td>0.3772</td></tr><tr><td>= 5</td><td>0.0382</td><td>0.0086</td><td>&#8212;0.5356</td><td>1.24E-05</td><td>246.080</td><td>0.0919</td></tr></tbody>
</table>

3.5 还原表格到html中显示

from IPython.core.display import HTML
HTML(table_html)

输出如下:在这里插入图片描述

3.6 借助langchain进行摘要

from langchain_openai import ChatOpenAI
from langchain_core.documents import Document
from langchain.chains.summarize import load_summarize_chainllm = ChatOpenAI(temperature=0, model_name="gpt-3.5-turbo-1106")
chain = load_summarize_chain(llm, chain_type="stuff")
chain.invoke([Document(page_content=table_html)])

输出如下:

{'input_documents': [Document(page_content='<table><thead><tr><th>Inhibitor concentration (g)</th><th>be (V/dec)</th><th>ba (V/dec)</th><th>Ecorr (V)</th><th>icorr (AJcm?)</th><th>Polarization resistance (Q)</th><th>Corrosion rate (mmj/year)</th></tr></thead><tbody><tr><td></td><td>0.0335</td><td>0.0409</td><td>—0.9393</td><td>0.0003</td><td>24.0910</td><td>2.8163</td></tr><tr><td>NO</td><td>1.9460</td><td>0.0596</td><td>—0.8276</td><td>0.0002</td><td>121.440</td><td>1.5054</td></tr><tr><td></td><td>0.0163</td><td>0.2369</td><td>—0.8825</td><td>0.0001</td><td>42121</td><td>0.9476</td></tr><tr><td>s</td><td>03233</td><td>0.0540</td><td>—0.8027</td><td>5.39E-05</td><td>373.180</td><td>0.4318</td></tr><tr><td></td><td>0.1240</td><td>0.0556</td><td>—0.5896</td><td>5.46E-05</td><td>305.650</td><td>0.3772</td></tr><tr><td>= 5</td><td>0.0382</td><td>0.0086</td><td>—0.5356</td><td>1.24E-05</td><td>246.080</td><td>0.0919</td></tr></tbody></table>')],'output_text': 'The table provides data on the corrosion rate and polarization resistance of different inhibitor concentrations in a solution. The data includes the inhibitor concentration, be and ba values, Ecorr, icorr, polarization resistance, and corrosion rate. The table shows the impact of different inhibitor concentrations on the corrosion rate and polarization resistance.'}

4. 总结

可以看到,非结构化数据识别还是有难度,不知道为什么,实验中部分识别结果是错的,如果追求准确性,还是得斟酌一下。

http://www.lryc.cn/news/396166.html

相关文章:

  • 如何从数码相机恢复已删除的照片
  • 设计模式使用场景实现示例及优缺点(创建型模式——单例模式、建造者模式、原型模式)
  • LAMP万字详解(概念、构建步骤)
  • 金南瓜科技SECS/GEM:引领智能制造新潮流
  • 昇思训练营打卡第二十一天(DCGAN生成漫画头像)
  • 东方通Tongweb发布vue前端
  • spring xml实现bean对象(仅供自己参考)
  • MiniGPT-Med 通用医学视觉大模型:生成医学报告 + 视觉问答 + 医学疾病识别
  • 如何判断ip地址在同一个网段:技术解析与实际应用
  • linux高级编程(TCP)(传输控制协议)
  • 【常见开源库的二次开发】一文学懂CJSON
  • 点云下采样有损压缩
  • AutoHotKey自动热键(六)转义符号
  • 第16章 主成分分析:四个案例及课后习题
  • 股票分析系统设计方案大纲与细节
  • .gitmodules文件
  • STM32 SPI世界:W25Q64 Flash存储器的硬件与软件集成策略
  • 【计算机网络仿真】b站湖科大教书匠思科Packet Tracer——实验17 开放最短路径优先OSPF
  • ChatGPT对话:python程序模拟操作网页弹出对话框
  • 利用亚马逊云科技云原生Serverless代码托管服务开发OpenAI ChatGPT-4o应用
  • Selenium 切换 frame/iframe
  • VOI(Virtual Operating System Infrastructure,虚拟操作系统基础架构)
  • 迭代器模式(大话设计模式)C/C++版本
  • vue学习day04-计算属性、computed计算属性与methods方法、计算属性完整写法
  • 关于力扣150题目——逆波兰表达式求值Java实现的三种解法
  • FTP与TFTP
  • 【Linux】System V信号量详解以及semget()、semctl()和semop()函数讲解
  • JAVA预编译简单理解
  • nvm 管理多版本 node
  • C++中的多重继承和虚继承:横向继承、纵向继承和联合继承;虚继承