-
Notifications
You must be signed in to change notification settings - Fork 2
Библиотеки, сервисы, API для конвертации презентаций в текст из ppt, pptx, odp
- Библиотека для создания и редактирования 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)
Больше информации можно получить из документации.
-
Существует 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)
Конвертируем в 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.")
По сути, файл 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)