2023年5月5日 星期五

甚麼是 GPT 分詞器 Tokenizer

甚麼是 GPT 分詞器 Tokenizer

GPT Tokenizer 是一個專門用於 Generative Pre-trained Transformer(GPT)模型的分詞器(Tokenizer)。它將文本輸入分解為一系列單詞、子詞或字符,稱為 tokens。這些 tokens 是 GPT 模型進行自然語言處理任務時的基本輸入單位。在 GPT 模型中,文本的表示和生成 (可以說 GPT 的輸入與輸出) 都是基於這些 tokens 進行的。

GPT Tokenizer 的具體實現基於 Byte Pair Encoding(BPE)算法。BPE 是一種無監督的文本壓縮算法,可以將文本中的頻繁出現的字符序列合併為單個 tokens。該算法根據字符在文本中出現的頻率將字符進行聚合,最終生成一個詞彙表(vocabulary),其中包括單詞、子詞和字符。

GPT Tokenizer 的主要用途如下:

  1. 文本預處理:在將文本輸入 GPT 模型之前,需要使用 GPT Tokenizer 對文本進行預處理,將其轉換為一系列 tokens。這些 tokens 是 GPT 模型接受的輸入格式。

  2. 文本生成:當 GPT 模型生成文本時,它實際上是生成一系列 tokens。GPT Tokenizer 可以將這些生成的 tokens 轉換回可讀的文本格式。

  3. 計算 token 使用量:在使用 GPT 模型進行文本生成時,我們需要控制生成的 token 數量,以避免過長的輸出或超出模型的最大序列長度。GPT Tokenizer 可以幫助我們計算輸入文本中的 token 數量,以便我們確定生成過程中的限制條件。

總之,GPT Tokenizer 是 GPT 模型進行文本表示、生成和相關計算的重要組件。它可以幫助我們將文本轉換為 GPT 模型所需的格式,並將生成的 tokens 轉換回可讀的文本。

例如,當輸入了這串文字

This library is licensed CC0, in the public domain.

經過 GPT 分詞器 Tokenizer 處理之後,將會分析出這串文字共有 51 個字元,並且將會轉換成為 12 Token;而原先的文字將會如下圖不同顏色區塊,切割成為不同的 Token。

Token IDs(或 Token Indices)是指將 token(單詞、子詞或字符)映射到一個唯一的整數標識符。每個 token 在模型的詞彙表中都有一個相應的 ID。Token IDs 是模型內部使用的一種表示形式,有助於模型更有效地處理和學習文本信息。

當我們使用分詞器(如 GPT Tokenizer)將文本轉換為 token 時,下一步是將這些 token 轉換為 token IDs。這樣,模型可以根據這些 ID 進行文本信息的處理和學習。在訓練過程中,這些 token IDs 會被轉換成 token Embedding,進一步捕捉詞彙的語義信息。

了解了 GPT 分詞器 Tokenizer 是什麼之後,當在進行 GPT Prompt / Completion 或者 Embedding API 進階應用呼叫的後,將會顯得相當有幫助的。

建立可以使用 GPT 分詞器 Tokenizer 的測試專案

