Zaawansowane wyodrębnianie tekstu z prezentacji w Python via Java

Przegląd

Wyodrębnianie tekstu z prezentacji jest powszechnym, a jednocześnie kluczowym zadaniem dla programistów pracujących z zawartością slajdów. Niezależnie od tego, czy obsługujesz pliki Microsoft PowerPoint w formacie PPT lub PPTX, czy prezentacje OpenDocument (ODP), dostęp i pobieranie danych tekstowych może być niezbędne do analizy, automatyzacji, indeksowania lub migracji treści.

Ten artykuł przedstawia kompleksowy przewodnik, jak wydajnie wyodrębniać tekst z różnych formatów prezentacji, w tym PPT, PPTX i ODP, przy użyciu Aspose.Slides for Python via Java. Dowiesz się, jak systematycznie iterować po elementach prezentacji, aby dokładnie uzyskać potrzebny tekst.

Wyodrębnianie tekstu ze slajdu

Aspose.Slides for Python via Java udostępnia klasę SlideUtil. Klasa ta zawiera kilka przeciążonych metod statycznych służących do wyodrębniania całego tekstu z prezentacji lub slajdu. Aby wyodrębnić tekst ze slajdu w prezentacji, użyj metody SlideUtil.getAllTextBoxes. Metoda ta przyjmuje jako parametr obiekt typu BaseSlide. Po wywołaniu metoda przeszukuje cały slajd w poszukiwaniu tekstu i zwraca tablicę obiektów typu TextFrame, zachowując formatowanie tekstu.

Poniższy fragment kodu wyodrębnia cały tekst z pierwszego slajdu prezentacji:

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()

Wyodrębnianie tekstu z prezentacji

Aby przeszukać tekst w całej prezentacji, użyj statycznej metody SlideUtil.getAllTextFrames udostępnionej przez klasę SlideUtil. Przyjmuje ona dwa parametry:

  1. Po pierwsze, obiekt Presentation reprezentujący prezentację PowerPoint lub OpenDocument, z której ma zostać wyodrębniony tekst.
  2. Po drugie, wartość typu bool wskazująca, czy podczas skanowania tekstu mają być uwzględnione slajdy wzorcowe (master slides).

Metoda zwraca tablicę obiektów typu TextFrame, zawierającą informacje o formatowaniu tekstu. Poniższy kod skanuje tekst i szczegóły formatowania w prezentacji, uwzględniając slajdy wzorcowe.

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()

Kategoryzowane i szybkie wyodrębnianie tekstu

Klasa PresentationFactory również oferuje metody do wyodrębniania całego tekstu z prezentacji:

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()

# Wyodrębnij tekst z pliku.
file_text = PresentationFactory.getInstance().getPresentationText("presentation.pptx", mode)

# Wyodrębnij tekst ze strumienia.
stream = FileInputStream("presentation.pptx")
try:
    stream_text = PresentationFactory.getInstance().getPresentationText(stream, mode)
finally:
    stream.close()

# Wyodrębnij tekst ze strumienia przy użyciu opcji ładowania.
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 wyliczeniowy TextExtractionArrangingMode określa tryb organizacji wyniku wyodrębniania tekstu i może przyjmować następujące wartości:

  • Unarranged – surowy tekst bez uwzględnienia jego pozycji na slajdzie.
  • Arranged – tekst ułożony w tej samej kolejności, co na slajdzie.

Tryb nieuporządkowany (Unarranged) można używać, gdy priorytetem jest szybkość; jest szybszy niż tryb uporządkowany (Arranged).

PresentationText reprezentuje surowy tekst wyodrębniony z prezentacji. Jego metoda getSlidesText zwraca tablicę obiektów typu SlideText. Każdy obiekt reprezentuje tekst na odpowiednim slajdzie. Obiekt typu SlideText posiada następujące metody:

  • getText – tekst znajdujący się w kształtach slajdu.
  • getMasterText – tekst znajdujący się w kształtach slajdu wzorcowego powiązanego z danym slajdem.
  • getLayoutText – tekst znajdujący się w kształtach slajdu układu powiązanego z danym slajdem.
  • getNotesText – tekst znajdujący się w kształtach notatek powiązanych z danym slajdem.
  • getCommentsText – tekst znajdujący się w komentarzach powiązanych z danym slajdem.
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())

FAQ

Jak szybko Aspose.Slides przetwarza duże prezentacje podczas wyodrębniania tekstu?

Aspose.Slides jest zoptymalizowany pod kątem wysokiej wydajności i może przetwarzać nawet duże prezentacje, co czyni go odpowiednim do scenariuszy przetwarzania w czasie rzeczywistym lub masowego.

Czy Aspose.Slides może wyodrębniać tekst z tabel i wykresów w prezentacjach?

Tak. Aspose.Slides może wyodrębniać tekst z wielu elementów slajdu, w tym z tabel i obiektów powiązanych z wykresami, co umożliwia dostęp i analizę treści tekstowych w typowych strukturach prezentacji.

Czy potrzebna jest specjalna licencja Aspose.Slides, aby wyodrębniać tekst z prezentacji?

Możesz wyodrębniać tekst przy użyciu wersji próbnej Aspose.Slides, choć będzie ona miała pewne ograniczenia, takie jak przetwarzanie tylko ograniczonej liczby slajdów. Dla nieograniczonego użytku i obsługi większych prezentacji zaleca się zakup pełnej licencji.