记一次pdf提取文本
说明
需要从 十几个pdf文件中提取 xml
,本来想用 pdfbox 框架来直接转的,可是测试后发现转换出来的是乱码~,于是换个思路……
思路
首页将需要提取的文件截图(可以写个脚本来做?有空看看)使用 ocr
来转换,我用的是 腾讯AI上的,然后写个程序去调 ocr
接口,将获取的结果写入xml
中,然后再用 正则替换 来修正其中的一些格式问题。
优图OCR服务
注意在 腾讯AI开放平台
注册,然后创建应用,需要接入 通用OCR
能力,才能调api,不然会报 no auth
错误
点击 接入能力
选择你的应用即可
批量调用接口并生成xml
正则替换记录
我用的 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 |
"空格 |
将以" 结尾的换行符替换来空格 |