為了簡化測試用專案的複雜度,因此,在這裡將會建立一個 Console 主控台應用類型的專案。

  • 打開 Visual Studio 2022 IDE 應用程式
  • 從 [Visual Studio 2022] 對話窗中,點選右下方的 [建立新的專案] 按鈕
  • 在 [建立新專案] 對話窗右半部
    • 切換 [所有語言 (L)] 下拉選單控制項為 [C#]
    • 切換 [所有專案類型 (T)] 下拉選單控制項為 [主控台]
  • 在中間的專案範本清單中,找到並且點選 [主控台應用程式] 專案範本選項

    專案,用於建立可在 Windows、Linux 及 macOS 於 .NET 執行的命令列應用程式

  • 點選右下角的 [下一步] 按鈕
  • 在 [設定新的專案] 對話窗
  • 找到 [專案名稱] 欄位,輸入 csGptTokenizer 作為專案名稱
  • 在剛剛輸入的 [專案名稱] 欄位下方,確認沒有勾選 [將解決方案與專案至於相同目錄中] 這個檢查盒控制項
  • 點選右下角的 [下一步] 按鈕
  • 現在將會看到 [其他資訊] 對話窗
  • 在 [架構] 欄位中,請選擇最新的開發框架,這裡選擇的 [架構] 是 : .NET 7.0 (標準字詞支援)
  • 在這個練習中,需要去勾選 [不要使用最上層陳述式(T)] 這個檢查盒控制項

    這裡的這個操作,可以由讀者自行決定是否要勾選這個檢查盒控制項

  • 請點選右下角的 [建立] 按鈕

稍微等候一下,這個主控台專案將會建立完成

安裝要用到的 NuGet 開發套件

因為開發此專案時會用到這些 NuGet 套件,請依照底下說明,將需要用到的 NuGet 套件安裝起來。

安裝 AI.Dev.OpenAI.GPT 套件

AI.Dev.OpenAI.GPT 是一個 NuGet 套件,可以在 .NET 和 C# 專案中使用 。它提供了一個 GPT3Tokenizer C# 類別,可以幫助您計算提示和收到的回應中的令牌數 。該分詞器使用字節對編碼(BPE)算法,根據頻率和合併規則將單詞拆分為子詞 。

您可以通過在 nuget.org 上運行命令 dotnet add package AI.Dev.OpenAI.GPT --version 1.0.2 來安裝 AI.Dev.OpenAI.GPT NuGet 套件 。

請依照底下說明操作步驟,將這個套件安裝到專案內

  • 滑鼠右擊 [方案總管] 視窗內的 [專案節點] 下方的 [相依性] 節點
  • 從彈出功能表清單中,點選 [管理 NuGet 套件] 這個功能選項清單
  • 此時,將會看到 [NuGet: csGptTokenizer] 視窗
  • 切換此視窗的標籤頁次到名稱為 [瀏覽] 這個標籤頁次
  • 在左上方找到一個搜尋文字輸入盒,在此輸入 AI.Dev.OpenAI.GPT
  • 稍待一會,將會在下方看到這個套件被搜尋出來
  • 點選 [AI.Dev.OpenAI.GPT] 套件名稱
  • 在視窗右方,將會看到該套件詳細說明的內容,其中,右上方有的 [安裝] 按鈕
  • 點選這個 [安裝] 按鈕,將這個套件安裝到專案內

開始進行使用 GPT 分詞器 Tokenizer 來進行程式設計

  • 在此專案節點下,找到並且打開 [Program.cs] 這個檔案
  • 使用底下 C# 程式碼替換掉 [Program.cs] 檔案內所有程式碼內容
using AI.Dev.OpenAI.GPT;

namespace csGptTokenizer
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string text = "Microsoft MVP | 提供 .NET C# / Blazor / MAUI 教育訓練與顧問服務";
            List<int> tokens = GPT3Tokenizer.Encode(text);
            Console.WriteLine(text);
            Console.WriteLine($"中文字串長度:{text.Length}, Token數量:{tokens.Count}");
            text = "Microsoft MVP | Providing .NET C# / Blazor / MAUI Education, Training and Consulting Services";
            tokens = GPT3Tokenizer.Encode(text);
            Console.WriteLine(text);
            Console.WriteLine($"英文字串長度:{text.Length}, Token數量:{tokens.Count}");
            Console.WriteLine($"上述 Token 計算結果,可以從 https://platform.openai.com/tokenizer 來進行比對");
        }
    }
}

在這個測試程式碼中,將會分別把含有中文字的文字,與純粹全部都是英文字的文字,對於這兩種類型的文字,在透過 分詞器 處理過後,究竟會得到多少 Token 數量。

首先,會先準備一個含有 中英文 的文字,底下的文字將會儲存在 [text] 這個區域變數內。

Microsoft MVP | 提供 .NET C# / Blazor / MAUI 教育訓練與顧問服務

使用 [GPT3Tokenizer.Encode] 靜態方法,分析與取出這串文字的所有 Token 到 [tokens] 區域變數內,這是個 List<int> 型別物件。有了這些資訊,便可以得到這文字字串長度為 52 , 產生出 Token數量為 42

若是全為中文的文字

近年來物價飆漲,有眼尖的網友就發現連鎖速食店「摩斯漢堡」似乎偷偷調漲

將會得到這文字字串長度為 34 , 產生出 Token數量為 79

會有這樣的結果,這是因為一個中文字在進行分詞過程,將會拆解出 1~3 個 Token,反觀,一個英文字(會有多個字母所組成),通常會轉換成為一個 Token,但也有可能拆出多個 Token。

最後來看看全部都是英文的文字,經過分詞處理之後,所得甚麼樣的結果

Microsoft MVP | Providing .NET C# / Blazor / MAUI Education, Training and Consulting Services

將會得到這文字字串長度為 93 , 產生出 Token數量為 21

