在使用检索增强生成(RAG)管道处理PDF文件时,如何高效地提取和处理表格是一大挑战。传统方法通常将表格转换为高度规范化的格式,如CSV或JSON,这些格式无法捕捉到有效搜索和检索所需的上下文丰富性。这些表示方式将数据分解为行和列,失去了元素之间的广泛关系。为了应对这一问题,我开发了一种利用大语言模型(LLM)的方法,将表格转换为可读文本,同时保留上下文,从而增强数据在RAG工作流中的可用性。
本文将解释这种方法的背后原理、高层次的好处,以及笔记本的关键部分。
标准的表格解析技术在RAG中常常失效,因为它们生成高度规范化的输出。虽然CSV和JSON格式对特定数据分析有用,但在需要更多上下文的场景下,它们往往不够用。检索增强生成模型依赖于丰富、内容密集的数据,而只有单行或最小数据点会阻碍有效搜索。
与其坚持将表格数据导出为结构化格式,我选择提取表格,通过Azure OpenAI解析,并将其重新格式化为人类可读的文本。这种方法可以更好地嵌入上下文,增强搜索性,同时不失去数据的丰富性。
在实际应用中,从PDF中提取结构化信息通常涉及复杂的表格,例如美国银行的SEC FORM 10-Q中的表格。
这个表格包含了关键的财务数据,如股票符号、描述和交易所。然而,解析这样的表格面临多个挑战:
表格包含合并单元格、多行文本和不同格式的数据类型,如数字和文本。这增加了解析过程的复杂性,因为工具通常难以识别数据元素之间的正确关系。
当表格转换为CSV或JSON等格式时,表格行和列之间的很多关系上下文会丢失。例如,每个类别的标题与其对应的交易符号之间的关系可能无法保留,影响提取数据的完整性。
股票符号和系列名称如 "BAC PrE" 和 "BAC PrL" 可能包含缩写或特殊字符,传统解析工具容易误解这些字符,导致数据提取不准确。
使用大语言模型(LLM)方法,可以将表格转换为可读文本,保留行和列之间的关系上下文。这确保了在解析过程中不会丢失关键财务信息,并且在检索增强生成(RAG)工作流中是完全可检索的。
例如,应用此方法于上述表格会输出以下文本:
Table 1 (Page 1) Text Representation:
以下股票在纽约证券交易所上市:
普通股:
面值:每股 $0.01
符号:BAC
每份代表1/1,000份浮动利率非累积优先股E系列的存托股份:
符号:BAC PrE
每份代表1/1,000份6.000%非累积优先股GG系列的存托股份:
符号:BAC PrB
每份代表1/1,000份5.875%非累积优先股HH系列的存托股份:
符号:BAC PrK
7.25% 非累积永久可转换优先股L系列:
符号:BAC PrL
每份代表1/1,200份美国银行公司浮动利率非累积优先股1系列的存托股份:
符号:BML PrG
过程的第一步使用 pdfplumber
库从PDF的每一页提取文本和表格。
import pdfplumber
# 打开PDF并提取页面
with pdfplumber.open('path_to_pdf.pdf') as pdf:
for page in pdf.pages:
text = page.extract_text() # 提取纯文本
tables = page.extract_tables() # 提取表格
这里,pdfplumber
被用来从每一页PDF中提取纯文本和表格。它提供了一种灵活的方式来处理PDF及其内部结构。
在提取表格后,脚本会将清理后的表格数据发送到Azure OpenAI进行转换为可读文本。这允许LLM创建表格的自然语言摘要。
def process_table_with_llm(table):
# 清理表格中的缺失值并准备输入
cleaned_table = [row for row in table if row]
# 发送到Azure OpenAI进行文本生成
prompt = f"将以下表格转换为可读文本:{cleaned_table}"
response = azure_openai.generate_text(prompt)
return response['generated_text']
表格被清理以处理缺失或 None
值,然后传递给Azure OpenAI,生成表格内容的文本描述。这有助于在最终输出中保留表格的上下文。
一旦从表格生成了文本并提取了非表格文本,所有内容都会写入一个输出文件。这确保了文本和表格数据都可以用于后续任务,如搜索和检索。
with open('output_text_file.txt', 'w') as output_file:
output_file.write(text) # 写入非表格文本
output_file.write('\n\n--- 表格摘要 ---\n')
output_file.write(table_summary) # 写入来自Azure OpenAI的表格摘要
通过将表格摘要嵌入其他文本旁边,我们提供了一个综合的输出,适用于RAG应用程序,确保所有PDF信息以人类可读的格式保留。
通过使用LLM将表格转换为可读文本,并将该文本嵌入到原始内容中,这种方法显著增强了PDF表格在检索增强生成工作流中的可用性。它保留了上下文,改善了搜索性,并确保在规范化过程中不会丢失有价值的信息。这种方法为那些在RAG应用中处理基于PDF的数据提供了更全面的解决方案。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。