構建情感分析應用程式
概述
在本指南中,您將學習如何構建和執行情感分析應用程式。您將使用 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 設定環境並執行應用程式。
相關資訊
下一步
探索更多 自然語言處理指南。