NLTK 基礎入門:用 Python 解鎖自然語言處理

自然語言處理(NLP)是人工智能領域的重要分支,它讓計算機能夠理解、處理和生成人類語言。而 NLTK(Natural Language Toolkit) 作為 Python 生態中最經典的 NLP 庫之一,提供了豐富的工具和資源,是初學者入門 NLP 的不二之選。本文將帶你從零開始,快速掌握 NLTK 的基礎用法。


一、什么是 NLTK?

NLTK 是一個開源的 Python 庫,專為自然語言處理設計。它提供了易于使用的接口,支持文本處理、分詞、詞性標注、情感分析等核心 NLP 任務。無論是教學、研究還是小型項目開發,NLTK 都能勝任。


二、環境搭建

在開始之前,確保你的 Python 環境已安裝 NLTK。如果尚未安裝,可以通過以下命令完成:

pip install nltk

安裝完成后,首次使用時需要下載必要的資源(如語料庫、模型等):

import nltk
nltk.download('punkt')  # 分詞器
nltk.download('stopwords')  # 停用詞
nltk.download('wordnet')  # WordNet 詞典
nltk.download('averaged_perceptron_tagger')  # 詞性標注器

提示:如果網絡較慢,可以選擇手動下載資源或使用國內鏡像。


三、NLTK 基礎功能
1. 文本分詞(Tokenization)

分詞是 NLP 的第一步,即將文本分割成單詞或句子。NLTK 提供了簡單的接口:

from nltk.tokenize import word_tokenize, sent_tokenizetext = "NLTK 是一個強大的自然語言處理工具。它支持多種語言。"
words = word_tokenize(text)  # 分詞
sentences = sent_tokenize(text)  # 分句print("單詞列表:", words)
print("句子列表:", sentences)

輸出

單詞列表: ['NLTK', '是', '一個', '強大', '的', '自然語言處理', '工具', '。']
句子列表: ['NLTK 是一個強大的自然語言處理工具。', '它支持多種語言。']

2. 去除停用詞(Stopwords)

停用詞(如“的”“是”“在”)對文本分析幫助不大,通常需要過濾掉:

from nltk.corpus import stopwordsstop_words = set(stopwords.words('chinese'))  # 中文停用詞(需額外下載)
# 若處理英文,使用 stopwords.words('english')
filtered_words = [w for w in words if w not in stop_words]print("過濾后的單詞:", filtered_words)

3. 詞干提取與詞形還原
  • 詞干提取:將單詞還原為詞干(如“running”→“run”)。
  • 詞形還原:將單詞還原為詞典中的基本形式(如“better”→“good”)。
from nltk.stem import PorterStemmer, WordNetLemmatizerstemmer = PorterStemmer()
lemmatizer = WordNetLemmatizer()word = "running"
print("詞干提取:", stemmer.stem(word))  # 輸出:run
print("詞形還原:", lemmatizer.lemmatize(word, pos='v'))  # 輸出:run

四、NLTK 進階功能
1. 詞性標注(POS Tagging)

詞性標注為每個單詞標注詞性(如名詞、動詞):

from nltk import pos_tagtagged_words = pos_tag(words)
print("詞性標注:", tagged_words)

輸出

詞性標注: [('NLTK', 'NNP'), ('是', 'VC'), ('一個', 'CD'), ...]

提示:NLTK 使用 Penn Treebank 標簽集,如 NNP 表示專有名詞,VC 表示系動詞。


2. 使用 WordNet 進行語義分析

WordNet 是一個英語詞匯數據庫,可用于同義詞、反義詞查詢和語義相似度計算:

from nltk.corpus import wordnetsynonyms = wordnet.synsets('car')  # 查詢“car”的同義詞集
for syn in synonyms:print(syn, syn.lemmas())

輸出

Synset('car.n.01') [Lemma('car.n.01.car'), Lemma('car.n.01.auto'), ...]
Synset('car.n.02') [Lemma('car.n.02.car'), Lemma('car.n.02.railcar'), ...]

3. 情感分析(VADER)

NLTK 內置了 VADER 情感分析工具,適合社交媒體文本:

from nltk.sentiment import SentimentIntensityAnalyzersia = SentimentIntensityAnalyzer()
text = "NLTK 真是太棒了!我愛它!"
sentiment = sia.polarity_scores(text)
print("情感分析結果:", sentiment)

輸出

情感分析結果: {'neg': 0.0, 'neu': 0.357, 'pos': 0.643, 'compound': 0.6249}

