Pokročilé extrahování textu z prezentací v Pythonu přes Java

Přehled

Extrahování textu z prezentací je běžná, ale zásadní úloha pro vývojáře pracující s obsahem snímků. Ať už pracujete se soubory Microsoft PowerPoint ve formátu PPT nebo PPTX, nebo s prezentacemi OpenDocument (ODP), přístup k textovým datům může být klíčový pro analýzu, automatizaci, indexování nebo migraci obsahu.

Tento článek poskytuje ucelený návod, jak efektivně extrahovat text z různých formátů prezentací, včetně PPT, PPTX a ODP, pomocí Aspose.Slides pro Python přes Java. Naučíte se systematicky procházet prvky prezentace a přesně získat požadovaný textový obsah.

Extrahovat text ze snímku

Aspose.Slides pro Python přes Java poskytuje třídu SlideUtil. Tato třída nabízí několik přetížených statických metod pro extrahování veškerého textu z prezentace nebo snímku. Pro extrahování textu ze snímku v prezentaci použijte metodu SlideUtil.getAllTextBoxes. Tato metoda přijímá jako parametr objekt typu BaseSlide. Po spuštění metoda prohledá celý snímek a vrátí pole objektů typu TextFrame, přičemž zachová formátování textu.

Následující úryvek kódu extrahuje veškerý text z prvního snímku prezentace:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, SlideUtil

slide_index = 0

presentation = Presentation("demo.pptx")
try:
    slide = presentation.getSlides().get_Item(slide_index)
    text_frames = SlideUtil.getAllTextBoxes(slide)

    for text_frame in text_frames:
        for paragraph in text_frame.getParagraphs():
            for portion in paragraph.getPortions():
                portion_text = portion.getText()
                print(portion_text)

                portion_format = portion.getPortionFormat()
                font_height = portion_format.getFontHeight()
                print(font_height)

                latin_font = portion_format.getLatinFont()
                if latin_font is not None:
                    font_name = latin_font.getFontName()
                    print(font_name)
finally:
    presentation.dispose()

Extrahovat text z celé prezentace

Pro skenování textu v celé prezentaci použijte statickou metodu SlideUtil.getAllTextFrames, kterou nabízí třída SlideUtil. Přijímá dva parametry:

  1. Nejprve objekt typu Presentation, který představuje PowerPoint nebo OpenDocument prezentaci, ze které bude text extrahován.
  2. Dále hodnotu typu bool, která určuje, zda mají být při skenování textu zahrnuty i hlavní snímky (master slides).

Metoda vrací pole objektů typu TextFrame, včetně informací o formátování textu. Níže uvedený kód prohledá text a podrobnosti o formátování v prezentaci, včetně hlavních snímků.

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, SlideUtil

presentation = Presentation("demo.pptx")
try:
    include_master_slides = True
    text_frames = SlideUtil.getAllTextFrames(presentation, include_master_slides)

    for text_frame in text_frames:
        for paragraph in text_frame.getParagraphs():
            for portion in paragraph.getPortions():
                portion_text = portion.getText()
                print(portion_text)

                portion_format = portion.getPortionFormat()
                font_height = portion_format.getFontHeight()
                print(font_height)

                latin_font = portion_format.getLatinFont()
                if latin_font is not None:
                    font_name = latin_font.getFontName()
                    print(font_name)
finally:
    presentation.dispose()

Kategorizovaná a rychlá extrakce textu

Třída PresentationFactory také poskytuje metody pro extrahování veškerého textu z prezentací:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import LoadOptions, PresentationFactory, TextExtractionArrangingMode
from java.io import FileInputStream

mode = TextExtractionArrangingMode.Unarranged
load_options = LoadOptions()

# Extrahovat text ze souboru.
file_text = PresentationFactory.getInstance().getPresentationText("presentation.pptx", mode)

# Extrahovat text z proudu.
stream = FileInputStream("presentation.pptx")
try:
    stream_text = PresentationFactory.getInstance().getPresentationText(stream, mode)
finally:
    stream.close()

# Extrahovat text z proudu pomocí možností načtení.
stream_with_options = FileInputStream("presentation.pptx")
try:
    stream_text_with_options = PresentationFactory.getInstance().getPresentationText(stream_with_options, mode, load_options)
finally:
    stream_with_options.close()

Argument výčtu TextExtractionArrangingMode určuje režim uspořádání výsledků extrakce textu a může být nastaven na následující hodnoty:

  • Unarranged – surový text bez ohledu na jeho polohu na snímku.
  • Arranged – text je uspořádán ve stejném pořadí jako na snímku.

Režim Unarranged lze použít, když je kritická rychlost; je rychlejší než režim Arranged.

Třída PresentationText představuje surový text extrahovaný z prezentace. Její metoda getSlidesText vrací pole objektů typu SlideText. Každý objekt představuje text na odpovídajícím snímku. Objekt typu SlideText má následující metody:

  • getText – Text uvnitř tvarů snímku.
  • getMasterText – Text uvnitř tvarů hlavního snímku spojeného s tímto snímkem.
  • getLayoutText – Text uvnitř tvarů rozložení snímku spojeného s tímto snímkem.
  • getNotesText – Text uvnitř tvarů poznámkového snímku spojeného s tímto snímkem.
  • getCommentsText – Text v komentářích spojených s tímto snímkem.
import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import PresentationFactory, TextExtractionArrangingMode

presentation_path = "presentation.ppt"
arranging_mode = TextExtractionArrangingMode.Unarranged
presentation_text = PresentationFactory.getInstance().getPresentationText(presentation_path, arranging_mode)
first_slide_text = presentation_text.getSlidesText()[0]

print(first_slide_text.getText())
print(first_slide_text.getLayoutText())
print(first_slide_text.getMasterText())
print(first_slide_text.getNotesText())
print(first_slide_text.getCommentsText())

Často kladené otázky

Jak rychle Aspose.Slides zpracovává velké prezentace při extrakci textu?

Aspose.Slides je optimalizováno pro vysoký výkon a dokáže zpracovat i velké prezentace, což jej činí vhodným pro scénáře v reálném čase i hromadného zpracování.

Dokáže Aspose.Slides extrahovat text z tabulek a grafů v prezentacích?

Ano. Aspose.Slides může extrahovat text z mnoha prvků snímku, včetně tabulek a objektů souvisejících s grafy, takže můžete přistupovat k textovému obsahu běžných strukturových prvků prezentace.

Potřebuji speciální licenci Aspose.Slides pro extrakci textu z prezentací?

Text můžete extrahovat pomocí bezplatné zkušební verze Aspose.Slides, i když má některá omezení, například zpracování jen omezeného počtu snímků. Pro neomezené používání a zpracování větších prezentací se doporučuje zakoupit plnou licenci.