.NET におけるプレゼンテーションの高度なテキスト抽出

概要

プレゼンテーションからテキストを抽出することは、スライドコンテンツを扱う開発者にとって一般的でありながら重要な作業です。Microsoft PowerPoint の PPT または PPTX 形式、あるいは OpenDocument プレゼンテーション(ODP)を扱う場合でも、テキストデータへのアクセスと取得は、分析、 automation、インデックス作成、コンテンツ移行などの目的で重要です。

この記事では、Aspose.Slides for .NET を使用して、PPT、PPTX、ODP のさまざまなプレゼンテーション形式からテキストを効率的に抽出する方法を包括的に解説します。プレゼンテーション要素を体系的に走査し、必要なテキストコンテンツを正確に取得する方法を学べます。

スライドからテキストを抽出する

Aspose.Slides for .NET は、Aspose.Slides.Util 名前空間を提供し、その中に SlideUtil クラスがあります。このクラスは、プレゼンテーションまたはスライドからすべてのテキストを抽出するための多数のオーバーロードされた static メソッドを公開しています。プレゼンテーション内のスライドからテキストを抽出するには、GetAllTextBoxes メソッドを使用します。このメソッドは、ISlide 型のオブジェクトをパラメーターとして受け取ります。実行されると、メソッドはスライド全体を走査してテキストを検出し、ITextFrame 型のオブジェクト配列を返し、テキストの書式情報を保持します。

以下のコードスニペットは、プレゼンテーションの最初のスライドからすべてのテキストを抽出します:

int slideIndex = 0;

// プレゼンテーション ファイル (PPT、PPTX、ODP など) を表す Presentation クラスのインスタンスを作成します。
using Presentation presentation = new Presentation("demo.pptx");

// Get a reference to the slide.
ISlide slide = presentation.Slides[slideIndex];

// Get an array of text frames from the slide.
ITextFrame[] textFrames = Aspose.Slides.Util.SlideUtil.GetAllTextBoxes(slide);

// Loop through the array of the text frames.
for (int i = 0; i < textFrames.Length; i++)
{
    // 現在のテキスト フレーム内の段落をループ処理します。
    foreach (IParagraph paragraph in textFrames[i].Paragraphs)
    {
        // 現在の段落内のテキスト部分をループ処理します。
        foreach (IPortion portion in paragraph.Portions)
        {
            // 現在のテキスト部分の文字列を表示します。
            Console.WriteLine(portion.Text);

            // テキストのフォントサイズを表示します。
            Console.WriteLine(portion.PortionFormat.FontHeight);

            // テキストのフォント名を表示します。
            if (portion.PortionFormat.LatinFont != null)
                Console.WriteLine(portion.PortionFormat.LatinFont.FontName);
        }
    }
}

プレゼンテーション全体からテキストを抽出する

プレゼンテーション全体のテキストを走査するには、SlideUtil クラスが提供する GetAllTextFrames static メソッドを使用します。このメソッドは 2 つのパラメーターを受け取ります。

  1. 最初に、テキストを抽出する対象となる PowerPoint または OpenDocument プレゼンテーションを表す Presentation オブジェクト。
  2. 2 番目は、プレゼンテーションのテキストを走査する際にマスタースライドを含めるかどうかを示す Boolean 値。

メソッドは、ITextFrame 型のオブジェクト配列を返し、テキストの書式情報も含みます。以下のコードは、プレゼンテーション(マスタースライドを含む)からテキストと書式の詳細を走査します:

// プレゼンテーション ファイル (PPT、PPTX、ODP など) を表す Presentation クラスのインスタンスを作成します。
using Presentation presentation = new Presentation("demo.pptx");

// プレゼンテーション内のすべてのスライドからテキスト フレームの配列を取得します。
ITextFrame[] textFrames = Aspose.Slides.Util.SlideUtil.GetAllTextFrames(presentation, true);

// テキスト フレームの配列をループ処理します。
for (int i = 0; i < textFrames.Length; i++)
{
    // 現在のテキスト フレーム内の段落をループ処理します。
    foreach (IParagraph paragraph in textFrames[i].Paragraphs)
    {
        // 現在の段落内のテキスト部分をループ処理します。
        foreach (IPortion portion in paragraph.Portions)
        {
            // 現在のテキスト部分の文字列を表示します。
            Console.WriteLine(portion.Text);

            // テキストのフォント高さを表示します。
            Console.WriteLine(portion.PortionFormat.FontHeight);

            // テキストのフォント名を表示します。
            if (portion.PortionFormat.LatinFont != null)
                Console.WriteLine(portion.PortionFormat.LatinFont.FontName);
        }
    }
}

分類された高速テキスト抽出

PresentationFactory クラスも、プレゼンテーションからすべてのテキストを抽出する static メソッドを提供しています:

IPresentationText GetPresentationText(string file, TextExtractionArrangingMode mode);
IPresentationText GetPresentationText(Stream stream, TextExtractionArrangingMode mode);
IPresentationText GetPresentationText(Stream stream, TextExtractionArrangingMode mode, ILoadOptions options);

TextExtractionArrangingMode enum 引数は、テキスト抽出結果の整理方法を表し、次の値に設定できます。

  • Unarranged - スライド上の位置を考慮しない生テキスト。
  • Arranged - スライド上の順序と同じ順序でテキストが整理されます。

速度が重要な場合は Unarranged モードを使用できます。Arranged モードよりも高速です。

IPresentationText はプレゼンテーションから抽出された生テキストを表します。これは Aspose.Slides.Util 名前空間の SlidesText プロパティを含み、ISlideText 型のオブジェクト配列を返します。各オブジェクトは対応するスライド上のテキストを表します。ISlideText 型のオブジェクトは次のプロパティを持ちます。

  • Text - スライドのシェイプ内のテキスト。
  • MasterText - 当該スライドに関連付けられたマスタースライドのシェイプ内のテキスト。
  • LayoutText - 当該スライドに関連付けられたレイアウトスライドのシェイプ内のテキスト。
  • NotesText - 当該スライドのノートスライドのシェイプ内のテキスト。
  • CommentsText - 当該スライドに付随するコメントのテキスト。
IPresentationText text = new PresentationFactory().GetPresentationText("presentation.ppt", TextExtractionArrangingMode.Unarranged);
Console.WriteLine(text.SlidesText[0].Text);
Console.WriteLine(text.SlidesText[0].LayoutText);
Console.WriteLine(text.SlidesText[0].MasterText);
Console.WriteLine(text.SlidesText[0].NotesText);
Console.WriteLine(text.SlidesText[0].CommentsText);

FAQ

Aspose.Slides は大規模なプレゼンテーションのテキスト抽出をどの程度高速に処理できますか?

Aspose.Slides は高性能に最適化されており、非常に大きなプレゼンテーションでも効率的に処理できるため、リアルタイムやバルク処理シナリオに適しています。

Aspose.Slides はプレゼンテーション内のテーブルやチャートからテキストを抽出できますか?

はい、Aspose.Slides はテーブル、チャート、その他の複雑なスライド要素からのテキスト抽出を完全にサポートしており、すべてのテキストコンテンツに容易にアクセスして分析できます。

プレゼンテーションからテキストを抽出するために特別な Aspose.Slides ライセンスが必要ですか?

無料評価版でもテキスト抽出は可能ですが、スライド数に制限があるなどの制約があります。制限なく使用し、より大規模なプレゼンテーションを処理したい場合は、フルライセンスの購入が推奨されます。