天气网站建设,表白网页生成器手机版,打开百度网站建设,邯郸网站制作多少钱PDF解析与结构化提取 PDF解析 对于PDF文档#xff0c;我们选择用PDFMiner对其进行解析#xff0c;得到文本。 PDFMiner PDFMiner使用了一种称作lazy parsing的策略#xff0c;只在需要的时候才去解析#xff0c;以减少时间和内存的使用。要解析PDF至少需要两个类#xff1…PDF解析与结构化提取 PDF解析 对于PDF文档我们选择用PDFMiner对其进行解析得到文本。 PDFMiner PDFMiner使用了一种称作lazy parsing的策略只在需要的时候才去解析以减少时间和内存的使用。要解析PDF至少需要两个类PDFParser 和 PDFDocumentPDFParser从文件中提取数据PDFDocument保存数据。另外还需要PDFPageInterpreter去处理页面内容PDFDevice将其转换为我们所需要的。PDFResourceManager用于保存共享内容例如字体或图片。 PDF结构化提取 对于解析得到的中间格式json格式我们根据文本的坐标以及位置等信息进行结构化提取。本项目做的主要是医疗报告单的解析与提取。我们把每份报告单的内容分为四部分title,head,body(table),bottom 对于我们通过解析拿到的中间格式我们需要根据某些条件先对其进行分块将起分为title,head,body(table),bottom这四块然后再对每一块的信息进行操作处理。 head_begin的确定 依据姓名所在的行定位headbegin即head起始行然后将从这一行开始往后的所有行记为lines往后一次遍历这些行找headend. 方法从姓名行向下一次遍历看各行是否同时满足如下两个条件 1 isbaseinfoline() #关键词数量大于1 2 not istable_head() #所含表头常见的关键词数量是否大于2 当某行不同时满足这两个条件时把该行后边的所有拿出来继续判断是否满足上述条件12。若满足则仍然属于head加上去若不满足则判断是不是body的基本信息 body_begin --isbodybaseinfoline()#包含一个关键词且关键词第一个字符位于左半边 若是body基本信息则为bodybegin; 否则不符合headend的那行就是hendend然后从剩下的行里边找 bottomtmpnewlines[headend:] 然后 findbottompos()#发现y坐标的2/3即后1/3粗分为bottombottomblocklines行之前从headend到1/3为body 返回bottomblocklines,body,ylastline后1/3处y最后取后1/3*页纸张包含的行数与总行的1/3做比较哪部分包含的行树多则取哪个行为起始行为新的bottomblock_lines开始向下遍历前边的部分为body即更加靠上边的部分作为body与bottom的分界。 bottom_begin blockywidth45. #块间距ybottom0.85 #整个pdf的后15%然后从bottomblocklines的第一行开始向下继续找关键词如果满足1 isbaseinfoline() or 2 len(keytmp0) and xhalfwidth. or 3 yybottom and y-ylastlineblockwidth. 即当前距后1/3足够宽足够靠下。找到符合条件的就作为bottom_index,之后的为bottom前边遍历过的行接到刚才的body部分作为body。这样就把pdf文本分成了title,head,body(table),bottom四部分。 小结 这样就将一个pdf源文件进行了解析与结构化提取。当然针对不同的pdf源文件的解析结果进行结构化提取时需要做不同的处理与判定但只要能通过解析获得中间的json格式就可以通过坐标和字符的其他属性实现想要的功能。转载于:https://www.cnblogs.com/monkey-moon/p/8728952.html