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

Python提取PDF文本出现单词错误空格问题的解决咨询

解决PDF文本提取时单词错误插入空格的问题

问题根源

PyPDF2的文本提取逻辑较为基础,当PDF文件中的单词因排版需求被拆分成多行(比如行尾拆分单词),它会直接保留拆分后的空格,导致出现"seed ing"这类错误。

解决方案

方案1:换用更精准的PDF提取库(推荐)

使用pdfplumber,它能更好地识别文本的排版结构,大幅减少这类单词拆分错误,同时可精准提取指定章节内容。

示例代码:

import pdfplumber
from docx import Document

# 提取指定章节文本
def extract_chapter_content(pdf_path, start_keyword, end_keyword):
    full_text = ""
    with pdfplumber.open(pdf_path) as pdf:
        for page in pdf.pages:
            page_text = page.extract_text()
            full_text += page_text
            # 到达结束章节后停止提取
            if end_keyword in page_text:
                break
    
    # 截取第1章到第2章的内容
    start_idx = full_text.find(start_keyword)
    end_idx = full_text.find(end_keyword)
    if start_idx != -1 and end_idx != -1:
        return full_text[start_idx:end_idx]
    return ""

# 主逻辑
if __name__ == "__main__":
    extracted_text = extract_chapter_content("example.pdf", "Chapter 1", "Chapter 2")
    
    # 保存为TXT
    with open("extracted_text.txt", "w", encoding="utf-8") as f:
        f.write(extracted_text)
    
    # 保存为DOCX
    doc = Document()
    doc.add_paragraph(extracted_text)
    doc.save("extracted_text.docx")

方案2:用正则修复已提取的错误空格

如果不想更换库,可以对PyPDF2提取的文本做后处理,用正则匹配并修复被拆分的单词(比如匹配"小写字母+空格+小写字母"的模式,去掉中间空格)。

示例代码:

import re
import PyPDF2
from docx import Document

# 修复单词中的错误空格
def fix_word_spaces(text):
    # 匹配小写字母+空格+小写字母的情况,去掉中间空格
    pattern = re.compile(r'([a-z])\s+([a-z])')
    return pattern.sub(r'\1\2', text)

# 提取文本
with open('example.pdf', 'rb') as pdf_file:
    pdf_reader = PyPDF2.PdfFileReader(pdf_file)
    text = ""
    for page in range(pdf_reader.getNumPages()):
        page_text = pdf_reader.getPage(page).extractText()
        text += page_text
        if "Chapter 2" in page_text:
            break

# 截取章节内容并修复
start = text.find("Chapter 1")
end = text.find("Chapter 2")
if start != -1 and end != -1:
    text = text[start:end]
    fixed_text = fix_word_spaces(text)

    # 保存为TXT
    with open('extracted_text.txt', 'w', encoding='utf-8') as text_file:
        text_file.write(fixed_text)
    
    # 保存为DOCX
    doc = Document()
    doc.add_paragraph(fixed_text)
    doc.save("extracted_text.docx")

注意事项

  • 方案1的依赖库需要提前安装:pip install pdfplumber python-docx
  • 方案2的正则仅能处理简单的小写字母拆分场景,遇到带标点、大写字母的拆分情况,需要调整正则规则适配
  • 如果目标PDF是扫描件(图片格式),需先用OCR工具(如pytesseract)识别文本后,再进行后续处理

内容的提问来源于stack exchange,提问作者Catao.ed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 23:10:56