记一次pdf提取文本

说明

需要从 十几个pdf文件中提取 xml,本来想用 pdfbox 框架来直接转的,可是测试后发现转换出来的是乱码~,于是换个思路……

思路

首页将需要提取的文件截图(可以写个脚本来做?有空看看)使用 ocr 来转换,我用的是 腾讯AI上的,然后写个程序去调 ocr 接口,将获取的结果写入xml中,然后再用 正则替换 来修正其中的一些格式问题。

优图OCR服务

注意在 腾讯AI开放平台注册,然后创建应用,需要接入 通用OCR 能力,才能调api,不然会报 no auth 错误

点击 接入能力 选择你的应用即可

批量调用接口并生成xml

项目github

正则替换记录

我用的 vscode 软件来替换的

正则 替换文本 说明
^\(|〈|<\s+ < < 去空格 ( 改为 <
(<[a-zA-Z]+)\) $1> <houseNumber) 改成 <houseNumber>
〉|\)$ > 修正 >
\b’|’\s?|‘|”|’ "修正
(=)\s(")\s $1$2 Code = " IN 改成 Code = "IN
\s?(=)\s? $1 去掉 = 两边的空格
xsi:\s|xsi\s: xsi: xsi:type 修正 执行两次~
</\s|<\s/ </ 修正 </ 去掉多余的空格
\s/>|/\s> /> 修正 /> 去掉多余的空格
^<!\s-+ <!-- 修正 <!--
(<!-)(?!-) $1- <!- 改成 <!--
(?<!-)(->)$ -$1 -> 改成 -->
(\d)\s(\.) $1$2 2.16 .8改成 2.16.8
(\d\.)\s $1 2.16. 1 改成 2.16.1
\s(") $1 code="30954-2 " 改成 code="30954-2"
(=")\s $1 typeCode=" RCT" 改成 typeCode="RCT"
(<[a-zA-z]+)\) $1> <addr) 改成 <addr>
(?<=")(?=[a-zA-Z]+=) 空格 "2"unit= 改成 "2" unit=
(=")\s $1 root=" 2 改成 root="2
(?<=</)([a-zA-Z]+)\s $1 </entryRelat ionship>改成 </entryRelationship> 应多次执行
(?<=</?)([a-zA-Z]+$) $1> </observation 改成 </observation>
(<[a-zA-Z]+) (?!xsi:type)(?!/>)(?![a-zA-Z:]+=) $1 <entryRelat ionship 改成 <entryRelationship 需要多次调用以防 出现 <entry Relat ionship这种情况
(<[a-zA-Z]+)\.\s* $1 <ass. igned 改成 <assigned
(\s[a-zA-Z]+)\s([a-zA-Z]+=) $1$2 extens ion="PO改成 extension="PO
(\.)\n $1 将以 . 结尾的换行符去掉
\n^(=) $1 将以 =开头的前一个换行符去掉
"$\n "空格 将以" 结尾的换行符替换来空格
0%
隐藏