構建情感分析應用
概述
在本指南中,您將學習如何構建和執行一個情感分析應用程式。您將使用 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
:此模組提供對傳輸層安全(加密)功能的訪問,用於安全的 Web 連線。
處理 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
標誌代表 tag(標籤)。它為映象分配一個名稱,在本例中為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
:這會分配一個偽 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 風格的行尾](/desktop/troubleshoot-and-support/troubleshoot/topics/#Unexpected-syntax-errors-use-Unix-style-line endings-for-files-in-containers)。容器啟動後,您將在控制檯中看到以下內容。
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 設定環境並執行它。
相關資訊
後續步驟
探索更多自然語言處理指南。