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

背景

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

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

部分json样例

  • 部分ppt-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样例:
"MindMapSummary": [
        {
          "Title": "2024年上半年信息信用项目管理课程学习摘要",
          "Topic": [
            {
              "Title": "立项管理",
              "Topic": [
                {
                  "Title": "课程内容概览",
                  "Topic": [
                    {
                      "Title": "考题类型",
                      "Topic": [
                        {
                          "Title": "商务选择题:考两分",
                          "Topic": [
                            
                          ]
                        },
                        {
                          "Title": "案例分析:历史考题",
                          "Topic": [
                            
                          ]
                        },
                        {
                          "Title": "论文写作:历史考题",
                          "Topic": [
                            
                          ]
                        }
                      ]
                    },
                    ....

PPT生成

用到的库:pptx, requests

  • 注意事项:由于通义听悟接口返回的关键帧图片列表是存放在通义公有云上的URL链接,因此需要先利用requests将关键帧图片从云上下载下来
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进行递归,扩充子主题
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)

  • 效果如下:

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值