構建語言翻譯應用

概述

本指南將引導您構建和執行一個語言翻譯應用程式。您將使用 Python 和 Googletrans 構建應用程式,然後使用 Docker 設定環境並執行應用程式。

該應用程式演示了 Googletrans 庫在語言翻譯方面的簡單而實際的應用,展示了基本的 Python 和 Docker 概念。Googletrans 是一個免費且無限制的 Python 庫,它實現了谷歌翻譯 API。它使用谷歌翻譯 Ajax API 呼叫檢測和翻譯等方法。

先決條件

  • 您已安裝最新版本的 Docker Desktop。Docker 會定期新增新功能,本指南的某些部分可能僅適用於最新版本的 Docker Desktop。
  • 您有一個 Git 客戶端。本節中的示例使用基於命令列的 Git 客戶端,但您可以使用任何客戶端。

獲取示例應用程式

  1. 開啟一個終端,並使用以下命令克隆示例應用程式的儲存庫。

    $ git clone https://github.com/harsh4870/Docker-NLP.git
    
  2. 驗證您已克隆該儲存庫。

    您應該在您的 Docker-NLP 目錄中看到以下檔案。

    01_sentiment_analysis.py
    02_name_entity_recognition.py
    03_text_classification.py
    04_text_summarization.py
    05_language_translation.py
    entrypoint.sh
    requirements.txt
    Dockerfile
    README.md

探索應用程式程式碼

應用程式的原始碼位於 Docker-NLP/05_language_translation.py 檔案中。在文字或程式碼編輯器中開啟 05_language_translation.py,以便在以下步驟中探索其內容。

  1. 匯入所需的庫。

    from googletrans import Translator

    此行從 googletrans 匯入 Translator 類。Googletrans 是一個 Python 庫,提供了對谷歌翻譯 AJAX API 的介面。

  2. 指定主執行塊。

    if __name__ == "__main__":

    這個 Python 慣用法確保了以下程式碼塊僅在該指令碼是主程式時執行。它提供了靈活性,允許該指令碼既可以作為獨立程式執行,也可以作為匯入的模組使用。

  3. 建立一個無限迴圈以進行連續輸入。

       while True:
          input_text = input("Enter the text for translation (type 'exit' to end): ")
    
          if input_text.lower() == 'exit':
             print("Exiting...")
             break

    這裡建立了一個無限迴圈,以不斷提示您輸入文字,確保互動性。當您輸入 exit 時,迴圈會中斷,讓您可以有效地控制應用程式流程。

  4. 建立一個 Translator 例項。

          translator = Translator()

    這將建立一個 Translator 類的例項,用於執行翻譯。

  5. 翻譯文字。

          translated_text = translator.translate(input_text, dest='fr').text

    這裡,呼叫了 `translator.translate` 方法,並傳入了使用者輸入。`dest='fr'` 引數指定了翻譯的目標語言是法語。`.text` 屬性獲取翻譯後的字串。有關可用語言程式碼的更多詳細資訊,請參閱 Googletrans 文件

  6. 列印原文和翻譯後的文字。

          print(f"Original Text: {input_text}")
          print(f"Translated Text: {translated_text}")

    這兩行程式碼列印使用者輸入的原文和翻譯後的文字。

  7. 建立 requirements.txt。示例應用程式已包含 requirements.txt 檔案,用於指定應用程式匯入的必要模組。在程式碼或文字編輯器中開啟 requirements.txt 以探索其內容。

    ...
    
    # 05 language_translation
    googletrans==4.0.0-rc1

    對於語言翻譯應用程式,只需要 googletrans

探索應用程式環境

您將使用 Docker 在容器中執行該應用程式。Docker 允許您將應用程式容器化,為其執行提供一個一致且隔離的環境。這意味著無論底層系統有何差異,應用程式都將在其 Docker 容器內按預期執行。

要在容器中執行應用程式,需要一個 Dockerfile。Dockerfile 是一個文字文件,包含了您在命令列上為構建映象而呼叫的所有命令。映象是帶有建立 Docker 容器指令的只讀模板。

示例應用程式已包含一個 Dockerfile。在程式碼或文字編輯器中開啟 Dockerfile 以探索其內容。

