构建语言翻译应用

概述

本指南将逐步指导您构建和运行一个语言翻译应用。您将使用 Python 和 Googletrans 构建该应用,然后使用 Docker 设置环境并运行该应用。

本应用演示了 Googletrans 库在语言翻译方面一个简单实用的用法,展示了基本的 Python 和 Docker 概念。Googletrans 是一个免费且无限制的 Python 库,它实现了 Google 翻译 API。它使用 Google Translate Ajax API 调用如 detect 和 translate 等方法。

先决条件

  • 您已安装最新版本的 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 库,提供了与 Google 翻译的 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' 参数指定目标翻译语言为法语 (French)。.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。标签是以后引用镜像的便捷方式,尤其是在将它们推送到 registry 或运行容器时。
    • .: 这是命令的最后一部分,指定构建上下文。句点 (.) 表示当前目录。Docker 将在此目录中查找 Dockerfile。构建上下文(在此示例中为当前目录)被发送到 Docker daemon 以启用构建。它包含指定目录中的所有文件和子目录。

    有关更多详细信息,请参阅 docker build CLI 参考手册

    Docker 在构建镜像时会将一些日志输出到您的控制台。您会看到它下载并安装依赖项。根据您的网络连接情况,这可能需要几分钟。Docker 确实有一个缓存功能,因此后续构建可以更快。完成后,控制台将返回到提示符。

  2. 将镜像作为容器运行。

    在终端中,运行以下命令。

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

    以下是此命令的分解说明

    • docker run: 这是用于从 Docker 镜像运行新容器的主要命令。
    • -it: 这是以下两个选项的组合
      • -i--interactive: 即使未连接,也会保持标准输入 (STDIN) 打开。它使容器在前台保持运行并具有交互性。
      • -t--tty: 这会分配一个伪终端 (pseudo-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 设置环境并运行应用。

相关信息

下一步

探索更多 自然语言处理指南

页面选项