底下將會是執行後的螢幕截圖結果

 





2023年5月3日 星期三

將文件檔案轉換成為文字內容系列 - HTML

將文件檔案轉換成為文字內容系列 - HTML

在 上一篇文章 有討論到如何將 PDF 文件檔案轉換成為文字內容,在這份文章中,將會是這個轉換成為文字內容系列文章的第 2 個,在這裡將會探討如何將 HTML 類型的檔案,抽取出裡面的文字內容出來。

HTML(HyperText Markup Language,超文本標記語言)是一種標準的網頁標記語言,用於描述網頁的結構和內容。它不是一種程式語言,而是一種用於組織和展示網頁元素(如文本、圖像、超連結等)的標記語言。

HTML 文件包含一系列的標籤(tags),這些標籤用來標記不同的網頁元素,例如段落、標題、列表等。瀏覽器會解析這些標籤,並根據它們的含義將內容呈現給用戶。

HTML 是網頁開發的基礎,通常與 CSS(Cascading Style Sheets,層疊樣式表)和 JavaScript 一起使用,分別負責網頁的外觀和互動功能。這三個技術共同構成了網頁開發的核心。

由於這裡需要的純文字,將會是使用者在瀏覽器上看到的各種文字,所以,對於 HTML 檔案內的各種標籤 (Tags) 、CSS、JavaScript 等這些內容,將需要忽略掉。

建立可以將 HTML 檔案轉換出文字內容的測試專案

