You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 06:50:24