将PDF转TXT时出现随机空格,是PyPDF2的问题吗?
PDF转TXT出现随机空格的问题分析与解决
问题代码
import PyPDF2 # open the pdf file pdfFileObj = open('pdfFile.pdf', 'rb') # creating a pdf reader object pdfReader = PyPDF2.PdfFileReader(pdfFileObj) # looping through all the pages of the pdf for page in range(pdfReader.numPages): # creating a page object pageObj = pdfReader.getPage(page) # extracting text from page text = pageObj.extractText() # writing text to a txt file file = open('txtFile.txt', 'a+', encoding='utf-8') file.write(text) file.close() # closing the pdf file object pdfFileObj.close()
问题描述
使用上述代码将计算机生成的德语PDF转换为TXT时,出现无规律的随机空格问题:原PDF中的单词会被莫名拆分,例如“The apple is red.”变成“The ap ple is red.”,“Apple”变成“A pple”、“Banana”变成“Bana na”,找不到固定的出现模式。
原因分析
- PyPDF2的文本提取逻辑局限:PyPDF2是基于PDF内的文本块位置拼接内容的。计算机生成的PDF中,部分单词的字符可能被拆分为多个独立的文本绘制单元(比如为了排版对齐,字符被分开放置),PyPDF2会把这些单元间的间隙识别为空格,导致单词拆分。
- 德语特殊字符的处理问题:德语包含ä、ö、ü、ß等变音符号,部分PDF生成工具处理这些字符时,会将其与相邻字符拆分为不同文本块,PyPDF2提取时会在中间插入空格。
- PDF内部排版结构影响:部分PDF为实现特定排版效果(如字间距调整、换行优化),会将单个单词拆分为多个小文本段,PyPDF2无法识别这些属于同一个单词,直接按空格拼接。
解决方案
1. 更换更专业的文本提取库
推荐使用PyMuPDF(fitz)或pdfplumber,它们对PDF文本结构的解析更智能,能有效减少这类错误空格:
# 使用PyMuPDF的示例代码 import fitz doc = fitz.open("pdfFile.pdf") with open("txtFile.txt", "w", encoding="utf-8") as output_file: for page in doc: page_text = page.get_text() output_file.write(page_text) doc.close()
2. 对提取后的文本做后处理清理
如果坚持使用PyPDF2,可以用正则表达式清理错误空格(注意:可能误删正常空格,需针对德语文本调整):
import re # 提取文本后执行清理 cleaned_text = re.sub(r'([a-zA-ZäöüÄÖÜß]) ([a-zA-ZäöüÄÖÜß])', r'\1\2', text)
内容的提问来源于stack exchange,提问作者MBx271
相关产品推荐
相关产品推荐

