استخراج پیشرفته متن از ارائه‌ها در C++

بررسی اجمالی

استخراج متن از ارائه‌ها یک کار رایج اما ضروری برای توسعه‌دهندگانی است که با محتوای اسلایدها کار می‌کنند. چه با فایل‌های Microsoft PowerPoint در فرمت PPT یا PPTX، چه با ارائه‌های OpenDocument (ODP) سر و کار داشته باشید، دسترسی و بازیابی داده‌های متنی می‌تواند برای تجزیه و تحلیل، خودکارسازی، ایندکس‌گذاری یا مقاصد مهاجرت محتوا حیاتی باشد.

این مقاله راهنمای کاملی برای نحوه استخراج مؤثر متن از فرمت‌های مختلف ارائه، شامل PPT، PPTX و ODP، با استفاده از Aspose.Slides برای C++ ارائه می‌دهد. شما می‌آموزید چگونه به صورت سیستماتیک در عناصر ارائه پیمایش کنید تا به طور دقیق محتوای متنی مورد نیاز خود را بازیابی کنید.

استخراج متن از اسلاید

Aspose.Slides for C++ یک فضای نام Aspose.Slides.Util فراهم می‌کند که شامل کلاس SlideUtil است. این کلاس چندین متد ایستا با بارگذاری (overloaded) برای استخراج تمام متن از یک ارائه یا اسلاید در دسترس قرار می‌دهد. برای استخراج متن از یک اسلاید در یک ارائه، از متد GetAllTextBoxes استفاده کنید. این متد یک شی از نوع IBaseSlide را به عنوان پارامتر می‌پذیرد. هنگام اجرا، این متد کل اسلاید را برای متن اسکن می‌کند و آرایه‌ای از اشیاء نوع ITextFrame را باز می‌گرداند که قالب‌بندی متن را حفظ می‌کند.

قطعه کد زیر تمام متن اسلاید اول ارائه را استخراج می‌کند:

auto slideIndex = 0;

auto presentation = System::MakeObject<Presentation>(u"demo.pptx");
auto slide = presentation->get_Slide(slideIndex);

auto textFrames = Util::SlideUtil::GetAllTextBoxes(slide);

for (const auto& textFrame : textFrames)
{
    for (const auto& paragraph : textFrame->get_Paragraphs())
    {
        for (const auto& portion : paragraph->get_Portions())
        {
            auto portionText = portion->get_Text();
            Console::WriteLine(portionText);

            auto portionFormat = portion->get_PortionFormat();
            auto fontHeight = portionFormat->get_FontHeight();
            Console::WriteLine(fontHeight);

            auto latinFont = portionFormat->get_LatinFont();
            if (latinFont != nullptr)
            {
                auto fontName = latinFont->get_FontName();
                Console::WriteLine(fontName);
            }
        }
    }
}

presentation->Dispose();

استخراج متن از ارائه

برای اسکن متن از کل ارائه، از متد ایستا GetAllTextFrames که توسط کلاس SlideUtil ارائه می‌شود، استفاده کنید. این متد دو پارامتر می‌گیرد:

  1. اولین پارامتر، شیء IPresentation است که نمایانگر یک ارائه PowerPoint یا OpenDocument است که متن از آن استخراج می‌شود.
  2. دومین پارامتر، مقدار Boolean است که تعیین می‌کند آیا اسلایدهای اصلی (master) هنگام اسکن متن از ارائه شامل شوند یا خیر.

این متد آرایه‌ای از اشیاء نوع ITextFrame را بر می‌گرداند که شامل اطلاعات قالب‌بندی متن است. کد زیر متن و جزئیات قالب‌بندی را از یک ارائه، شامل اسلایدهای اصلی، اسکن می‌کند.

auto presentation = System::MakeObject<Presentation>(u"demo.pptx");

auto includeMasterSlides = true;
auto textFrames = Util::SlideUtil::GetAllTextFrames(presentation, includeMasterSlides);

for (const auto& textFrame : textFrames)
{
    for (const auto& paragraph : textFrame->get_Paragraphs())
    {
        for (const auto& portion : paragraph->get_Portions())
        {
            auto portionText = portion->get_Text();
            Console::WriteLine(portionText);

            auto portionFormat = portion->get_PortionFormat();
            auto fontHeight = portionFormat->get_FontHeight();
            Console::WriteLine(fontHeight);

            auto latinFont = portionFormat->get_LatinFont();
            if (latinFont != nullptr)
            {
                auto fontName = latinFont->get_FontName();
                Console::WriteLine(fontName);
            }
        }
    }
}

