Python实现PDF长文本提取并生成规范JSON文件的问题
解决PyPDF2提取PDF文本生成规范JSON的问题
核心问题拆解
你当前面临两个核心问题:
- 输出的JSON未形成预期的数组结构
- 长文本中的特殊字符(标点、换行等)破坏JSON格式,但需完整保留用于后续Neo4j处理
完整解决方案代码
1. 稳定提取PDF文本
用PyPDF2遍历页面提取文本,保留原始特殊字符,仅清理无效空行:
from PyPDF2 import PdfReader import json def extract_pdf_text(pdf_path): reader = PdfReader(pdf_path) full_text = "" for page in reader.pages: page_content = page.extract_text() if page_content: full_text += page_content + "\n" # 清理连续空行,不删除有效换行和特殊字符 full_text = "\n".join([line for line in full_text.splitlines() if line.strip() or line == "\n"]) return full_text
2. 生成规范数组结构JSON
依赖Python内置json模块自动处理特殊字符转义,确保格式合法:
def build_valid_json(output_path, text, target_key="extracted_content"): # 构建数组结构的JSON数据,直接将字典包裹在列表中 json_payload = [ { target_key: text } ] # 用utf-8编码+关闭ASCII转义,保留所有字符原始形态 with open(output_path, "w", encoding="utf-8") as f: json.dump(json_payload, f, ensure_ascii=False, indent=2) # 调用示例 if __name__ == "__main__": pdf_content = extract_pdf_text("user_upload.pdf") build_valid_json("result.json", pdf_content)
关键细节说明
- 特殊字符兼容:
json.dump()会自动转义双引号、反斜杠、换行符等可能破坏JSON格式的字符,这些转义在Neo4j读取时会自动解析还原,完全不影响后续处理。 - 数组结构保障:直接将单个文本字典包裹在列表中,若需批量处理多个PDF,只需向列表追加更多字典即可。
- 编码问题规避:指定
encoding="utf-8"和ensure_ascii=False,避免中文、特殊符号被转义为Unicode编码。
常见问题排查
- 若提取文本出现乱码,尝试更新PyPDF2到最新版本,或替换为
pdfplumber(文本提取精度更高,兼容上述JSON生成逻辑)。 - 若JSON结构仍不符合预期,检查
json_payload是否正确用列表包裹,避免直接输出单个字典。
内容的提问来源于stack exchange,提问作者Lakeside52
相关产品推荐
相关产品推荐

