Wyodrębnij tekst PDF csharp

Format pliku PDF jest popularny, ponieważ zawartość pliku nie może być łatwo modyfikowana w porównaniu z innymi formatami plików edytorów tekstu. Jednak w języku C# można wyodrębnić tekst z dokumentów PDF za pomocą Aspose.PDF for .NET API. W tym artykule przyjrzyjmy się kilku z wielu możliwości wyszukiwania i wyodrębniania tekstu z plików PDF przy użyciu języka C#. Poniżej znajduje się lista funkcji, które omówimy na tym blogu:

Wyodrębnij tekst z całego dokumentu PDF za pomocą C#

Odczytywanie treści tekstowej z dokumentu PDF jest często używaną funkcją. Korzystając z języka C#, możesz wyodrębnić cały tekst ze wszystkich stron dokumentu, wykonując poniższe czynności:

  1. Załaduj dokument PDF
  2. Utwórz obiekt TextAbsorber.
  3. Zaakceptuj pochłaniacz dla wszystkich stron
  4. Zapisz wyodrębniony tekst do pliku i zapisz go

Poniższy fragment kodu wykonuje następujące kroki i pokazuje, jak wyodrębnić tekst z całego dokumentu PDF za pomocą C#:

// Otwórz dokument PDF
Document pdfDocument = new Document(dataDir + "ExtractTextAll.pdf");
// Utwórz obiekt TextAbsorber, aby wyodrębnić tekst
TextAbsorber textAbsorber = new TextAbsorber();
// Zaakceptuj pochłaniacz dla wszystkich stron
pdfDocument.Pages.Accept(textAbsorber);
// Pobierz wyodrębniony tekst
string extractedText = textAbsorber.Text;
// Utwórz program piszący i otwórz plik
TextWriter tw = new StreamWriter(dataDir + "extracted-text.txt");
// Napisz wiersz tekstu do pliku
tw.WriteLine(extractedText);
// Zamknij strumień
tw.Close();

Wyszukaj i wyodrębnij tekst z określonej strony w formacie PDF w języku C#

Po zapoznaniu się z wyodrębnianiem tekstu na poziomie dokumentu, wyodrębnijmy tekst z określonej strony dokumentu PDF. Po prostu wykonaj poniższe kroki, aby spełnić swoje wymagania:

  1. Załaduj dokument PDF
  2. Utwórz obiekt TextAbsorber.
  3. Zaakceptuj pochłaniacz dla konkretnej strony
  4. Zapisz wyodrębniony tekst do pliku i zapisz go

Poniższy fragment kodu wykonuje następujące kroki, aby odczytać tekst z dowolnej strony pliku PDF przy użyciu języka C#:

// Otwórz dokument PDF
Document pdfDocument = new Document(dataDir + "ExtractTextAll.pdf");
// Uzyskaj dostęp do wymaganej strony w dokumencie PDF
Page page = pdfDocument.Pages[1];
// Utwórz obiekt TextAbsorber, aby wyodrębnić tekst
TextAbsorber textAbsorber = new TextAbsorber();
// Zaakceptuj pochłaniacz dla określonej strony
page.Accept(textAbsorber);
// Pobierz wyodrębniony tekst
string extractedText = textAbsorber.Text;
// Utwórz program piszący i otwórz plik
TextWriter tw = new StreamWriter(dataDir + "extracted-text.txt");
// Napisz wiersz tekstu do pliku
tw.WriteLine(extractedText);
// Zamknij strumień
tw.Close();

Wyszukaj i wyodrębnij tekst z określonego regionu strony PDF w C#

Pójdźmy o krok dalej w tej ekstrakcji tekstu. Rozważ znalezienie tekstu z określonego obszaru strony. Ważne jest, aby zrozumieć, że podstawową jednostką miary w Aspose.PDF for .NET jest punkt, gdzie 72 punkty to 1 cal. Ponadto lewy dolny róg jest uważany za początek (0,0) strony. Poniżej przedstawiono kroki, aby odczytać tekst z określonego obszaru lub sekcji strony w dokumencie PDF:

  1. Załaduj źródłowy dokument PDF
  2. Utwórz obiekt TextAbsorber.
  3. Ustaw TextSearchOptions i określ współrzędne prostokątne
  4. Zaakceptuj pochłaniacz dla konkretnej strony
  5. Zapisz wyodrębniony tekst do pliku

Poniższy fragment kodu pokazuje te kroki, aby wyodrębnić tekst z określonego regionu przy użyciu języka C#:

// Otwórz dokument
Document pdfDocument = new Document(dataDir + "ExtractTextAll.pdf");
// Utwórz obiekt TextAbsorber, aby wyodrębnić tekst
TextAbsorber absorber = new TextAbsorber();
absorber.TextSearchOptions.LimitToPageBounds = true;
absorber.TextSearchOptions.Rectangle = new Aspose.Pdf.Rectangle(100, 200, 250, 350);
// Zaakceptuj absorber na pierwszą stronę
pdfDocument.Pages[1].Accept(absorber);
// Pobierz wyodrębniony tekst
string extractedText = absorber.Text;
// Utwórz program piszący i otwórz plik
TextWriter tw = new StreamWriter(dataDir + "extracted-text.txt");
// Napisz wiersz tekstu do pliku
tw.WriteLine(extractedText);
// Zamknij strumień
tw.Close();