以下步驟解釋了 Dockerfile 的每個部分。有關更多詳細資訊,請參閱 Dockerfile 參考

  1. 指定基礎映象。

    FROM python:3.8-slim

    此命令為構建奠定了基礎。python:3.8-slim 是 Python 3.8 映象的輕量級版本,針對大小和速度進行了最佳化。使用這個 slim 映象可以減小 Docker 映象的整體大小,從而加快下載速度並減少安全漏洞的攻擊面。這對於可能不需要完整標準 Python 映象的基於 Python 的應用程式尤其有用。

  2. 設定工作目錄。

    WORKDIR /app

    WORKDIR 設定 Docker 映象內當前的工作目錄。透過將其設定為 /app,您可以確保 Dockerfile 中的所有後續命令(如 COPYRUN)都在此目錄中執行。這也有助於組織您的 Docker 映象,因為所有與應用程式相關的檔案都包含在一個特定目錄中。

  3. 將 requirements 檔案複製到映象中。

    COPY requirements.txt /app

    COPY 命令將 requirements.txt 檔案從您的本地計算機傳輸到 Docker 映象中。該檔案列出了應用程式所需的所有 Python 依賴項。將其複製到容器中,可以讓下一個命令(RUN pip install)在映象環境中安裝這些依賴項。

  4. 在映象中安裝 Python 依賴項。

    RUN pip install --no-cache-dir -r requirements.txt

    這一行使用 Python 的包安裝程式 pip 來安裝 requirements.txt 中列出的包。--no-cache-dir 選項停用了快取,透過不儲存不必要的快取資料來減小 Docker 映象的大小。

  5. 執行其他命令。

    RUN python -m spacy download en_core_web_sm

    此步驟特定於需要 spaCy 庫的 NLP 應用程式。它會下載 en_core_web_sm 模型,這是一個用於 spaCy 的小型英語語言模型。雖然此應用不需要,但為了與可能使用此 Dockerfile 的其他 NLP 應用程式相容而包含它。

  6. 將應用程式程式碼複製到映象中。

    COPY *.py /app
    COPY entrypoint.sh /app

    這些命令將您的 Python 指令碼和 entrypoint.sh 指令碼複製到映象的 /app 目錄中。這至關重要,因為容器需要這些指令碼來執行應用程式。entrypoint.sh 指令碼尤其重要,因為它決定了應用程式在容器內如何啟動。

  7. entrypoint.sh 指令碼設定許可權。

    RUN chmod +x /app/entrypoint.sh

    此命令修改 entrypoint.sh 的檔案許可權,使其可執行。此步驟是必要的,以確保 Docker 容器可以執行此指令碼來啟動應用程式。

  8. 設定入口點。

    ENTRYPOINT ["/app/entrypoint.sh"]

    ENTRYPOINT 指令將容器配置為執行 entrypoint.sh 作為其預設可執行檔案。這意味著當容器啟動時,它會自動執行該指令碼。

    您可以透過在程式碼或文字編輯器中開啟 entrypoint.sh 指令碼來探索它。由於示例包含多個應用程式,該指令碼允許您指定容器啟動時要執行哪個應用程式。

執行應用程式

要使用 Docker 執行應用程式

  1. 構建映象。

    在終端中,在 Dockerfile 所在目錄內執行以下命令。

    $ docker build -t basic-nlp .
    

    以下是對該命令的分解:

    • docker build: 這是用於從 Dockerfile 和上下文構建 Docker 映象的主要命令。上下文通常是位於指定位置的一組檔案,通常是包含 Dockerfile 的目錄。
    • -t basic-nlp: 這是一個用於標記映象的選項。-t 標誌代表 tag(標籤)。它為映象分配一個名稱,在本例中是 basic-nlp。標籤是以後引用映象的便捷方式,尤其是在將它們推送到登錄檔或執行容器時。
    • .: 這是命令的最後一部分,指定了構建上下文。句點 (.) 表示當前目錄。Docker 將在此目錄中查詢 Dockerfile。構建上下文(在本例中為當前目錄)被髮送到 Docker 守護程序以啟用構建。它包括指定目錄中的所有檔案和子目錄。

    有關更多詳細資訊,請參閱 docker build CLI 參考

    Docker 在構建映象時會向您的控制檯輸出多個日誌。您會看到它下載並安裝依賴項。根據您的網路連線情況,這可能需要幾分鐘時間。Docker 確實有快取功能,因此後續構建可能會更快。完成後,控制檯將返回到提示符。

  2. 將映象作為容器執行。

    在終端中,執行以下命令。

    $ docker run -it basic-nlp 05_language_translation.py
    

    以下是對該命令的分解:

    • docker run: 這是用於從 Docker 映象執行新容器的主要命令。
    • -it: 這是兩個選項的組合:
      • -i--interactive: 即使未附加,也保持標準輸入 (STDIN) 開啟。它使容器能夠在前臺執行並保持互動。
      • -t--tty: 這會分配一個偽 TTY,本質上是模擬一個終端,如命令提示符或 shell。它讓您能夠與容器內的應用程式進行互動。
    • basic-nlp: 這指定了用於建立容器的 Docker 映象的名稱。在本例中,它是您使用 `docker build` 命令建立的名為 `basic-nlp` 的映象。
    • 05_language_translation.py: 這是您想在 Docker 容器內執行的指令碼。它被傳遞給 entrypoint.sh 指令碼,該指令碼在容器啟動時執行它。

    有關更多詳細資訊,請參閱 docker run CLI 參考

    注意

    對於 Windows 使用者,執行容器時可能會出現錯誤。請驗證 entrypoint.sh 中的行尾是 LF (\n) 而不是 CRLF (\r\n),然後重新構建映象。有關更多詳細資訊,請參閱[避免意外的語法錯誤,為容器中的檔案使用 Unix 風格的行尾](/desktop/troubleshoot-and-support/troubleshoot/topics/#Unexpected-syntax-errors-use-Unix-style-line endings-for-files-in-containers)。

    容器啟動後,您將在控制檯中看到以下內容。

    Enter the text for translation (type 'exit' to end):
    
  3. 測試應用程式。

    輸入一些文字以獲得文字摘要。

    Enter the text for translation (type 'exit' to end): Hello, how are you doing?
    Original Text: Hello, how are you doing?
    Translated Text: Bonjour comment allez-vous?
    

摘要

在本指南中,您學習瞭如何構建和執行語言翻譯應用程式。您學習瞭如何使用 Python 和 Googletrans 構建應用程式,然後使用 Docker 設定環境並執行應用程式。

相關資訊

後續步驟

探索更多自然語言處理指南