PDF转文本时fi/ff/fl连字被转为空格的问题求助
解决pdfplumber提取PDF文本时连字(fi/ff/fl)变为空格的问题
在使用pdfplumber提取PDF文本时,'fi'、'ff'、'fl'这类连字被识别为空格,会严重影响后续数据库文本匹配的准确性。针对这个问题,可以尝试以下几种解决方案:
方案1:启用use_text_flow参数优化提取
pdfplumber的extract_text方法支持use_text_flow参数,开启后会按照文本的阅读逻辑重新梳理字符顺序,能有效处理连字、断行等排版异常。修改代码如下:
fp = 'Inspection_redacted.pdf' pdf = pdfplumber.open(fp) fp = fp[:-3] + 'txt' with open(fp, "w") as text_file: for page in pdf.pages: # 启用文本流模式优化提取 text = page.extract_text(use_text_flow=True) text_file.write(text) pdf.close()
这个参数是官方推荐的优化方案,大部分场景下能直接解决连字被转成空格的问题。
方案2:手动映射连字Unicode字符
如果方案1无效,可能是PDF中的连字是以特殊Unicode字符存储的(比如fi对应U+FB01、ff对应U+FB00、fl对应U+FB02),pdfplumber没有自动转换。这时可以通过提取单个字符并手动映射的方式处理:
fp = 'Inspection_redacted.pdf' pdf = pdfplumber.open(fp) fp = fp[:-3] + 'txt' with open(fp, "w") as text_file: for page in pdf.pages: chars = page.chars text_content = "" for char in chars: char_txt = char["text"] # 根据PDF实际的连字编码替换 if char_txt == "\ufb01": text_content += "fi" elif char_txt == "\ufb00": text_content += "ff" elif char_txt == "\ufb02": text_content += "fl" else: text_content += char_txt text_file.write(text_content) pdf.close()
使用前可以先打印几个char["text"]的值,确认目标PDF中连字对应的具体编码,再调整映射规则。
注意事项
- 优先尝试方案1,操作简单且覆盖大部分场景;
- 若问题仍存在,检查PDF是否嵌入了完整字体,字体缺失或嵌入不完整可能导致字符识别异常;
- 手动映射时需确保编码匹配,不同PDF的连字编码可能存在差异。
内容的提问来源于stack exchange,提问作者Garrett
相关产品推荐
相关产品推荐

