如何在Ghostscript -sDEVICE=txtwrite提取文本时为每个单词添加分隔符
嘿,很高兴听到你用Ghostscript提取PDF文本的基础命令效果不错!针对表格内容里的单词粘连问题,确实有几个实用的方法能帮你给单词添加合适的分隔符,完美解决这个困扰:
改用
txtwrite设备并启用自动单词拆分
Ghostscript的txtwrite是专门优化过的文本提取设备,比旧的txt或ps2ascii设备更擅长处理复杂布局(比如表格)。你可以加上-dTextWordBreak=true参数,让它自动识别单词边界并添加分隔符:gs -sDEVICE=txtwrite -dTextWordBreak=true -o output.txt input.pdf这个参数会让Ghostscript根据字符间距、字体属性等判断单词的结束位置,给表格里的粘连单词自动补上空格分隔。
自定义单词分隔符
如果默认的空格分隔不符合你的需求,还可以用-dTextWordSeparator参数指定自定义分隔符(比如换行符、逗号等)。比如要把每个单词单独放在一行:gs -sDEVICE=txtwrite -dTextWordBreak=true -dTextWordSeparator="\n" -o output.txt input.pdf注意:不同系统(Windows/Linux/macOS)的转义规则可能略有不同,比如Windows下可能需要用
^转义特殊字符。顽固粘连的后续脚本处理
要是还有个别极端的粘连情况(比如大小写混连HelloWorld、数字+字母123Apple),可以用简单的脚本做后续修复。比如用Python的正则表达式匹配边界:import re with open("output.txt", "r") as f: text = f.read() # 匹配大小写转换的位置,插入空格 fixed_text = re.sub(r'([a-z])([A-Z])', r'\1 \2', text) # 匹配数字和字母的边界,插入空格 fixed_text = re.sub(r'(\d)([A-Za-z])', r'\1 \2', fixed_text) fixed_text = re.sub(r'([A-Za-z])(\d)', r'\1 \2', fixed_text) with open("fixed_output.txt", "w") as f: f.write(fixed_text)
另外要提一句:如果你的PDF表格是用矢量线条绘制的“伪表格”(不是真正的文本单元格),那Ghostscript的文本提取可能还是会有偏差——这时候可能需要先把PDF转成OCR可识别的格式再处理,但如果是标准的文本型表格,上面的方法应该能搞定大部分粘连问题。
内容的提问来源于stack exchange,提问作者Charles Okwuagwu