解釋compound 分數越接近 1 表示情感越積極,越接近 -1 表示越消極。


五、NLTK 的局限性

盡管 NLTK 功能強大,但也有局限性:

  1. 性能:處理大規模數據時速度較慢。
  2. 模型過時:部分內置模型(如分類器)未更新。
  3. 多語言支持有限:默認支持英文,其他語言需額外資源。

解決方案:結合 spaCyTransformers 等現代庫,或使用 NLTK 處理預處理任務。


六、實踐項目建議
  1. 基礎項目
    • 文本清洗與分詞
    • 簡單的詞性標注
  2. 中級項目
    • 電影評論情感分析
    • 新聞分類系統
  3. 高級項目
    • 基于規則的聊天機器人
    • 多語言文本處理

七、總結

NLTK 是學習 NLP 的絕佳起點,它提供了清晰的 API 和豐富的資源,適合教學和快速原型開發。通過本文的介紹,你已經掌握了 NLTK 的核心功能,包括分詞、詞性標注、情感分析等。接下來,不妨動手實踐,用 NLTK 解決一個實際問題吧!


推薦資源

  • NLTK 官方文檔
  • 《Natural Language Processing with Python》(鳥書)

希望本文能幫助你開啟 NLP 之旅!如果有任何問題,歡迎在評論區交流 😊

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/76611.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/76611.shtml
英文地址,請注明出處:http://en.pswp.cn/web/76611.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ElementUI中checkbox v-model綁定值為布爾、字符串或數字類型

這篇博客介紹了在Vue.js中使用El-Checkbox組件時,如何設置和處理v-model的布爾值和類型轉換。通過示例代碼展示了如何設置true-label和false-label屬性來改變選中狀態的值,適用于需要特定類型(如字符串或整數)的場景。v-model不能…

JBoss 項目修復筆記:繞開 iframe 安全問題,JSF 與 Angular 最小代價共存方案

JBoss 項目修復筆記:繞開 iframe 安全問題,JSF 與 Angular 最小代價共存方案 本篇筆記銜接的內容為:JBoss WildFly 本地開發環境完全指南,里面簡單的描述了一下怎么配置 docker,在本地啟動一個可以運行的 JBoss 和 W…

Linux文件時間戳詳解:Access、Modify、Change時間的區別與作用

