构建情感分析应用程序
概述
在本指南中,您将学习如何构建和运行情感分析应用程序。您将使用 Python 和自然语言工具包 (NLTK) 构建应用程序,然后使用 Docker 设置环境并运行应用程序。
该应用程序使用 NLTK 的 SentimentIntensityAnalyzer 分析用户输入文本的情感,并输出情感是积极的、消极的还是中性的。
先决条件
- 您已安装最新版本的 Docker Desktop。Docker 定期添加新功能,本指南的某些部分可能仅适用于最新版本的 Docker Desktop。
- 您拥有一个 Git 客户端。本节中的示例使用基于命令行的 Git 客户端,但您可以使用任何客户端。
获取示例应用程序
打开终端,使用以下命令克隆示例应用程序的存储库。
$ git clone https://github.com/harsh4870/Docker-NLP.git
验证您是否已克隆存储库。
您应该在
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/01_sentiment_analysis.py
文件中。在文本或代码编辑器中打开 01_sentiment_analysis.py
,在以下步骤中探索其内容。
导入所需的库。
import nltk from nltk.sentiment import SentimentIntensityAnalyzer import ssl
nltk
:这是用于在 Python 中处理人类语言数据的自然语言工具包库。SentimentIntensityAnalyzer
:这是来自 NLTK 的用于确定文本情感的特定工具。ssl
:此模块提供对用于安全网络连接的传输层安全 (加密) 功能的访问。
处理 SSL 证书验证。
try: _create_unverified_https_context = ssl._create_unverified_context except AttributeError: pass else: ssl._create_default_https_context = _create_unverified_https_context
此代码块是针对某些环境的解决方法,在这些环境中,由于 SSL 证书验证问题,通过 NLTK 下载数据可能会失败。它告诉 Python 忽略 HTTPS 请求的 SSL 证书验证。
下载 NLTK 资源。
nltk.download('vader_lexicon') nltk.download('punkt')
vader_lexicon
:这是SentimentIntensityAnalyzer
用于情感分析的词典。punkt
:这是 NLTK 用于分句的工具。它对于SentimentIntensityAnalyzer
正确运行是必要的。
创建情感分析函数。
def perform_semantic_analysis(text): sid = SentimentIntensityAnalyzer() sentiment_score = sid.polarity_scores(text) if sentiment_score['compound'] >= 0.05: return "Positive" elif sentiment_score['compound'] <= -0.05: return "Negative" else: return "Neutral"
SentimentIntensityAnalyzer()
创建分析器的实例。polarity_scores(text)
为输入文本生成情感评分。
该函数根据复合评分返回 **积极的**、**消极的** 或 **中性的**。
创建主循环。
if __name__ == "__main__": while True: input_text = input("Enter the text for semantic analysis (type 'exit' to end): ") if input_text.lower() == 'exit': print("Exiting...") break result = perform_semantic_analysis(input_text) print(f"Sentiment: {result}")
脚本的这部分运行无限循环以接受用户输入进行分析。如果用户键入
exit
,程序将终止。否则,它将打印出所提供文本的情感。创建
requirements.txt
。示例应用程序已经包含
requirements.txt
文件以指定应用程序导入的必要软件包。在代码或文本编辑器中打开requirements.txt
以探索其内容。# 01 sentiment_analysis nltk==3.6.5 ...
情感分析应用程序只需要
nltk
软件包。
探索应用程序环境
您将使用 Docker 在容器中运行应用程序。Docker 允许您容器化应用程序,为运行应用程序提供一致且隔离的环境。这意味着应用程序将在其 Docker 容器中按预期运行,而与底层系统差异无关。
要在容器中运行应用程序,需要一个 Dockerfile。Dockerfile 是一个文本文件,其中包含您将在命令行中调用的所有命令以组装镜像。镜像是一个只读模板,其中包含用于创建 Docker 容器的指令。
示例应用程序已经包含一个 Dockerfile
。在代码或文本编辑器中打开 Dockerfile
以探索其内容。
以下步骤解释了 Dockerfile
的每个部分。有关更多详细信息,请参阅 Dockerfile 参考。
指定基础镜像。
FROM python:3.8-slim
此命令为构建奠定了基础。
python:3.8-slim
是 Python 3.8 镜像的轻量级版本,针对大小和速度进行了优化。使用此精简镜像会减少 Docker 镜像的整体大小,从而导致更快的下载速度,并减少安全漏洞的攻击面。这对于 Python 应用程序尤其有用,在这些应用程序中您可能不需要完整的标准 Python 镜像。设置工作目录。
WORKDIR /app
WORKDIR
在 Docker 镜像中设置当前工作目录。将其设置为/app
,可以确保 Dockerfile 中所有后续命令(如COPY
和RUN
)在此目录中执行。这也有助于组织 Docker 镜像,因为所有与应用程序相关的文件都包含在特定目录中。将 requirements 文件复制到镜像中。
COPY requirements.txt /app
COPY
命令将requirements.txt
文件从您的本地机器传输到 Docker 镜像中。此文件列出了应用程序所需的所有 Python 依赖项。将其复制到容器中使下一个命令 (RUN pip install
) 能够在镜像环境中安装这些依赖项。在镜像中安装 Python 依赖项。
RUN pip install --no-cache-dir -r requirements.txt
此行使用
pip
(Python 的软件包安装程序)来安装requirements.txt
中列出的软件包。--no-cache-dir
选项禁用缓存,这通过不存储不必要的缓存数据来减小 Docker 镜像的大小。运行其他命令。
RUN python -m spacy download en_core_web_sm
此步骤特定于需要 spaCy 库的 NLP 应用程序。它下载了
en_core_web_sm
模型,这是一个用于 spaCy 的小型英语语言模型。虽然此应用程序不需要,但它包含在内以与可能使用此 Dockerfile 的其他 NLP 应用程序兼容。将应用程序代码复制到镜像中。
COPY *.py /app COPY entrypoint.sh /app
这些命令将您的 Python 脚本和
entrypoint.sh
脚本复制到镜像的/app
目录中。这是至关重要的,因为容器需要这些脚本才能运行应用程序。entrypoint.sh
脚本尤为重要,因为它决定了应用程序如何在容器内启动。设置
entrypoint.sh
脚本的权限。RUN chmod +x /app/entrypoint.sh
此命令修改
entrypoint.sh
的文件权限,使其可执行。此步骤对于确保 Docker 容器可以运行此脚本以启动应用程序是必要的。设置入口点。
ENTRYPOINT ["/app/entrypoint.sh"]
ENTRYPOINT
指令配置容器以运行entrypoint.sh
作为其默认可执行文件。这意味着当容器启动时,它会自动执行该脚本。您可以通过在代码或文本编辑器中打开它来探索
entrypoint.sh
脚本。由于示例包含多个应用程序,因此该脚本允许您在容器启动时指定要运行的应用程序。
运行应用程序
要使用 Docker 运行应用程序
构建镜像。
在终端中,在
Dockerfile
所在目录中运行以下命令。$ docker build -t basic-nlp .
以下是命令的分解
docker build
:这是用于从 Dockerfile 和上下文构建 Docker 镜像的主要命令。上下文通常是指定位置的一组文件,通常是包含 Dockerfile 的目录。-t basic-nlp
:这是一个用于标记镜像的选项。-t
标志代表标记。它为镜像分配一个名称,在本例中为basic-nlp
。标记是以后引用镜像的便捷方式,尤其是在将它们推送到注册表或运行容器时。.
:这是命令的最后一部分,指定构建上下文。句点 (.
) 表示当前目录。Docker 将在此目录中查找 Dockerfile。构建上下文(在本例中为当前目录)将发送到 Docker 守护程序以启用构建。它包括指定目录中的所有文件和子目录。
Docker 在构建镜像时会向您的控制台输出多个日志。您将看到它下载并安装了依赖项。这可能需要几分钟才能完成,具体取决于您的网络连接。Docker 确实具有缓存功能,因此后续构建可能会更快。当它完成时,控制台将返回到提示符。
有关更多详细信息,请参阅 docker build CLI 参考。
将镜像作为容器运行。
在终端中,运行以下命令。
$ docker run -it basic-nlp 01_sentiment_analysis.py
以下是命令的分解
docker run
:这是用于从 Docker 镜像运行新容器的主要命令。-it
: 这是两个选项的组合-i
或--interactive
: 即使没有附加,这也使标准输入 (STDIN) 保持打开状态。它让容器在前景运行并保持交互性。-t
或--tty
: 这会分配一个伪终端,本质上模拟终端,就像命令提示符或 shell。它允许您与容器内的应用程序进行交互。
basic-nlp
: 这指定了用于创建容器的 Docker 镜像的名称。在本例中,它是使用docker build
命令创建的名为basic-nlp
的镜像。01_sentiment_analysis.py
: 这是您想在 Docker 容器中运行的脚本。它传递给entrypoint.sh
脚本,该脚本在容器启动时运行它。
有关更多详细信息,请参阅 docker run CLI 参考。
注意
对于 Windows 用户,您在运行容器时可能会遇到错误。验证
entrypoint.sh
中的行尾是否是LF
(\n
),而不是CRLF
(\r\n
),然后重建镜像。有关更多详细信息,请参阅 避免意外语法错误,使用 Unix 风格的行尾作为容器中的文件。容器启动后,您将在控制台中看到以下内容。
Enter the text for semantic analysis (type 'exit' to end):
测试应用程序。
输入评论以获取情感分析。
Enter the text for semantic analysis (type 'exit' to end): I love containers! Sentiment: Positive Enter the text for semantic analysis (type 'exit' to end): I'm still learning about containers. Sentiment: Neutral
总结
在本指南中,您学习了如何构建和运行情感分析应用程序。您学习了如何使用 Python 和 NLTK 构建应用程序,然后使用 Docker 设置环境并运行应用程序。
相关信息
下一步
探索更多 自然语言处理指南。