為了簡化測試用專案的複雜度,因此,在這裡將會建立一個 Console 主控台應用類型的專案。

  • 打開 Visual Studio 2022 IDE 應用程式
  • 從 [Visual Studio 2022] 對話窗中,點選右下方的 [建立新的專案] 按鈕
  • 在 [建立新專案] 對話窗右半部
    • 切換 [所有語言 (L)] 下拉選單控制項為 [C#]
    • 切換 [所有專案類型 (T)] 下拉選單控制項為 [主控台]
  • 在中間的專案範本清單中,找到並且點選 [主控台應用程式] 專案範本選項

    專案,用於建立可在 Windows、Linux 及 macOS 於 .NET 執行的命令列應用程式

  • 點選右下角的 [下一步] 按鈕
  • 在 [設定新的專案] 對話窗
  • 找到 [專案名稱] 欄位,輸入 csHtml2Text 作為專案名稱
  • 在剛剛輸入的 [專案名稱] 欄位下方,確認沒有勾選 [將解決方案與專案至於相同目錄中] 這個檢查盒控制項
  • 點選右下角的 [下一步] 按鈕
  • 現在將會看到 [其他資訊] 對話窗
  • 在 [架構] 欄位中,請選擇最新的開發框架,這裡選擇的 [架構] 是 : .NET 7.0 (標準字詞支援)
  • 在這個練習中,需要去勾選 [不要使用最上層陳述式(T)] 這個檢查盒控制項

    這裡的這個操作,可以由讀者自行決定是否要勾選這個檢查盒控制項

  • 請點選右下角的 [建立] 按鈕

稍微等候一下,這個主控台專案將會建立完成

安裝要用到的 NuGet 開發套件

因為開發此專案時會用到這些 NuGet 套件,請依照底下說明,將需要用到的 NuGet 套件安裝起來。

安裝 HtmlAgilityPack 套件

HtmlAgilityPack(HAP)是一個針對 C# 開發環境的 HTML 解析和操作庫。它提供了一個易於使用和高效的 API,讓開發者能夠對 HTML 文件進行各種操作,如讀取、修改和操作 HTML 內容。

HtmlAgilityPack 的主要功能和目的包括:

  • HTML 解析:能夠解析不規範和破碎的 HTML 代碼,並將其轉換成一個可操作的對象模型,方便開發者進行後續操作。
  • 查詢和選擇節點:提供了類似 XPath、CSS 選擇器等方式,讓開發者能夠快速地定位和選擇 HTML 文件中的指定元素。
  • 修改 HTML 內容:允許開發者對 HTML 內容進行修改,如增加、刪除或修改元素的屬性、標籤名和內容等。
  • 遍歷 HTML 節點:可以對 HTML 文件進行遍歷,讓開發者更方便地查找和處理指定的節點或元素。
  • HTML 轉換:支持將 HTML 內容轉換成其他格式,如 XML、JSON等,以便於進行後續處理。
  • 網絡爬蟲:可以擴展 HtmlAgilityPack 的功能,以實現簡單的網頁抓取和內容提取。

總之,HtmlAgilityPack 是一個強大且靈活的 HTML 處理套件,適用於 C# 開發環境。它可以幫助開發者更高效地解析和操作 HTML 內容,進行網頁資料提取或構建網頁爬蟲等任務。

請依照底下說明操作步驟,將這個套件安裝到專案內

  • 滑鼠右擊 [方案總管] 視窗內的 [專案節點] 下方的 [相依性] 節點
  • 從彈出功能表清單中,點選 [管理 NuGet 套件] 這個功能選項清單
  • 此時,將會看到 [NuGet: csHtml2Text] 視窗
  • 切換此視窗的標籤頁次到名稱為 [瀏覽] 這個標籤頁次
  • 在左上方找到一個搜尋文字輸入盒,在此輸入 HtmlAgilityPack
  • 稍待一會,將會在下方看到這個套件被搜尋出來
  • 點選 [HtmlAgilityPack] 套件名稱
  • 在視窗右方,將會看到該套件詳細說明的內容,其中,右上方有的 [安裝] 按鈕
  • 點選這個 [安裝] 按鈕,將這個套件安裝到專案內

準備需要抽取文字內容的 HTML 檔案

  • 準備好一個 [.html] 文件檔案

  • 在這裡將會從網路上,隨機找到一個 [【筆記】範本.html] 檔案

  • 取得該檔案之後,將其透過檔案總管拖拉到 Visual Studio 2022 的專案內

  • 接著,點選 [【筆記】範本.html] 檔案

  • 查看 [屬性] 視窗的內容

    若沒有看到屬性視窗出現在 Visual Studio 2022 內,請從 Visual Studio 2022 功能表中,點選 [檢視] > [屬性視窗]

    (這個選項將會在功能表清單內的最下面)

  • 在屬性視窗內,找到 [複製到輸出目錄] 這個選項

  • 從下拉選單中找到並且設定為這個 [有更新時才複製] 選項

開始進行轉檔程式設計

  • 在此專案節點下,找到並且打開 [Program.cs] 這個檔案
  • 使用底下 C# 程式碼替換掉 [Program.cs] 檔案內所有程式碼內容
using System;
using HtmlAgilityPack;

namespace HtmlToText
{
    class Program
    {
        static void Main(string[] args)
        {
            string htmlContent = File.ReadAllText("【筆記】範本.html");

            // 將 HTML 內容轉換為純文本
            var textContent = ConvertHtmlToPlainText(htmlContent);

            // 將純文本內容顯示在螢幕上
            Console.WriteLine(textContent);
        }

        static string ConvertHtmlToPlainText(string htmlContent)
        {
            var htmlDoc = new HtmlDocument();
            htmlDoc.LoadHtml(htmlContent);

            // 刪除所有 script 和 style 節點
            RemoveNodeByTag(htmlDoc, "script");
            RemoveNodeByTag(htmlDoc, "style");

            // 取得網頁的純文本內容
            string plainText = htmlDoc.DocumentNode.InnerText;

            // 刪除多餘的空格和換行符
            plainText = System.Text.RegularExpressions.Regex.Replace(plainText, @"\s+", " ").Trim();

            return plainText;
        }

        static void RemoveNodeByTag(HtmlDocument htmlDoc, string tagName)
        {
            var nodes = htmlDoc.DocumentNode.SelectNodes($"//{tagName}");

            if (nodes != null)
            {
                foreach (var node in nodes)
                {
                    node.Remove();
                }
            }
        }
    }
}

因為 HTML 格式的檔案,其本身就是一個文字格式內容,所以,首先使用 [File.ReadAllText] 方法,將一個 HTML 檔案內容全部讀取出來,這裡使用 htmlContent 區域變數來儲存這些文字內容。

在此設計一個 [ConvertHtmlToPlainText] 方法,可以用來將傳入的 HTML 標籤內容,抽取出要顯示出來的文字內容,精煉後的文字將會儲存在 textContent 區域變數內

在 [ConvertHtmlToPlainText] 方法內,建立一個 [HtmlDocument] 物件,並且使用 [LoadHtml] 方法把整個 HTML 內容用來讀取進來,接著退去對不會用到的標籤,使用 [htmlDoc.DocumentNode.InnerText] 屬性,取出網頁內純文字內容,最後,刪除掉多餘的空格和換行字元,這樣就可以得到該 HTML 內的純文字內容了。

最後,將所有的文字內容輸出到螢幕上

底下將會是執行後的螢幕截圖結果

而原始的 HTML 在瀏覽器上看到的畫面如下:

 










2023年5月2日 星期二

將文件檔案轉換成為文字內容系列 - PDF

將文件檔案轉換成為文字內容系列 - PDF

最近因為工作上的關係,需要提供一系列的轉檔服務,這些轉檔工作中,首先需要將原有的各種文件檔案內容讀取出來,抽取出文件檔案內的文字內容,至於圖片等其他資訊,則將會忽略掉;一旦取得這個文件檔案內的文字內容後,將會緊接著根據需要進行這些文字的精鍊處理工作,不過,因為已經成為了文字內容,這些精練的工作就會變得簡單多了。

所以,這裡將會把各種文件檔案,要如何把裡面的文字內容抽取出來的設計工作,寫成一系列的文章,在第一篇文章,將會要來挑戰 PDF 這樣類型的檔案;然而,經過初步的上網搜尋與分析,想要把各種文件檔案的內容,抽取出所有文字內容,似乎是件滿繁重的工作,若要自己來重頭開始設計這些程式碼,並無法呈現出你的優秀與能力高超,在這裡需要滿足能夠在最短的時間內,完成這樣的轉檔需求,因此,市面上各種套件將會是唯一最佳選擇。

現在將會需要面對另外一個挑戰,那就是對於這樣 PDF 文件檔案,想要把文字內容抽取出來,到底要選擇哪個套件比較合適呢?由於我這裡有時間壓力,因此,就隨機的在網路上尋找出各種轉檔套件,只使用能夠滿足這次需求目的的就好,不館這個套件是否擁有其他強大的功能還有多少。

建立可以將 PDF 檔案轉換出文字內容的測試專案

為了簡化測試用專案的複雜度,因此,在這裡將會建立一個 Console 主控台應用類型的專案。

  • 打開 Visual Studio 2022 IDE 應用程式
  • 從 [Visual Studio 2022] 對話窗中,點選右下方的 [建立新的專案] 按鈕
  • 在 [建立新專案] 對話窗右半部
    • 切換 [所有語言 (L)] 下拉選單控制項為 [C#]
    • 切換 [所有專案類型 (T)] 下拉選單控制項為 [主控台]
  • 在中間的專案範本清單中,找到並且點選 [主控台應用程式] 專案範本選項

    專案,用於建立可在 Windows、Linux 及 macOS 於 .NET 執行的命令列應用程式

  • 點選右下角的 [下一步] 按鈕
  • 在 [設定新的專案] 對話窗
  • 找到 [專案名稱] 欄位,輸入 csPdf2Text 作為專案名稱
  • 在剛剛輸入的 [專案名稱] 欄位下方,確認沒有勾選 [將解決方案與專案至於相同目錄中] 這個檢查盒控制項
  • 點選右下角的 [下一步] 按鈕
  • 現在將會看到 [其他資訊] 對話窗
  • 在 [架構] 欄位中,請選擇最新的開發框架,這裡選擇的 [架構] 是 : .NET 7.0 (標準字詞支援)
  • 在這個練習中,需要去勾選 [不要使用最上層陳述式(T)] 這個檢查盒控制項

    這裡的這個操作,可以由讀者自行決定是否要勾選這個檢查盒控制項

  • 請點選右下角的 [建立] 按鈕

稍微等候一下,這個主控台專案將會建立完成

安裝要用到的 NuGet 開發套件

因為開發此專案時會用到這些 NuGet 套件,請依照底下說明,將需要用到的 NuGet 套件安裝起來。

安裝 itext7 套件

iText7 是一個針對 C# 開發環境的開源 PDF 庫,主要用於創建、編輯、檢視和操作 PDF 文件。它提供了一個功能強大且靈活的 API,讓開發者能夠快速並且輕鬆地完成 PDF 文件的各種操作。

iText7 的主要功能和目的包括:

  • 創建 PDF 文件:可以從零開始創建新的 PDF 文件,也可以基於現有的模板或文件創建 PDF。
  • 編輯 PDF 文件:提供了編輯 PDF 文本、圖像、表格和其他內容的功能,讓開發者能夠輕鬆地修改現有的 PDF 文件。
  • PDF 操作:支持將多個 PDF 文件合併為一個文件、拆分 PDF 文件、重排 PDF 頁面順序等操作。
  • 表單填充與編輯:可以在 PDF 表單中填充數據、讀取表單數據以及編輯現有的 PDF 表單。
  • PDF 文字提取:允許從 PDF 文件中提取文字內容,便於進行分析或其他操作。
  • PDF 轉換:可以將 PDF 文件轉換為其他格式,如 HTML、XML、圖像等,並支持從這些格式轉換回 PDF。
  • 安全性:提供了 PDF 文件的加密、解密、簽名和驗證等安全功能,保護 PDF 文件的數據安全。
  • PDF 標籤和標記:支持為 PDF 文件添加標籤和標記,以便於閱讀和搜索。
  • PDF 與文檔標準相容:支持與 PDF/A、PDF/UA、PDF/X 等文檔標準相容,確保文檔在各種場景下的正確顯示和使用。
  • 總之,iText7 是一個強大的 PDF 處理套件,適用於 C# 開發環境。它可以幫助開發者快速完成 PDF 文件的創建、編輯和操作等任務,提高工作效率。

請依照底下說明操作步驟,將這個套件安裝到專案內

  • 滑鼠右擊 [方案總管] 視窗內的 [專案節點] 下方的 [相依性] 節點
  • 從彈出功能表清單中,點選 [管理 NuGet 套件] 這個功能選項清單
  • 此時,將會看到 [NuGet: csPdf2Text] 視窗
  • 切換此視窗的標籤頁次到名稱為 [瀏覽] 這個標籤頁次
  • 在左上方找到一個搜尋文字輸入盒,在此輸入 itext7
  • 稍待一會,將會在下方看到這個套件被搜尋出來
  • 點選 [itext7] 套件名稱
  • 在視窗右方,將會看到該套件詳細說明的內容,其中,右上方有的 [安裝] 按鈕
  • 點選這個 [安裝] 按鈕,將這個套件安裝到專案內

準備需要抽取文字內容的 PDF 檔案

  • 準備好一個 [.pdf] 文件檔案

  • 在這裡將會從網路上,隨機找到一個 [synapse_pacs.pdf] 檔案

  • 取得該檔案之後,將其透過檔案總管拖拉到 Visual Studio 2022 的專案內

  • 接著,點選 [synapse_pacs.pdf] 檔案

  • 查看 [屬性] 視窗的內容

    若沒有看到屬性視窗出現在 Visual Studio 2022 內,請從 Visual Studio 2022 功能表中,點選 [檢視] > [屬性視窗]

    (這個選項將會在功能表清單內的最下面)

  • 在屬性視窗內,找到 [複製到輸出目錄] 這個選項

  • 從下拉選單中找到並且設定為這個 [有更新時才複製] 選項

開始進行轉檔程式設計

  • 在此專案節點下,找到並且打開 [Program.cs] 這個檔案
  • 使用底下 C# 程式碼替換掉 [Program.cs] 檔案內所有程式碼內容
using System.Text;
using iText.Kernel.Pdf;
using iText.Kernel.Pdf.Canvas.Parser;
using iText.Kernel.Pdf.Canvas.Parser.Listener;

namespace csPdf2Text
{
    internal class Program
    {
        static void Main(string[] args)
        {
            StringBuilder result = new StringBuilder();

            using (PdfReader pdfReader = new PdfReader("synapse_pacs.pdf"))
            {
                using (PdfDocument pdfDoc = new PdfDocument(pdfReader))
                {
                    int numberOfPages = pdfDoc.GetNumberOfPages();

                    for (int i = 1; i <= numberOfPages; i++)
                    {
                        ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy();
                        string pageContent = PdfTextExtractor.GetTextFromPage(pdfDoc.GetPage(i), strategy);
                        result.AppendLine(pageContent);
                    }
                }
            }

            Console.WriteLine(result.ToString());
        }
    }
}

[result] 這個區域變數為一個 [StringBuilder] 型別的物件,將會用於暫時儲存從 PDF 檔案內讀取出來的文字內容,一旦所有文件內容都轉成文字內後,將會使用 [StringBuilder] 的 [ToString] 方法,取得所有的文字內容。

接下來建立一個 [PdfReader] 類別的物件,在呼叫建構函式時候,將測試用的 PDF 檔案路徑名稱,傳遞到建構式內。

現在可以透過 [PdfDocument] 類別的物件,開始逐一掃瞄該 PDF 文件內的每個頁面,對於每個 PDF 頁面,將會使用 [PdfTextExtractor.GetTextFromPage] 方法,把這個頁面的文字內容抽取出來。

最後,將所有的文字內容輸出到螢幕上

底下將會是執行後的螢幕截圖結果