在 Linux 系統中,文件的這三個時間戳(Access、Modify、Change)分別表示不同的文件狀態變更時間,具體含義如下: 1. Access Time (Access) 含義:文件最后一次被訪問的時間(讀取內容或執行&#xf…

SpringBoot項目打包為window安裝包

SpringBoot項目打包為window安裝包 通過jpackage及maven插件的方式將springboot項目打包為exe或msi pom.xml 添加插件 <plugin><groupId>org.codehaus.mojo</groupId><artifactId>exec-maven-plugin</artifactId><version>3.1.0</vers…

pip永久換鏡像地址

要將 pip 永久設置為阿里云鏡像源&#xff0c;可以通過修改 pip 的全局配置文件來實現。以下是具體步驟&#xff1a; 步驟 1&#xff1a;創建或修改 pip 配置文件 根據你的操作系統&#xff0c;配置文件的路徑略有不同&#xff1a; Linux/macOS 配置文件路徑&#xff1a;~/.…

PI0 Openpi 部署(僅測試虛擬環境)

https://github.com/Physical-Intelligence/openpi/tree/main 我使用4070tisuper, 14900k,完全使用官方默認設置&#xff0c;沒有出現其他問題。 目前只對examples/aloha_sim進行測試&#xff0c;使用docker進行部署, 默認使用pi0_aloha_sim模型(但是文檔上沒找到對應的&…

XAttention

XAttention: Block Sparse Attention with Antidiagonal Scoring 革新Transformer推理的高效注意力機制資源?? ??論文鏈接??&#xff1a;XAttention: Block Sparse Attention with Antidiagonal Scoring ??代碼開源??&#xff1a;GitHub倉庫 XAttention是韓松團隊提…

前端中的浮動、定位與布局

在前端開發中&#xff0c;布局是構建網頁結構的基礎。而浮動&#xff08;float&#xff09;、定位&#xff08;position&#xff09;以及各種布局方法則是實現網頁布局的關鍵工具。 一、浮動&#xff08;Float&#xff09; 浮動是CSS中用于控制元素在頁面中排列方式的一種屬性…

Linux 動、靜態庫的實現

前言&#xff1a;當我們寫了一段代碼實現了一個方法&#xff0c;如果我們不想把方法的實現過程暴露給別人看&#xff0c;可以把代碼打包成一個庫&#xff0c;其中形成后綴為.a的是靜態庫&#xff0c;后綴為.so的為動態庫&#xff1b;當別人想使用你的方法時&#xff0c;把打包好…

ubuntu--字體設置

樣式和字體大小 在終端右鍵-->選擇"Preferences"-->勾選"Custom font": 選擇自己喜歡的樣式&#xff0c;然后通過size滑動條調整字體大小&#xff0c;選擇即可&#xff1a;

Qt核心知識總結

Qt核心知識總結 Qt 是一個功能強大、跨平臺的 C 應用程序開發框架&#xff0c;廣泛應用于圖形用戶界面&#xff08;GUI&#xff09;應用程序的開發&#xff0c;同時也支持非 GUI 應用程序的開發。本文將從入門到精通的角度&#xff0c;詳細解析 Qt 的核心知識點&#xff0c;幫…

Linux 進程概念補充 (自用)

進程概念 內核進程進程狀態內存泄漏進程調度。Linux真實調度算法環境變量 內核 狹義上的操作系統指的是 內核就是進程管理進程調度&#xff0c;文件系統等等。 廣義上的操作系統其實在外殼指令這些。封裝了系統調用的東西。 進程 課本概念程序的一個基本實例 內核觀點&#…

【dify實戰】agent結合deepseek實現基于自然語言的數據庫問答、Echarts可視化展示、Excel報表下載

使用dify agent實現數據庫智能問答&#xff0c;echarts可視化展示&#xff0c;excel報表下載 觀看視頻&#xff0c;您將學會 在dify下如何快速的構建一個agent&#xff0c;來完成數據分析工作&#xff1b;如何在AI的回復中展示可視化的圖表&#xff1b;如何在AI 的回復中加入E…

macos下 ~/.zshrc~ 和 ~/.zshrc

macos下 ~/.zshrc~ 和 ~/.zshrc ~/.zshrc通常是備份文件或臨時文件&#xff0c;可能由編輯器&#xff08;如vim&#xff09;創建&#xff0c;通常可以安全刪除&#xff0c;不會影響系統運行。 在Mac下&#xff0c;這種帶~后綴的備份文件通常是由以下情況產生&#xff1a; 常…

位運算---總結

位運算 基礎 1. & 運算符 : 有 0 就是 0 2. | 運算符 : 有 1 就是 1 3. ^ 運算符 : 相同為0 相異為1 and 無進位相加位運算的優選級 不用在意優先級,能加括號就加括號給一個數 n ,確定它的二進制位中第 x 位是 0 還是 1? 規定: 題中所說的第x位指:int 在32位機器下4個…

Java SpringBoot的自定義配置

一&#xff0c;一個類多個屬性的情況 application.properties配置文件寫法 my.config.ip127.0.0.1 my.config.port8080自定義配置類&#xff1a;MyTestConfig import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.context.properties…

Matlab FCM模糊聚類

1、內容簡介 Matlab 211-FCM模糊聚類 可以交流、咨詢、答疑 2、內容說明 略 3、仿真分析 略 4、參考論文 略

C++項目 —— 基于多設計模式下的同步異步日志系統(4)(雙緩沖區異步任務處理器(AsyncLooper)設計)

C項目 —— 基于多設計模式下的同步&異步日志系統&#xff08;4&#xff09;&#xff08;雙緩沖區異步任務處理器&#xff08;AsyncLooper&#xff09;設計&#xff09; 異步線程什么是異步線程&#xff1f;C 異步線程簡單例子代碼解釋程序輸出關鍵點總結擴展&#xff1a;使…

C# 使用 BinaryFormatter 和相關類型時的反序列化風險

C# 使用 BinaryFormatter 和相關類型時的反序列化風險 由來&#xff1a;在項目使用.NET Reactor 混淆 C# 的序列化和反序列化發現存在的問題&#xff0c;讀取文件時&#xff0c;轉化為對應的類數據有時候為空&#xff0c;所以就在網上搜索了相關知識&#xff0c;在此做個筆記以…

OpenCv高階(四)——角點檢測

一、角點檢測 在計算機視覺中&#xff0c;角點檢測是識別圖像中局部區域&#xff08;角點&#xff09;的關鍵技術&#xff0c;這些區域通常是兩條或多條邊緣的交點&#xff0c;具有豐富的結構信息&#xff0c;常用于圖像匹配、跟蹤、三維重建等任務。 Harris角點檢測算法是一…