建置一個情感分析應用程式
概覽
在本指南中,您將學習如何建置並執行一個情感分析應用程式。您將使用 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 sslnltk:這是用於處理 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此區塊是用於某些環境的權宜之計,在這些環境中,透過 NLTK 下載資料可能會因為 SSL 憑證驗證問題而失敗。它告訴 Python 忽略 HTTPS 請求的 SSL 憑證驗證。
下載 NLTK 資源。
nltk.download('vader_lexicon') nltk.download('punkt')vader_lexicon:這是SentimentIntensityAnalyzer進行情感分析所使用的詞彙表。punkt:NLTK 用於將句子斷詞 (tokenizing)。這對於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)會為輸入文字產生情感評分。
該函式根據複合評分 (compound score) 回傳 **正面 (Positive)**、**負面 (Negative)** 或 **中性 (Neutral)**。
建立主迴圈。
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 是一個文字文件,其中包含您在命令列上執行以組裝映像檔的所有指令。映像檔 (image) 是一個唯讀範本,其中包含建立 Docker 容器的說明。
範例應用程式中已經包含了 Dockerfile。在程式碼或文字編輯器中開啟 Dockerfile 以探索其內容。
下列步驟說明 Dockerfile 的每個部分。如需更多詳細資料,請參閱 Dockerfile 參考。
指定基礎映像檔。
FROM python:3.8-slim此指令設定了建置的基礎。
python:3.8-slim是 Python 3.8 映像檔的輕量級版本,針對大小和速度進行了最佳化。使用此精簡映像檔可縮減 Docker 映像檔的整體大小,從而加快下載速度並減少安全漏洞的暴露面。這對於 Python 應用程式特別有用,因為您可能不需要完整的標準 Python 映像檔。設定工作目錄。
WORKDIR /appWORKDIR設定 Docker 映像檔內目前的工作目錄。透過將其設定為/app,您可以確保 Dockerfile 中後續的所有指令(例如COPY和RUN)都在此目錄中執行。這也有助於組織您的 Docker 映像檔,因為所有與應用程式相關的檔案都包含在特定目錄中。將需求檔案複製到映像檔中。
COPY requirements.txt /appCOPY指令將requirements.txt檔案從您的本機機器傳輸到 Docker 映像檔中。此檔案列出了應用程式所需的所有 Python 相依套件。將其複製到容器中,讓下一個指令 (RUN pip install) 可以在映像檔環境內安裝這些相依套件。在映像檔中安裝 Python 相依套件。
RUN pip install --no-cache-dir -r requirements.txt此行使用 Python 的套件安裝程式
pip來安裝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 容器能夠執行此腳本來啟動應用程式。設定進入點 (Entry point)。
ENTRYPOINT ["/app/entrypoint.sh"]ENTRYPOINT指令將容器配置為執行entrypoint.sh作為其預設可執行檔。這意味著當容器啟動時,它會自動執行該腳本。您可以透過在程式碼或文字編輯器中開啟
entrypoint.sh腳本來探索它。由於範例包含多個應用程式,該腳本讓您可以指定容器啟動時要執行哪個應用程式。
執行應用程式
若要使用 Docker 執行應用程式
建置映像檔。
在終端機中,於
Dockerfile所在的目錄內執行下列指令。$ docker build -t basic-nlp .以下是該指令的詳細解析
docker build:這是用於從 Dockerfile 和內容 (context) 建置 Docker 映像檔的主要指令。內容通常是指定位置的一組檔案,通常是包含 Dockerfile 的目錄。-t basic-nlp:這是用於標記映像檔的選項。-t旗標代表標籤 (tag)。它會為映像檔指定名稱,在此例中為basic-nlp。標籤是稍後參考映像檔的方便方式,特別是在將它們推送到登錄檔或執行容器時。.:這是指令的最後一部分,指定建置內容。句點 (.) 表示目前目錄。Docker 將在此目錄中尋找 Dockerfile。建置內容(在此例中為目前目錄)會發送到 Docker 常駐程式 (daemon) 以進行建置。它包含指定目錄中的所有檔案和子目錄。
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 設定環境並執行應用程式。
相關資訊
下一步
探索更多 自然語言處理指南。