Python实现PPT转化为Word和OCR识别

本文详细介绍了如何使用Python的库如python-pptx, python-docx, pytesseract等将PPT内容包括文字和图片转换成Word文档,并探讨了利用百度API和tesseract进行OCR识别的技巧,以及注意事项。
部署运行你感兴趣的模型镜像

一、Python安装和卸载库的方法

1.1 安装

在搜索栏搜索cmd,然后输入pip install +库名字,举个例子,需要安装python-pptx,那就输入 pip install python-docx
在这里插入图片描述

1.2 卸载

在搜索栏搜索cmd,然后输入pip uninstall +库名字,举个例子,需要卸载python-pptx,那就输入 pip uninstall python-docx

二、工具

我所使用的是pycharm,个人感觉比较好用。
下载配置教程可点击这里
在这里插入图片描述

三、将PPT内容转化为Word

3.1 将PPT文本框里的文字转化为Word

3.1.1 需要的库

所需要下载的库为:python-pptxpython-docx两个。

3.1.2 实现代码

from pptx import Presentation
from docx import Document

wordfile = Document()
# 给定ppt文件所在的路径
filepath = r'E:\vs\w.pptx'
pptx = Presentation(filepath)
# 遍历ppt文件的所有幻灯片页
for slide in pptx.slides:
    # 遍历幻灯片页的所有形状
    for shape in slide.shapes:
    # 判断形状是否含有文本框,如果含有则顺序运行代码
        if shape.has_text_frame:
            # 获取文本框
            text_frame = shape.text_frame
            # 遍历文本框中的所有段落
            for paragraph in text_frame.paragraphs:
                # 将文本框中的段落文字写入word中
                wordfile.add_paragraph(paragraph.text)
#word文档存放的路径
save_path = r'E:\vs\w.docx'
wordfile.save(save_path)

3.1.3 具体解释

具体的解释可以点击这里
或者这一个
需要注意的地方就是里面的Document后面的*要去掉,要不然会报错,还有在wordfile.add_paragraph(paragraph.text这一句中少了)

3.2将PPT的图片也输出出来

3.2.1 需要的库

所需要下载的库为:python-pptx

3.2.2 实现代码

如果有图片的话,会直接存放当前Pycharm的项目文件夹之中。

from pptx import Presentation
from pptx.shapes.picture import Picture

prs = Presentation("E:\k\w.pptx")#这是你ppt的路径
index = 1
#读取幻灯片的每一页
for slide in prs.slides:
    # 读取每一板块
    for shape in slide.shapes:
        # print(dir(shape))
        #是否有文字框
        if shape.has_text_frame:
            #读文字框的每一段落
            for paragraph in shape.text_frame.paragraphs:
                if paragraph.text:
                    # 输出段落文字,也有一些属性,可以用dir查看
                    # print(dir(paragraph))
                    print(paragraph.text)
        #是否有表格
        elif shape.has_table:
            one_table_data = []
            for row in shape.table.rows:  # 读每行
                row_data = []
                for cell in row.cells:  # 读一行中的所有单元格
                    c = cell.text
                    row_data.append(c)
                one_table_data.append(row_data)  # 把每一行存入表
            #用二维列表输出表格行和列的数据
            print(one_table_data)
        # 是否有图片
        elif isinstance(shape, Picture):
            #shape.image.blob:二进制图像字节流,写入图像文件
            with open(f'{index}.jpg', 'wb') as f:
                f.write(shape.image.blob)
                index += 1

四、利用OCR将图片信息存放在Word里

4.1 使用百度的api

4.1.1 需要的库

所需要下载的库为:baidu-aippython-docx两个。

4.1.2 实现代码

# 从相应的aip导入AipOcr模块
from aip import AipOcr
from docx import Document


wordfile = Document()
# 输入凭证
APP_ID = "19307867"
API_Key = "HM1UDlzRPrr7TE6xw9YHDSnZ"
Secret_Key = "6jUGVGRLMrbByWz0vPs5w5NOS8m6GMOl"
aipOcr = AipOcr(APP_ID, API_Key, Secret_Key)

# 输入资源
filePath = r"D:\pythonProject"
for i in range(1, 499):
    filePath1 = filePath + "\\" + str(i) + ".jpg" # 最好是jpg,名称统一
    image = open(filePath1, "rb").read()
    # 接通ocr接口
    result = aipOcr.basicGeneral(image)
    # 输出
    mywords = result["words_result"]
    for i in range(len(mywords)):
        print(mywords[i]["words"])
        wordfile.add_paragraph(mywords[i]["words"])

save_path = r'E:\vs\w.docx'
wordfile.save(save_path)

