网站手机版模板免费下载,北京网站的制作设计,dw网页制作成品下载,黄页88推广效果怎么样引言RAG数据简介PDF解析方法及工具代码实现总结 二、正文内容
引言
本文将介绍如何将RAG数据拆分至PDF格式#xff0c;并探讨PDF解析的方法和工具#xff0c;最后提供代码示例。
RAG数据简介
RAG#xff08;关系型属性图#xff09;是一种用于表示实体及其关系的图数据…引言RAG数据简介PDF解析方法及工具代码实现总结 二、正文内容
引言
本文将介绍如何将RAG数据拆分至PDF格式并探讨PDF解析的方法和工具最后提供代码示例。
RAG数据简介
RAG关系型属性图是一种用于表示实体及其关系的图数据结构。在RAG中节点表示实体边表示实体之间的关系属性则用于描述实体和边的特征。
PDF解析方法及工具
1PDF解析方法
DOM解析将PDF文档转换为树形结构便于操作和遍历。SAX解析基于事件驱动适用于处理大型PDF文档。
2PDF解析工具
PyPDF2一个Python库用于读取、分割、合并PDF文件。PDFMiner一个强大的PDF解析库支持提取文本、图片等元素。pdfplumber一个专注于文本提取的PDF解析库。
代码实现
以下是一个使用PyPDF2将RAG数据拆分至PDF的示例代码
import PyPDF2# 读取PDF文件
with open(source.pdf, rb) as file:reader PyPDF2.PdfFileReader(file)num_pages reader.numPages# 遍历每一页for page_num in range(num_pages):page reader.getPage(page_num)text page.extractText()# 拆分RAG数据# 假设RAG数据以特定格式存储例如实体1-关系-实体2entities text.split(-)# 创建新的PDF文件pdf_writer PyPDF2.PdfFileWriter()pdf_writer.addPage(page)with open(foutput/page_{page_num 1}.pdf, wb) as output_file:pdf_writer.write(output_file)print(PDF文件拆分完成)解析表格
def extract_continuous_tables(pdf, start_page_num):从指定页开始提取连续的表格内容:param pdf: PDF文档对象:param start_page_num: 开始页码:return: 包含处理页码和表格文本的字典continuous_tables [] # 存储连续表格内容processed_pages [] # 存储处理过的页码current_page_num start_page_num# 添加起始页processed_pages.append(current_page_num)while current_page_num len(pdf.pages):current_page pdf.pages[current_page_num]current_page remove_header_footer(current_page)# 提取当前页的表格current_tables current_page.extract_tables()if current_tables:# 将当前页的表格添加到结果中continuous_tables.extend(current_tables)# 检查是否还有下一页if current_page_num 1 len(pdf.pages):break# 获取下一页内容next_page pdf.pages[current_page_num 1]next_page remove_header_footer(next_page)# 提取下一页的内容next_page_tables next_page.extract_tables()next_page_words next_page.extract_words(keep_blank_charsTrue, extra_attrs[fontname, size])# 过滤页眉页脚header_height 50footer_height 50def is_header_content(word):text word[text].lower()# 位置检查if word[top] header_height or word[top] (next_page.height - footer_height):return True# 电话号码模式phone_patterns [rtel[\s:]*[\d\-/],r电话[\s:]*[\d\-/],r传真[\s:]*[\d\-/],rfax[\s:]*[\d\-/],r\d{2,4}[\-/]\d{4,8}, # 匹配常见电话号码格式]# 使用正则表达式匹配import reif any(re.search(pattern, text, re.IGNORECASE) for pattern in phone_patterns):return True# 页眉特征检查header_features [# 位置特征word[top] header_height * 1.2, # 稍微放宽高度限制word[size] 10, # 字体较小# 内容特征any(pattern in text for pattern in [页码, 第, 页, page,copyright, 版权所有,机密, 保密,草稿, draft,文档编号, doc,日期, date]),# 格式特征bool(re.match(r.*\d.*页, text)), # 包含页码bool(re.match(r.*\d{4}[-/]\d{1,2}[-/]\d{1,2}, text)), # 日期格式]return any(header_features)# 过滤词filtered_words [word for word in next_page_wordsif not is_header_content(word)]# 如果需要还可以按垂直位置排序filtered_words.sort(keylambda x: x[top])# 判断下一页是否以表格开始starts_with_table Falseif filtered_words and next_page_tables: # 确保有文字和表格try:if next_page_tables[0] and next_page_tables[0][0]: # 确保表格有内容# 获取第一个表格的位置first_table next_page.find_tables()[0]if first_table:first_table_top first_table.bbox[1]# 获取第一个文字的位置first_word_top filtered_words[0][top]# 如果表格在文字之前则认为页面以表格开始if first_table_top first_word_top:starts_with_table Trueexcept (IndexError, AttributeError):starts_with_table Falseif not starts_with_table:# 如果下一页不是以表格开始则结束提取break# 继续处理下一页current_page_num 1processed_pages.append(current_page_num)# 将表格转换为文本table_texts []for table in continuous_tables:if table:table_text []for row in table:# 过滤None和空字符串并确保所有值都转换为字符串row_text []for cell in row:if cell is not None and str(cell).strip():cell_str str(cell).strip().replace(\n, )# if cell_str: # 只添加非空字符串row_text.append(cell_str)else:row_text.append( ) # 将None转换为空字符串if row_text: # 只添加非空行table_text.append(##.join(row_text))filtered_table_text [row for row in table_text if ## in row]if filtered_table_text:table_texts.append(\n.join(filtered_table_text))# 返回包含页码列表和表格文本的字典result {processed_pages: processed_pages,table_text: \n\n.join(table_texts) if table_texts else }return result 1.pdfplumber https://blog.csdn.net/fuhanghang/article/details/122579548 1 pdfplumber的主要类和方法 pdfplumber对于表格的提取 参考https://github.com/jsvine/pdfplumber/blob/stable/examples/notebooks/extract-table-ca-warn-report.ipynb 1 代码
pdf pdfplumber.open(../pdfs/ca-warn-report.pdf)
p0pdf.pages[0]
im p0.to_image() #display 第一页
table p0.extract_table() 抽取其中最大的表格import pandas as pd
df pd.DataFrame(table[1:], columnstable[0])
for column in [Effective, Received]:df[column] df[column].str.replace( , ) 使用panda来吧table抽取到的数据转成dataFrame格式 总结
本文介绍了RAG数据拆分至PDF的方法和工具并通过代码示例展示了如何使用PyPDF2进行PDF文件拆分。在实际应用中可根据需求选择合适的解析方法和工具。
希望这个分享笔记大纲和代码示例能帮助你完成你的分享笔记。在实际编写过程中可以根据具体需求进行调整和优化。