当前位置: 首页 > news >正文

【示例】通义千问Qwen大模型解析本地pdf文档,转换成markdown格式文档

安装必要工具

通义千问(Qwen)目前主要通过API或开源模型提供服务,解析PDF需结合第三方工具(如PyPDF2、pdfplumber)提取文本,再调用Qwen API处理。以下是具体方法:


方法1:使用PyPDF2提取文本后调用Qwen API

  1. 安装依赖库

    pip install pypdf2 requests
    
  2. 提取PDF文本

    from PyPDF2 import PdfReaderdef extract_text_from_pdf(file_path):reader = PdfReader(file_path)text = ""for page in reader.pages:text += page.extract_text()return text
    
  3. 调用通义千问API处理文本

    import requestsdef qwen_api_request(text):api_url = "https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation"headers = {"Authorization": "Bearer YOUR_API_KEY",  # 替换为实际API密钥"Content-Type": "application/json"}data = {"model": "qwen-max","input": {"messages": [{"role": "user", "content": f"将以下文本转换为Markdown格式:\n{text}"}]}}response = requests.post(api_url, json=data, headers=headers)return response.json()["output"]["text"]
    

方法2:结合pdfplumber与Qwen API

  1. 安装依赖库

    pip install pdfplumber 
    
  2. 提取PDF文本(保留表格和格式)

def extract_text_from_pdf(pdf_path):"""使用 pdfplumber 从PDF中提取全部文本"""text = ""try:with pdfplumber.open(pdf_path) as pdf:for i, page in enumerate(pdf.pages):page_text = page.extract_text()if page_text:text += f"\n--- 第 {i + 1} 页 ---\n"text += page_text + "\n"print("✅ PDF 文本提取成功,前300字符预览:")print(text[:300] + "...")return textexcept Exception as e:print(f"❌ PDF提取失败: {str(e)}")return None
  1. 加载Qwen模型转换Markdown
def enhance_text_to_markdown_with_qwen(text_content):"""调用 Qwen-max 将原始文本转换为结构化 Markdown"""if not text_content.strip():return Noneprompt = f"""
你是一个专业的工业设备文档工程师。请将以下从PDF提取的原始文本,转换为结构清晰、格式规范、语义完整的 Markdown 文档。要求:
1. 自动识别并设置合理的标题层级(#、##、###)
2. 列表使用 - 或 1. 2. 3. 格式
3. 表格必须使用标准 Markdown 表格语法对齐(即使原文是文字表格)
4. 保留所有技术细节、参数、步骤说明、安全警告,不得删减
5. 若原文有章节编号(如 1.1, 2.3.1),请保留并转为标题
6. 对于提到的图片(如“见下图”、“结构图如下”),请插入占位符:![描述](image_X.png)
7. 输出纯 Markdown,不要包含任何额外解释原始文本:
---
{text_content}
---
"""try:response = Generation.call(model="qwen-max",  # 使用最强文本模型prompt=prompt,seed=12345,temperature=0.2,  # 低温度,忠实原文top_p=0.85,result_format='message')if response.status_code == 200:markdown_content = response.output.choices[0].message.content.strip()return markdown_contentelse:print(f"❌ Qwen API 调用失败: {response.message}")return Noneexcept Exception as e:print(f"❌ 调用 Qwen 时发生错误: {str(e)}")return None

  1. 输出Markdown文件
    将处理后的结果写入.md文件:
def pdf_to_markdown_via_text(pdf_path, output_md_path="output.md"):"""主流程:PDF → 本地提取文本 → Qwen结构化 → 保存Markdown"""print(f"📄 正在从本地提取 PDF 文件: {pdf_path}")# Step 1: 本地提取文本raw_text = extract_text_from_pdf(pdf_path)if not raw_text:return False# Step 2: 调用 Qwen 优化结构print("🧠 正在调用通义千问 MAX 模型优化文档结构...")enhanced_md = enhance_text_to_markdown_with_qwen(raw_text)if not enhanced_md:return False# Step 3: 保存结果with open(output_md_path, "w", encoding="utf-8") as f:f.write(enhanced_md)print(f"\n🎉 转换成功!已保存至: {output_md_path}")print("\n🔍 生成的 Markdown 前500字符预览:")print("=" * 60)print(enhanced_md[:500] + "..." if len(enhanced_md) > 500 else enhanced_md)print("=" * 60)return True

方法2 ->完整案例代码

import dashscope
from dashscope import Generation
import pdfplumber  # 轻量级PDF文本提取库# 设置API Key
dashscope.api_key = "YOUR_API_KEY"  # ← 替换为你的API Keydef extract_text_from_pdf(pdf_path):"""使用 pdfplumber 从PDF中提取全部文本"""text = ""try:with pdfplumber.open(pdf_path) as pdf:for i, page in enumerate(pdf.pages):page_text = page.extract_text()if page_text:text += f"\n--- 第 {i + 1} 页 ---\n"text += page_text + "\n"print("✅ PDF 文本提取成功,前300字符预览:")print(text[:300] + "...")return textexcept Exception as e:print(f"❌ PDF提取失败: {str(e)}")return Nonedef enhance_text_to_markdown_with_qwen(text_content):"""调用 Qwen-max 将原始文本转换为结构化 Markdown"""if not text_content.strip():return Noneprompt = f"""
你是一个专业的工业设备文档工程师。请将以下从PDF提取的原始文本,转换为结构清晰、格式规范、语义完整的 Markdown 文档。要求:
1. 自动识别并设置合理的标题层级(#、##、###)
2. 列表使用 - 或 1. 2. 3. 格式
3. 表格必须使用标准 Markdown 表格语法对齐(即使原文是文字表格)
4. 保留所有技术细节、参数、步骤说明、安全警告,不得删减
5. 若原文有章节编号(如 1.1, 2.3.1),请保留并转为标题
6. 对于提到的图片(如“见下图”、“结构图如下”),请插入占位符:![描述](image_X.png)
7. 输出纯 Markdown,不要包含任何额外解释原始文本:
---
{text_content}
---
"""try:response = Generation.call(model="qwen-max",  # 使用最强文本模型prompt=prompt,seed=12345,temperature=0.2,  # 低温度,忠实原文top_p=0.85,result_format='message')if response.status_code == 200:markdown_content = response.output.choices[0].message.content.strip()return markdown_contentelse:print(f"❌ Qwen API 调用失败: {response.message}")return Noneexcept Exception as e:print(f"❌ 调用 Qwen 时发生错误: {str(e)}")return Nonedef pdf_to_markdown_via_text(pdf_path, output_md_path="output.md"):"""主流程:PDF → 本地提取文本 → Qwen结构化 → 保存Markdown"""print(f"📄 正在从本地提取 PDF 文件: {pdf_path}")# Step 1: 本地提取文本raw_text = extract_text_from_pdf(pdf_path)if not raw_text:return False# Step 2: 调用 Qwen 优化结构print("🧠 正在调用通义千问 MAX 模型优化文档结构...")enhanced_md = enhance_text_to_markdown_with_qwen(raw_text)if not enhanced_md:return False# Step 3: 保存结果with open(output_md_path, "w", encoding="utf-8") as f:f.write(enhanced_md)print(f"\n🎉 转换成功!已保存至: {output_md_path}")print("\n🔍 生成的 Markdown 前500字符预览:")print("=" * 60)print(enhanced_md[:500] + "..." if len(enhanced_md) > 500 else enhanced_md)print("=" * 60)return True# ====== 执行 ======
if __name__ == "__main__":PDF_FILE = "维护保养.pdf"OUTPUT_FILE = "维护保养.md"# 安装依赖(如未安装):# pip install pdfplumber dashscopesuccess = pdf_to_markdown_via_text(PDF_FILE, OUTPUT_FILE)if success:print("\n✅ 全流程执行完毕!")else:print("\n❌ 处理失败,请检查错误信息。")

注意事项

  • API限制:通义千问API可能有调用频率或字数限制,需参考官方文档。
  • 本地模型:若使用本地Qwen模型,需确保硬件资源足够(如GPU显存)。
  • PDF复杂性:含复杂表格或图片的PDF需额外处理(如OCR或手动调整)。
http://www.dtcms.com/a/390682.html

相关文章:

  • 企业级容器技术Docker 20250919总结
  • 微信小程序-隐藏自定义 tabbar
  • leetcode15.三数之和
  • 强化学习Gym库的常用API
  • ✅ Python微博舆情分析系统 Flask+SnowNLP情感分析 词云可视化 爬虫大数据 爬虫+机器学习+可视化
  • 红队渗透实战
  • 基于MATLAB的NSCT(非下采样轮廓波变换)实现
  • 创建vue3项目,npm install后,运行报错,已解决
  • 设计模式(C++)详解—外观模式(1)
  • pnpm 进阶配置:依赖缓存优化、工作区搭建与镜像管理
  • gitlab:从CentOS 7.9迁移至Ubuntu 24.04.2(版本17.2.2-ee)
  • 有哪些适合初学者的Java项目?
  • 如何开始学习Java编程?
  • 【项目实战 Day3】springboot + vue 苍穹外卖系统(菜品模块 完结)
  • 华为 ai 机考 编程题解答
  • Docker多容器通过卷共享 R 包目录
  • 【保姆级教程】MasterGo MCP + Cursor 一键实现 UI 设计稿还原
  • Unity 性能优化 之 理论基础 (Culling剔除 | Simplization简化 | Batching合批)
  • react+andDesign+vite+ts从零搭建后台管理系统
  • No007:构建生态通道——如何让DeepSeek更贴近生产与生活的真实需求
  • 力扣Hot100--206.反转链表
  • Java 生态监控体系实战:Prometheus+Grafana+SkyWalking 整合全指南(三)
  • 生活琐记(3)
  • 在 Elasticsearch 和 GCP 上的混合搜索和语义重排序
  • 借助Aspose.HTML控件,使用 Python 将 HTML 转换为 DOCX
  • 设计测试用例的万能公式
  • 黑马头条_SpringCloud项目阶段三:HTML文件生成以及素材文章CRUD
  • 精准模拟,实战赋能-比亚迪秦EV整车检测与诊断仿真实训系统
  • 学习路之PHP--生成测试数据:fakerphp的使用
  • 《UE5_C++多人TPS完整教程》学习笔记54 ——《P55 旋转根骨骼(Rotate Root Bone)》