4.1.3 具体解释

具体解释点击这里

4.1.4 存在的问题

这个是直接调用api的,调用多次的话就会失效,需要过一段时间才可以再次调用。所以,需要大批量的识别的话,不建议这种方式。

4.2 基于tesseract的OCR识别

4.2.1 需要的库和软件

所需要下载的库为:python-pptxpytesseractpillow
所需要下载的软件为 tesseract
具体安装和配置方法参考其他博主

4.2.2 实现代码

from PIL import Image
import pytesseract
import pptx

image = Image.open(r'2.jpg')#打开图片
result = pytesseract.image_to_string(image,lang='eng')#使用简体中文字库识别图片并返回结果
print(result)#打印识别的图片内容

4.2.3 具体解释

Python3使用 pytesseract 进行图片识别
Python3.6实现图片转文字

4.2.4 存在的问题

这一个方法识别率刚好不符合我的要求,因为它不可以很好的识别出图片里面数字的正负。

4.3 一些另外的方法

4.3.1 需要安装的库

所需要下载的库为:requestspython-docx(要转化为word才需要)。

4.3.2 实现代码

import requests
import base64
from docx import Document


wordfile = Document()

def ocr(img_path: str) -> list:
    '''
    根据图片路径,将图片转为文字,返回识别到的字符串列表

    '''
    # 请求头
    headers = {
        'Host': 'cloud.baidu.com',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36 Edg/89.0.774.76',
        'Accept': '*/*',
        'Origin': 'https://cloud.baidu.com',
        'Sec-Fetch-Site': 'same-origin',
        'Sec-Fetch-Mode': 'cors',
        'Sec-Fetch-Dest': 'empty',
        'Referer': 'https://cloud.baidu.com/product/ocr/general',
        'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
    }
    # 打开图片并对其使用 base64 编码
    with open(img_path, 'rb') as f:
        img = base64.b64encode(f.read())
    data = {
        'image': 'data:image/jpeg;base64,'+str(img)[2:-1],
        'image_url': '',
        'type': 'https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic',
        'detect_direction': 'false'
    }
    # 开始调用 ocr 的 api
    response = requests.post(
        'https://cloud.baidu.com/aidemo', headers=headers, data=data)

    # 设置一个空的列表,后面用来存储识别到的字符串
    ocr_text = []
    result = response.json()['data']
    if not result.get('words_result'):
        return []

    # 将识别的字符串添加到列表里面
    for r in result['words_result']:
        text = r['words'].strip()
        ocr_text.append("  ")
        ocr_text.append(text)
    wordfile.add_paragraph(ocr_text)
    # 返回字符串列表
    return ocr_text


'''
img_path 里面填图片路径,这里分两种情况讨论:
第一种:假设你的代码跟图片是在同一个文件夹,那么只需要填文件名,例如 test1.jpg (test1.jpg 是图片文件名)
第二种:假设你的图片全路径是 D:/img/test1.jpg ,那么你需要填 D:/img/test1.jpg
'''

for i in range(300, 400):
    img_path10 = str(i) + ".jpg"
    content = "".join(ocr(img_path10))
    print(content)

# img_path = '2.jpg'
# # content 是识别后得到的结果
# content = "".join(ocr(img_path))
# # 输出结果
# print(content)
save_path = r'E:\vs\前400.docx'
wordfile.save(save_path)

4.3.3 具体解释

使用Python快速实现图片文字识别(30行代码)

4.3.4 存在的问题

这一个实质上也是在调用api接口,所以调用多次后会失效,需要过一阵子才可以继续使用。

五、注意点

Python的解释器最好选择你安装Python路径下面的python.exe,这样可以避免你安装了一些库,但是你编译的时候显示找不到库的问题。
在这里插入图片描述
--------------------------------下面未整理------------------------------
出现的问题

Python在终端通过pip安装好包以后,在Pycharm中依然无法使用的解决办法
在这里插入图片描述

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

