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

使用PymuPDF提取PDF文本时如何处理连字编码问题

解决PymuPDF提取PDF文本时的连字编码问题

方案1:写入文件时指定UTF-8编码

报错核心是Windows默认用cp1252编码写入文件,该编码不支持PDF中的Unicode连字字符(如\ufb02对应ffl)。直接指定UTF-8编码即可解决,无需修改文本内容,效率最高:

with open('output.txt', 'w', encoding='utf-8') as f:
    f.write(desire_text)

方案2:提取文本时直接禁用连字

PymuPDF的page.get_text()支持通过flags参数控制提取行为,设置fitz.TEXTFLAGS_NO_LIGATURES可让提取器自动将连字拆分为对应普通字符(如ffl→ffl),后续写入无需额外处理:

pdf = fitz.open("file_path") 
full_text = ""
for page_n in range(pdf.page_count):
    page = pdf.load_page(page_n)
    # 禁用连字提取
    full_text += page.get_text(flags=fitz.TEXTFLAGS_NO_LIGATURES)
pdf.close()

# 后续处理得到目标文本
desire_text = ...

# 直接写入即可(指定UTF-8更稳妥)
with open('output.txt', 'w') as f:
    f.write(desire_text)

方案3:高效批量替换连字(自定义场景)

如果需要手动控制替换规则,用translate()方法比多次replace()效率更高。先定义连字映射字典,再批量替换:

# 常见连字映射,可按需补充
ligature_map = {
    '\ufb00': 'ff',
    '\ufb01': 'fi',
    '\ufb02': 'ffl',
    '\ufb03': 'ffi',
    '\ufb04': 'ft',
    '\ufb05': 'st'
}

# 批量替换
desire_text = desire_text.translate(str.maketrans(ligature_map))

# 写入文件
with open('output.txt', 'w') as f:
    f.write(desire_text)

内容的提问来源于stack exchange,提问作者WhyMeasureTheory

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 07:56:08