Skip to content

Библиотеки, сервисы, API для конвертации презентаций в текст из ppt, pptx, odp

marilisok edited this page Oct 24, 2020 · 6 revisions

Из pptx в текст

  1. Библиотека для создания и редактирования pptx: python-pptx.

Извлечь текст из слайда можно следующим образом:

  • посмотреть на все слайды и каждую форму на слайде

  • если есть фигура с атрибутом текста, распечатать shape.text

    from pptx import Presentation
    
    prs = Presentation("file.pptx")
    
    for slide in prs.slides:
      for shape in slide.shapes:
          if hasattr(shape, "text"):
              print(shape.text)
    

Больше информации можно получить из документации.

  1. Существует API для конвертации PPTX презентаций в txt. Установки данного API:

    pip install cloudmersive-convert-api-client
    

После установки. Мы можем написать функцию конвертации PPTX в txt. Пример приведен ниже:

from __future__ import print_function
import time
import cloudmersive_convert_api_client
from cloudmersive_convert_api_client.rest import ApiException
from pprint import pprint

# Configure API key authorization: Apikey
configuration = cloudmersive_convert_api_client.Configuration()
configuration.api_key['Apikey'] = 'YOUR_API_KEY'

# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed
configuration.api_key_prefix['Apikey'] = 'Bearer'

# create an instance of the API class
api_instance = cloudmersive_convert_api_client.ConvertDocumentApi(cloudmersive_convert_api_client.ApiClient(configuration))
input_file = '/path/to/file' # file | Input file to perform the operation on.

try:
    # Convert PowerPoint PPTX Presentation to Text (txt)
    api_response = api_instance.convert_document_pptx_to_txt(input_file)
    print(api_response)

except ApiException as e:
    print("Exception when calling ConvertDocumentApi->convert_document_pptx_to_txt: %s\n" % e)

Из ppt в текст

Конвертируем в pptx c помощью кода описанного ниже, чтобы использовать библиотеку и api описанные выше:

# Instantiate a Presentation object that represents a PPTX file
pres= self.Presentation
pres = pres(self.dataDir + "Presentation1.pptx")

# Saving the PPTX presentation to PPTX format
save_format = self.SaveFormat
pres.save(self.dataDir + "Aspose.pptx", save_format.Pptx)
print("Document has been converted, please check the output file.")

Из odp в текст

По сути, файл OpenDocument - это просто zip-архив, но с другим расширением. Файлы в zip-файле - это в основном файлы XML, например content.xml, settings.xml и styles.xml.

По сути, нам просто нужны два стандартных модуля python для извлечения данных из файла OpenDocument: zipfile для обработки сжатия zip и xml.parsers.expat (или другой модуль синтаксического анализатора xml) для разбора xml. Пример с файлом электронной таблицы pelican.ods выглядит следующим образом:

# import the needed modules
import zipfile
import xml.parsers.expat

# get content xml data from OpenDocument file
ziparchive = zipfile.ZipFile("pelican.ods", "r")
xmldata = ziparchive.read("content.xml")
ziparchive.close()

class Element(list):

    def __init__(self, name, attrs):
        self.name = name
        self.attrs = attrs


class TreeBuilder:

    def __init__(self):
        self.root = Element("root", None)
        self.path = [self.root]

    def start_element(self, name, attrs):
        element = Element(name, attrs)
        self.path[-1].append(element)
        self.path.append(element)

    def end_element(self, name):
        assert name == self.path[-1].name
        self.path.pop()

    def char_data(self, data):
        self.path[-1].append(data)

# create parser and parsehandler
parser = xml.parsers.expat.ParserCreate()
treebuilder = TreeBuilder()

# assign the handler functions
parser.StartElementHandler  = treebuilder.start_element
parser.EndElementHandler    = treebuilder.end_element
parser.CharacterDataHandler = treebuilder.char_data

# parse the data
 parser.Parse(xmldata, True)

После импорта модулей zipfile и xml.parsers.expat мы открываем файл OpenDocument через фильтр zipfile и извлекаем XML-данные из content.xml.

Затем нам нужно проанализировать данные XML и сохранить их элементы. Сначала определяется элемент класса для хранения имени, атрибутов и содержимого (обратите внимание, что это подкласс списка) элементов XML. Функции обработчика синтаксического анализа XML - это методы класса TreeBuilder, который также собирает все дерево XML в корне своего атрибута во время синтаксического анализа. Сам анализ инициируется parser.Parse (xmldata, True).

На этом этапе анализируется весь поток XML, и структура сохраняется в treebuilder.root и доступна из нее. Например, в следующем коде мы определяем функцию showtree и вызываем ее для визуализации представления в виде дерева с отступом имен элементов и символьных данных:

def showtree(node, prefix=""):
    print prefix, node.name
    for e in node:
        if isinstance(e, Element):
            showtree(e, prefix + "  ")
        else:
            print prefix + "  ", e

showtree(treebuilder.root)

Ссылки на источники:

  1. https://cloudmersive.medium.com/how-to-convert-a-powerpoint-pptx-to-text-txt-in-python-e1edb86bbebe

  2. https://stackoverflow.com/questions/39418620/extracting-text-from-multiple-powerpoint-files-using-python/51905465

  3. https://docs.aspose.com/slides/java/converting-ppt-to-pptx-in-python/#:~:text=Python%20Code,to%20PPTX%20format%20save_format%20%3D%20self.

  4. https://www.stefaanlippens.net/opendocumentpython/

  5. https://stackoverflow.com/questions/40818692/get-the-title-of-slides-of-pptx-file-using-python