Wyszukaj lub wyodrębnij określony tekst z pliku PDF za pomocą wyrażeń regularnych przy użyciu języka C#

Możesz wyodrębnić określony tekst z dokumentu PDF, który pasuje do określonego wzorca. Na przykład możesz chcieć wyodrębnić określone słowa lub liczby. W tym celu musiałbyś zaprojektować wyrażenie regularne. Interfejs API użyje tego wyrażenia regularnego do znalezienia pasującego tekstu w dokumencie PDF. Poniżej przedstawiono wskazówki dotyczące wyszukiwania i wyodrębniania określonego tekstu z plików PDF:

  • Załaduj wejściowy dokument PDF
  • Utwórz obiekt TextAbsorber.
  • Zaprojektuj i ustaw wyrażenie regularne pasujące do jakiegoś tekstu
  • Przejrzyj każdy wyodrębniony fragment tekstu

Poniższy fragment kodu C# używa wyrażenia regularnego, które wyszukuje tekst zawierający 4 cyfry, na przykład 1999,2000 itd. na wszystkich stronach dokumentu.

// otwórz dokument
Document pdfDocument = new Document(dataDir + @"Test.pdf");
// utwórz obiekt TextAbsorber, aby znaleźć wszystkie wystąpienia wprowadzonej frazy wyszukiwania
TextFragmentAbsorber textFragmentAbsorber = new TextFragmentAbsorber(@"\d{4}"); //like 1999-2020                                                                                                                // set text search option to specify regular expression usage
TextSearchOptions textSearchOptions = new TextSearchOptions(true);
textFragmentAbsorber.TextSearchOptions = textSearchOptions;
// zaakceptuj pochłaniacz dla wszystkich stron
pdfDocument.Pages.Accept(textFragmentAbsorber);
// uzyskać wyodrębnione fragmenty tekstu
TextFragmentCollection textFragmentCollection = textFragmentAbsorber.TextFragments;     
// przejść przez fragmenty
foreach (TextFragment textFragment in textFragmentCollection)
{
    Console.WriteLine(textFragment.Text);
}

Wyodrębnij tekst z komórek tabeli w dokumencie PDF za pomocą C#

Wyodrębnianie tekstu z tabel na stronie PDF jest trochę inne. W poprzednich przykładach pracowaliśmy z klasą TextAbsorber, ale wyodrębnianie tekstu z tabeli jest nieco inne. Dlatego musisz wykonać poniższe kroki, aby wyodrębnić tekst z obiektów tabeli:

  1. Załaduj źródłowy plik PDF
  2. Utwórz obiekt klasy TableAbsorber.
  3. Iteruj przez AbsorbedTable
  4. Przejdź przez każdą komórkę w każdym wierszu tabeli

Poniższy fragment kodu wykonuje następujące kroki i wydajnie wyodrębnia tekst z komórek tabeli w dokumencie PDF za pomocą języka C#:

Document pdfDocument = new Document(dataDir + "Test.pdf");
TableAbsorber absorber = new TableAbsorber();
absorber.Visit(pdfDocument.Pages[1]);
foreach (AbsorbedTable table in absorber.TableList)
{
    foreach (AbsorbedRow row in table.RowList)
    {
        foreach (AbsorbedCell cell in row.CellList)
        {
            TextFragment textfragment = new TextFragment();
            TextFragmentCollection textFragmentCollection = cell.TextFragments;
            foreach (TextFragment fragment in textFragmentCollection)
            {
                Console.WriteLine(fragment.Text);
            }
        }
    }
}

Wyszukaj i wyodrębnij wyróżniony tekst z dokumentu PDF za pomocą C#

Wyróżniony tekst jest obecny jako adnotacja w plikach PDF. Zawierają zaznaczony tekst, co odróżnia je od konwencjonalnego tekstu w dokumencie. Poniższe kroki opisują, jak czytać wyróżniony tekst przy użyciu języka C#:

  1. Załaduj dokument źródłowy
  2. Przejrzyj wszystkie adnotacje
  3. Filtruj TextMarkupAnnotation
  4. Pobierz podświetlone fragmenty tekstu

Poniżej znajduje się fragment kodu oparty na powyższych krokach, którego można użyć do uzyskania podświetlonego tekstu z plików PDF:

Document doc = new Document(dataDir + "ExtractHighlightedText.pdf");
// Przejrzyj wszystkie adnotacje
foreach (Annotation annotation in doc.Pages[1].Annotations)
{
    // Filtruj tekstMarkupAdnotacja
    if (annotation is TextMarkupAnnotation)
    {
        TextMarkupAnnotation highlightedAnnotation = annotation as TextMarkupAnnotation;
        // Pobierz podświetlone fragmenty tekstu
        TextFragmentCollection collection = highlightedAnnotation.GetMarkedTextFragments();
        foreach (TextFragment tf in collection)
        {
            // Wyświetl podświetlony tekst
            Console.WriteLine(tf.Text);
        }
    }
}