presentation->Dispose();

استخراج متن دسته‌بندی‌شده و سریع

کلاس PresentationFactory همچنین متدهایی برای استخراج تمام متن از ارائه‌ها فراهم می‌کند:

System::SharedPtr<IPresentationText> GetPresentationText(System::String file, TextExtractionArrangingMode mode);
System::SharedPtr<IPresentationText> GetPresentationText(System::SharedPtr<System::IO::Stream> stream, TextExtractionArrangingMode mode);
System::SharedPtr<IPresentationText> GetPresentationText(System::SharedPtr<System::IO::Stream> stream, TextExtractionArrangingMode mode, System::SharedPtr<ILoadOptions> options);

آرگومان enum TextExtractionArrangingMode حالت سازماندهی نتایج استخراج متن را مشخص می‌کند و می‌تواند به مقادیر زیر تنظیم شود:

  • Unarranged - متن خام بدون در نظر گرفتن موقعیت آن در اسلاید.
  • Arranged - متن به همان ترتیب که در اسلید قرار دارد، سازماندهی می‌شود.

حالت بدون سازماندهی (Unarranged) می‌تواند زمانی استفاده شود که سرعت حیاتی است؛ این حالت از حالت سازماندهی‌شده (Arranged) سریع‌تر است.

IPresentationText متن خام استخراج‌شده از ارائه را نشان می‌دهد. متد get_SlidesText() آن آرایه‌ای از اشیاء نوع ISlideText را بر می‌گرداند. هر شیء متن اسلاید مربوطه را نمایندگی می‌کند. شیء نوع ISlideText دارای متدهای زیر است:

  • get_Text() - متن داخل شکل‌های اسلاید.
  • get_MasterText() - متن داخل شکل‌های اسلاید اصلی (master) مرتبط با این اسلاید.
  • get_LayoutText() - متن داخل شکل‌های اسلاید چیدمان (layout) مرتبط با این اسلاید.
  • get_NotesText() - متن داخل شکل‌های اسلاید یادداشت‌ها (notes) مرتبط با این اسلاید.
  • get_CommentsText() - متن داخل نظرات (comments) مرتبط با این اسلاید.
auto presentationPath = u"presentation.ppt";
auto arrangingMode = TextExtractionArrangingMode::Unarranged;
auto presentationText = PresentationFactory::get_Instance()->GetPresentationText(presentationPath, arrangingMode);
auto firstSlideText = presentationText->get_SlidesText()[0];

Console::WriteLine(firstSlideText->get_Text());
Console::WriteLine(firstSlideText->get_LayoutText());
Console::WriteLine(firstSlideText->get_MasterText());
Console::WriteLine(firstSlideText->get_NotesText());
Console::WriteLine(firstSlideText->get_CommentsText());

پرسش‌های متداول

سرعت پردازش Aspose.Slides برای ارائه‌های بزرگ در هنگام استخراج متن چقدر است؟

Aspose.Slides برای عملکرد بالا بهینه‌سازی شده و می‌تواند حتی ارائه‌های بزرگ را پردازش کند، که آن را برای سناریوهای پردازش زمان واقعی یا دسته‌ای مناسب می‌سازد.

آیا Aspose.Slides می‌تواند متن را از جدول‌ها و نمودارها درون ارائه‌ها استخراج کند؟

بله. Aspose.Slides می‌تواند متن را از بسیاری از عناصر اسلاید، از جمله جدول‌ها و اشیای مرتبط با نمودارها استخراج کند، بنابراین می‌توانید به محتوای متنی در ساختارهای رایج ارائه دسترسی داشته و آن را تجزیه و تحلیل کنید.

آیا برای استخراج متن از ارائه‌ها به مجوز خاص Aspose.Slides نیاز دارم؟

شما می‌توانید با نسخه آزمایشی رایگان Aspose.Slides متن را استخراج کنید، اگرچه این نسخه دارای محدودیت‌های خاص خواهد بود، مانند پردازش تنها تعداد محدودی اسلاید. برای استفاده بدون محدودیت و برای پردازش ارائه‌های بزرگ‌تر، خرید یک لایسنس کامل توصیه می‌شود.