<think>好的,我现在需要回答用户关于如何使用Python处理PPT、ExcelPDF文件的问题。用户提到了预处理,可能包括读取、解析或转换这些文件的内容。我需要先回忆相关的Python库,并确保信息准确。 首先,针对Excel处理,常用的库是pandasopenpyxl。Pandas可以方便地读取写入Excel文件,进行数据清洗预处理。例如,用户可能需要处理缺失值或重复数据,这时候pandas的函数如dropna()或drop_duplicates()会很实用。另外,xlrdxlwt库曾经也很流行,但xlrd现在主要支持.xls格式,而openpyxl更适合.xlsx格式。所以应该推荐pandas配合openpyxl作为Excel的处理工具。 接下来是PDF文件。PDF的解析比较复杂,因为PDF可能有多种格式布局。PyMuPDF(fitz)是一个强大的库,可以提取文本图片,还能处理加密的PDF。pdfplumber则适合更精细的文本提取,比如表格数据。用户如果需要进行OCR识别,可能需要用到pdf2image将PDF转换为图片,再用Tesseract处理。此外,用户提到的magic-pdf库在引用[2]中出现过,可能是一个处理复杂PDF的工具,但我不太熟悉,可能需要查阅相关资料。不过根据引用[2],magic-pdf的安装需要特定步骤,可能需要额外说明。 然后是PPT文件处理。python-pptx是处理PPT的主要库,可以读取创建PPTX文件。但需要注意的是,它可能不支持旧版的.ppt格式,主要针对.pptx。如果需要处理旧版文件,可能需要先转换为.pptx,或者使用其他工具。对于PPT的预处理,可能需要提取文本、幻灯片布局或图像,这些python-pptx都能支持。例如,遍历幻灯片中的形状,提取文字内容。 现在需要确保推荐的库都是当前广泛使用且维护良好的。例如,pdfminer虽然曾经流行,但现在可能被pdfplumber取代,后者更友好。PyMuPDF的性能较好,适合处理大文件。此外,用户可能需要进行格式转换,比如PDF转Word,这可能需要库如pdf2docx,但需要确认其可靠性。 用户的需求是预处理,可能包括数据清洗、格式转换、内容提取等。对于Excel,除了读取数据,还可能涉及数据类型转换、去重、填充缺失值等。对于PDF,可能涉及文本提取、表格抽取、加密处理等。对于PPT,可能需要提取文字、图片,或修改布局。 还要考虑用户可能的进阶需求,比如自动化批量处理,这可以通过Python的os或pathlib库实现文件遍历。同时,引用[3]中提到了GUI工具,用户可能有兴趣了解如何将处理步骤集到图形界面中,但当前问题可能集中在预处理方法,所以可能不需要深入讨论GUI,但可以简要提及。 需要验证每个库的安装方法基本用法是否正确。例如,python-pptx的安装是pip install python-pptx,而pandasopenpyxl通常一起安装。对于PDF处理,PyMuPDF安装是pip install PyMuPDF,而pdfplumber则是pip install pdfplumber。 最后,生相关问题时要围绕用户的问题,可能涉及各文件类型的深入处理、性能优化、错误处理等。例如,如何处理加密的PDF,或者如何提取PPT中的图表数据。 总结步骤: 1. 分三个部分:Excel、PDF、PPT,分别介绍常用库示例。 2. 每个部分给出安装命令代码片段。 3. 确保代码示例正确,比如使用pandas读取Excel,使用python-pptx读取PPT。 4. 引用相关的引用资料,比如引用[1]提到pandas,引用[2]提到magic-pdf。 5. 生相关问题,涵盖各个文件类型处理中的常见问题。</think>### Python处理PPT、Excel、PDF文件的预处理方法 #### 一、Excel文件处理 常用库:$pandas$(数据清洗)、$openpyxl$(读写.xlsx)、$xlrd/xlwt$(旧版.xls) ```python import pandas as pd # 读取Excel并预处理 df = pd.read_excel("data.xlsx", engine=&#39;openpyxl&#39;) df.fillna(0, inplace=True) # 填充缺失值 df.to_excel("cleaned_data.xlsx", index=False) ``` #### 二、PDF文件处理 1. **文本提取**:$pdfplumber$(精确提取)、$PyMuPDF$(高性能) ```python import pdfplumber with pdfplumber.open("doc.pdf") as pdf: text = "".join(page.extract_text() for page in pdf.pages) ``` 2. **表格提取**:$camelot$ 或 $tabula-py$ 3. **格式转换**:$pdf2docx$(转Word)、$pdf2image$(转图片)[^2] ```python from pdf2docx import Converter cv = Converter("input.pdf") cv.convert("output.docx", start=0, end=5) cv.close() ``` #### 三、PPT文件处理 核心库:$python-pptx$(读写.pptx) ```python from pptx import Presentation prs = Presentation("slide.pptx") for slide in prs.slides: for shape in slide.shapes: if hasattr(shape, "text"): print(shape.text) ``` ### 预处理关键技术点 1. **数据清洗**:处理缺失值($df.dropna()$)、重复值($df.drop_duplicates()$) 2. **格式转换**:PDF转结构化数据、PPT转Markdown 3. **内容解析**:提取PDF表格时需处理合并单元格问题[^2]
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值