Wyodrębnij tekst PDF przy niskim zużyciu pamięci przy użyciu C#

Poniżej przedstawiono dwa różne podejścia do optymalizacji zużycia pamięci podczas wyodrębniania tekstu z dokumentów PDF przy użyciu języka C#.

i) Za pomocą metody Reset() i FreeMemory().

Czasami wyodrębnianie tekstu może pochłaniać ogromną ilość pamięci i procesora. Prawdopodobnie, gdy plik wejściowy jest ogromny i zawiera dużo tekstu. Ponieważ obiekt TextFragmentAbsorber przechowuje wszystkie znalezione fragmenty tekstu w pamięci.

Dlatego rozwiązaniem, które tutaj rekomendujemy, jest wywołanie metody absorber.Reset() po przetworzeniu każdej strony. Ponadto, jeśli wykonujesz tylko operacje odczytu, możesz również zwolnić pamięć przechowywaną przez obiekty strony za pomocą metody page.FreeMemory() . Musisz więc wykonać poniższe kroki, aby wykorzystać minimalne zasoby:

  1. Załaduj źródłowy dokument PDF
  2. Określ TextEditOptions
  3. Przeczytaj TextFragment
  4. Wywołaj metodę Reset().
  5. Wywołaj metodę FreeMemory().

Poniższy fragment kodu demonstruje wyodrębnianie tekstu z dokumentów PDF przy użyciu języka C#:

Document pdfDocument = new Document(dataDir + @"ITF-TTF Manual.pdf");
TextFragmentAbsorber absorber = new TextFragmentAbsorber(new TextEditOptions(TextEditOptions.FontReplace.RemoveUnusedFonts));
foreach (Page page in pdfDocument.Pages)
{
    page.Accept(absorber);
    //Przeczytaj coś z fragmentów
    count += absorber.TextFragments.Count;
    absorber.Reset();
    page.FreeMemory();
    //GC.Collect();        
}

Przetestowaliśmy ten fragment kodu za pomocą ogromnego przykładowego pliku zawierającego 450 stron, 24500 fragmentów tekstu oraz wiele obrazów rastrowych i wektorowych. Proces zużywał zaledwie 500 MB pamięci. Inną wskazówką jest to, że możesz naładować moduł wyrzucania elementów bezużytecznych .NET, aby zmniejszyć maksymalne zużycie pamięci do około 250 MB z dodatkowym kosztem 10 sekund czasu przetwarzania.

ii) Korzystanie z wyliczania MemorySaving

Aspose.PDF for .NET API obsługuje konfigurowanie trybu oszczędzania pamięci podczas czytania tekstu z pliku PDF. Wyliczenie TextExtractionOptions.TextFormattingMode służy do optymalnego wykorzystania zasobów. Poniższe kroki podsumowują kroki, które należy wykonać w ramach tego podejścia:

  1. Załaduj źródłowy plik PDF
  2. Utwórz obiekt TextDevice.
  3. Ustaw TextExtractionOptions
  4. Wyodrębnij tekst i zapisz tekst do pliku

Poniższy fragment kodu demonstruje podejście do oszczędzania pamięci przy użyciu języka C#:

// Otwórz dokument
Document pdfDocument = new Document(dataDir + "Test.pdf");
System.Text.StringBuilder builder = new System.Text.StringBuilder();
// Ciąg do przechowywania wyodrębnionego tekstu
string extractedText = "";
foreach (Page pdfPage in pdfDocument.Pages)
{
    using (MemoryStream textStream = new MemoryStream())
    {
        // Utwórz urządzenie tekstowe
        TextDevice textDevice = new TextDevice();

        // Ustaw opcje ekstrakcji tekstu - ustaw tryb ekstrakcji tekstu (Raw lub Pure)
        TextExtractionOptions textExtOptions = new
        TextExtractionOptions(TextExtractionOptions.TextFormattingMode.MemorySaving);
        textDevice.ExtractionOptions = textExtOptions;
        // Konwertuj określoną stronę i zapisz tekst w strumieniu
        textDevice.Process(pdfPage, textStream);
        // Konwertuj określoną stronę i zapisz tekst w strumieniu
        textDevice.Process(pdfDocument.Pages[1], textStream);
        // Zamknij strumień pamięci
        textStream.Close();
        // Pobierz tekst ze strumienia pamięci
        extractedText = Encoding.Unicode.GetString(textStream.ToArray());
    }
    builder.Append(extractedText);
}
dataDir = dataDir + "Memory_Text_Extracted.txt";
// Zapisz wyodrębniony tekst w pliku tekstowym
File.WriteAllText(dataDir, builder.ToString());

Wniosek

W tym artykule zbadaliśmy kilka z wielu przydatnych przypadków użycia, istnieją nieskończone możliwości wyodrębniania tekstu z dokumentów PDF przy użyciu C# z Aspose.PDF for .NET API. Więcej informacji znajdziesz w dokumentacji interfejsu API. W przypadku jakichkolwiek pytań skontaktuj się z nami pod adresem Bezpłatne fora wsparcia.

Zobacz też