利用Python解析json生成PPT、xmind思维导图教程

文章目录

背景

通过调用阿里通义听悟接口,对视频进行了语音转写、智能总结等,现在需要解析返回的PPT和思维导图json文件,以可视化的形式进行呈现。关键点在于:

  • PPT生成时,注意用requests请求存放在云上的关键帧图片
  • 思维导图生成时,注意使用递归构造思维导图多叉树

部分json样例

  • 部分ppt-json样例:
json 复制代码
{
    "PptExtraction": {
      "AvailableForSummary": true,
      "KeyFrameList": [
        {
          "FileUrl": "https://prod-tingwu-paas-common-beijing.oss-cn-beijing.aliyuncs.com/tingwu/output/1897044919663278/d7da6c8d19a44e2d94c0480dd5ab2665/ppt_20240902140302/d7da6c8d19a44e2d94c0480dd5ab2665_001.png?Expires=1727849098&OSSAccessKeyId=LTAI5tMzZ1D4o1drkJN1TfCr&Signature=KWe3h6krodKWrKeLF7HA3EOJnHg%3D",
          "Start": 190,
          "Summary": "1. 今天开始学习2024年上半年信息信用项目管理课程。\n2. 立项管理是课程的第七章,重要程度高。\n3. 商务选择题通常占该章节考试总分的两分。\n4. 案例分析和论文写作之前也有考过。\n5. 论文写作的考核概率较低,不是每次考试必有。",
          "End": 33678,
          "Id": 1
        },
        {
          "FileUrl": "https://prod-tingwu-paas-common-beijing.oss-cn-beijing.aliyuncs.com/tingwu/output/1897044919663278/d7da6c8d19a44e2d94c0480dd5ab2665/ppt_20240902140302/d7da6c8d19a44e2d94c0480dd5ab2665_002.png?Expires=1727849098&OSSAccessKeyId=LTAI5tMzZ1D4o1drkJN1TfCr&Signature=a4Vtv65JzD7FAv5DwbqFTivoAPQ%3D",
          "Start": 35030,
          "Summary": "1. 立项管理是科研工作的一部分,包括项目建议、立项申请、初步研究和详细研究等阶段。\n2. 论文撰写时,可以围绕立项管理的各个阶段来组织结构,例如:项目建议与立项申请 -> 项目可研究 -> 项目评估与决策。\n3. 在立项管理过程中,需考虑项目的可行性、必要性和效益性,这是通过初研和详研来完成的。\n4. 考试可能会涉及立项管理的具体知识点,如项目建议书的作用、可研的内容和技术经济分析等。\n5. 项目评估是立项管理的重要环节,包括对项目的财务、技术和社会效益进行综合评价。",
          "End": 281654,
          "Id": 2
        },
        ...
       ]
     }
  }
  • 部分思维导图-json样例:
json 复制代码
"MindMapSummary": [
        {
          "Title": "2024年上半年信息信用项目管理课程学习摘要",
          "Topic": [
            {
              "Title": "立项管理",
              "Topic": [
                {
                  "Title": "课程内容概览",
                  "Topic": [
                    {
                      "Title": "考题类型",
                      "Topic": [
                        {
                          "Title": "商务选择题:考两分",
                          "Topic": [
                            
                          ]
                        },
                        {
                          "Title": "案例分析:历史考题",
                          "Topic": [
                            
                          ]
                        },
                        {
                          "Title": "论文写作:历史考题",
                          "Topic": [
                            
                          ]
                        }
                      ]
                    },
                    ....

PPT生成

用到的库:pptx, requests

  • 注意事项:由于通义听悟接口返回的关键帧图片列表是存放在通义公有云上的URL链接,因此需要先利用requests将关键帧图片从云上下载下来
python 复制代码
from pptx import Presentation
import json
from pptx.util import Inches
import requests

prs = Presentation()

# 需要写代码:先从json中把图片列表提取出来
# 第一步:加载json
with open('ppt.json', 'r') as f:
    data = json.load(f)
    # print(data)
# 第二步:解析json,从中提取关键帧图片
L = data['PptExtraction']['KeyFrameList']
print(len(L))

for i in range(len(L)):
    img = L[i]['FileUrl']
    # print(img)

    # 将关键帧图片嵌入到PPT中
    # 获取幻灯片页
    slide = prs.slides.add_slide(prs.slide_layouts[0])
    prs.slide_height = Inches(9)  # 设置页面高度
    prs.slide_width = Inches(16)  # 设置页面宽度

    response = requests.get(img)
    with open("key_frame/" + str(i) + ".jpg", "wb") as file:
        file.write(response.content)

    # 图片文件路径
    image_path = "key_frame/" +  str(i)  + ".jpg"

    left = Inches(0.0) 
    top = Inches(0.0)
    # width = Inches(10.0)
    # height = Inches(6.0)
    width = Inches(16.0)
    height = Inches(9.0)
    slide.shapes.add_picture(image_path, left, top, width, height)

# 保存PPT
prs.save('your_presentation.pptx')
  • 效果如下:

思维导图生成

用到的库:xmind

  • 思路:思维导图本质是一颗多叉树,里面用到了递归--->在每一层递归层中同时包含了title和topic,先将title赋给当前节点,再对topic进行递归,扩充子主题
python 复制代码
import xmind
import json

# 递归
def add_topic(xw, data):
    title = data["Title"]
    topics = data["Topic"]

    # 创建主题
    topic = xw.addSubTopic()
    topic.setTitle(title)

    # 如果存在子主题,递归增加
    if topics:
        for t in topics:
            add_topic(topic, t)

if __name__ == "__main__":
     # 第一步:加载json
    with open('play_mindmap.json', 'r') as f:
        data = json.load(f)

    workbook = xmind.load('play.xmind')
    sheet = workbook.getPrimarySheet()
    sheet.setTitle("思维导图示例")
    # root node
    root = sheet.getRootTopic()
    root.setTitle("思维导图示例")

    for topic in data['Summarization']['MindMapSummary']:
        add_topic(root, topic)

    # add_topic(root, data['Summarization']['MindMapSummary'][0])
    xmind.save(workbook)
  • 效果如下:


相关推荐
从后端到QT5 小时前
RTCP详解
服务器·音视频·实时音视频·rctp
ECC&SM96 小时前
Video_AVI_Packet(2)
笔记·音视频
_多拉不懂A梦8 小时前
FFmepg源码系列-avformat_open_input()
c++·ffmpeg·音视频
万粉变现经纪人12 小时前
何解决PyCharm中pip install安装Python报错ModuleNotFoundError: No module named ‘json’问题
python·pycharm·json·beautifulsoup·scikit-learn·matplotlib·pip
iphone10817 小时前
视频创作者如何保护自己的视频内容版权?
音视频·加密软件·视频加密·加密技术·视频安全·保护原创·知识原创
晨欣18 小时前
orjson 与 json:实战对比与选型指南(含示例)(GPT-5 回答)
gpt·json
鲁班AI21 小时前
pdf怎么转换成ppt?AI工具与传统方法深度对比
人工智能·pdf·powerpoint
音视频牛哥1 天前
Android平台RTSP播放器选型指南:从开源方案到跨平台低延迟专业SDK
android·人工智能·音视频·大牛直播sdk·android rtsp播放器·安卓rtsp播放器·安卓播放rtsp流
火山引擎边缘云1 天前
基于 DiT 大模型与字体级分割的视频字幕无痕擦除方案,助力短剧出海
音视频
欣赏你流浪^1 天前
物联网智能感知进阶:基于YOLO的琏雾系统视频分析
物联网·yolo·音视频