Camelot提取PDF表格遇换行符问题:有效行被误过滤
问题:Camelot提取PDF表格时换行符导致有效行误删
用Camelot提取PDF中由空格分隔的表格,通过过滤首列非数字行清理数据。但部分同服务器生成的PDF会在前两行的第一、二列间插入换行符\n,使首列内容变为68\n10.30.42这类格式,无法被识别为数字,导致对应行被误删。尝试过设置strip_text=' \n'和预处理PDF替换换行符,均未解决问题。
正常输出(前两行)
0 1 2 3 4 5 6 7 0 Pos. Art-Nr. Bezeichnung Menge Preis Rabatt Summe 1 68 10.30.42 Dimmer 1 Stk 100 10.0% 90.0
异常输出(前两行)
0 1 2 3 4 5 6 0 Pos.\nArt-Nr. Bezeichnung Menge Preis Rabatt Summe 1 68\n10.30.42 Dimmer 1 Stk 100 10.0% 90.0
当前代码
camelot_df = (camelot.read_pdf(input_pdf, flavor="stream", suppress_stdout=True, pages="all")) pdf_df = pd.DataFrame() for pages in camelot_df: pages.df = pages.df[pages.df[0].str.isdigit()] if (~pages.df.empty): pdf_df=pdf_df._append(pages.df)
尝试过的预处理代码
raw = parser.from_file(input_pdf_file_inverter) content = raw['content'] content = content.replace("\n", " ")
解决方法
1. 数据层面修复:提取首列数字部分
直接在提取后的DataFrame中处理首列的换行符,提取有效数字部分再过滤:
camelot_df = camelot.read_pdf(input_pdf, flavor="stream", suppress_stdout=True, pages="all", strip_text=' \n' ) pdf_df = pd.DataFrame() for page in camelot_df: # 拆分首列的换行内容,取第一个元素作为判断依据,兼容更多数字格式 page.df = page.df[pd.to_numeric(page.df[0].str.split('\n').str[0], errors='coerce').notna()] if not page.df.empty: pdf_df = pd.concat([pdf_df, page.df], ignore_index=True)
2. Camelot参数优化:调整列识别阈值
Stream模式依靠文本间距识别列,可尝试增大column_tol参数,让Camelot更准确区分第一、二列,避免换行被合并到同一列:
camelot_df = camelot.read_pdf(input_pdf, flavor="stream", suppress_stdout=True, pages="all", strip_text=' \n', column_tol=10 # 根据实际PDF的列间距调整数值 )
说明
之前的预处理方法无效,是因为parser.from_file提取的是纯文本内容,而Camelot是直接解析PDF的布局结构,两者处理逻辑独立,修改纯文本内容不会影响Camelot的表格识别结果。
内容的提问来源于stack exchange,提问作者giancarlo64
相关产品推荐
相关产品推荐

