# 構建詞匯表:自然語言處理中的關鍵步驟

構建詞匯表:自然語言處理中的關鍵步驟

在自然語言處理(NLP)任務中,詞匯表(Vocabulary)是文本數據預處理的核心組件之一。它將文本中的單詞或字符映射為數值索引,從而讓計算機能夠理解和處理語言數據。本文將詳細介紹如何使用 Python 構建一個基于字符的詞匯表,并通過一個具體的例子展示其過程。

1. 詞匯表的作用

在 NLP 中,文本數據通常是通過詞匯表進行編碼的。詞匯表的作用是將文本中的每個單詞或字符轉換為一個唯一的數值索引,這樣計算機就可以處理這些數據。例如,假設我們有一個詞匯表:

{'今': 0, '天': 1, '氣': 2, '真': 3, '好': 4, '<UNK>': 5, '<PAD>': 6}

那么,文本 “今天天氣真好” 可以被編碼為 [0, 1, 2, 3, 4]。如果文本中出現詞匯表中不存在的字符,如 “明”,則可以用 <UNK>(未知字符)來代替,即索引 5。

2. 構建詞匯表的步驟

2.1 準備數據

假設我們有一個 CSV 文件 simplifyweibo_4_moods.csv,其中包含了一些文本數據。文件的格式可能如下:

id,text
1,今天天氣真好
2,我咁要去打球
3,明天會下雨

我們的目標是從這些文本中提取字符,統計它們的頻率,并構建一個詞匯表。

2.2 編寫代碼

以下是構建詞匯表的完整代碼:

from tqdm import tqdm
import pickle as pkl# 定義全局變量
MAX_VOCAB_SIZE = 4760  # 詞表長度限制
UNK, PAD = '<UNK>', '<PAD>'  # 未知字,padding符號def build_vocab(file_path, max_size, min_freq):"""構建詞匯表函數:param file_path: 輸入文件路徑:param max_size: 詞匯表的最大大小:param min_freq: 單詞的最小出現頻率:return: 構建好的詞匯表(字典形式)"""# 定義分詞器,將輸入字符串逐字分割為字符列表tokenizer = lambda x: [y for y in x]# 初始化詞匯表字典vocab_dic = {}# 打開文件并逐行讀取with open(file_path, 'r', encoding='UTF-8') as f:i = 0  # 初始化計數器,用于跳過文件的第一行for line in tqdm(f):  # 使用tqdm顯示進度條if i == 0:  # 跳過文件的第一行(通常是表頭)i += 1continuelin = line[2:].strip()  # 去掉每行的前兩個字符,并去掉行首行尾的多余空格if not lin:  # 如果處理后的行為空,則跳過continue# 對當前行進行分字處理,并統計每個字符的出現頻率for word in tokenizer(lin):vocab_dic[word] = vocab_dic.get(word, 0) + 1# 按照字符的出現頻率從高到低排序,并過濾掉出現頻率小于min_freq的字符# 只保留前max_size個字符vocab_list = sorted([_ for _ in vocab_dic.items() if _[1] > min_freq], key=lambda x: x[1], reverse=True)[:max_size]# 重新構建詞匯表字典,將字符映射為索引值vocab_dic = {word_count[0]: idx for idx, word_count in enumerate(vocab_list)}# 將特殊符號UNK和PAD添加到詞匯表中,并分配索引值vocab_dic.update({UNK: len(vocab_dic), PAD: len(vocab_dic) + 1})# 打印構建好的詞匯表(可選,用于調試)print(vocab_dic)# 將詞匯表保存為一個.pkl文件,方便后續使用pkl.dump(vocab_dic, open('simplifyweibo_4_moods.pkl', 'wb'))# 打印詞匯表的大小print(f"Vocab size: {len(vocab_dic)}")return vocab_dic  # 返回構建好的詞匯表if __name__ == "__main__":# 調用build_vocab函數,構建詞匯表vocab = build_vocab('simplifyweibo_4_moods.csv', MAX_VOCAB_SIZE, 3)# 打印字符串'vocab',確認函數運行完成print('vocab')

2.3 代碼解析

  1. 分詞器tokenizer 是一個簡單的函數,將輸入字符串逐字分割為字符列表。
  2. 統計頻率:逐行讀取文件內容,統計每個字符的出現頻率。
  3. 過濾和排序:過濾掉出現頻率小于 min_freq 的字符,并按頻率從高到低排序,只保留前 max_size 個字符。
  4. 構建詞匯表:將字符映射為索引值,并添加特殊符號 <UNK><PAD>
  5. 保存詞匯表:將詞匯表保存為 .pkl 文件,方便后續加載和使用。

2.4 運行結果

輸入文件 simplifyweibo_4_moods.csv 的內容如下:
在這里插入圖片描述

運行代碼后,輸出如下:
在這里插入圖片描述

同時,詞匯表會被保存為 simplifyweibo_4_moods.pkl 文件。

3. 詞匯表的應用

構建好的詞匯表可以用于多種 NLP 任務,例如:

  • 文本分類:將文本編碼為數值序列,輸入到分類模型中。
  • 情感分析:分析文本的情感傾向。
  • 機器翻譯:將源語言文本編碼為數值序列,翻譯為目標語言。

4. 總結

構建詞匯表是 NLP 中的一個重要步驟。通過統計字符頻率、過濾低頻字符并映射為索引值,我們可以高效地處理文本數據。本文通過一個具體的例子展示了如何使用 Python 構建詞匯表,并保存為 .pkl 文件以便后續使用。希望這篇文章對你有所幫助!

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

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

相關文章

SQL進階知識:七、數據庫設計

今天介紹下關于數據庫設計的詳細介紹&#xff0c;并結合MySQL數據庫提供實際例子。 數據庫設計是確保數據庫能夠高效、安全地存儲和管理數據的關鍵環節。良好的數據庫設計可以提高查詢性能、減少數據冗余、確保數據完整性&#xff0c;并簡化數據維護。以下是關于數據庫設計的詳…

python如何取消word中的縮進

在python-docx中&#xff0c;取消縮進可以通過將相應的縮進屬性設置為None或0來實現。以下是取消不同類型縮進的方法&#xff1a; 取消左縮進 from docx import Documentdoc Document(existing_document.docx)for paragraph in doc.paragraphs:# 取消左縮進paragraph.paragr…

Docker拉取鏡像代理配置實踐與經驗分享

Docker拉取鏡像代理配置實踐與經驗分享 一、背景概述 在企業內網環境中&#xff0c;我們部署了多臺用于測試與學習的服務器。近期&#xff0c;接到領導安排&#xff0c;需在其中一臺服務器上通過Docker安裝n8n應用程序。然而在實際操作過程中&#xff0c;遭遇Docker官方鏡像庫…

【數字圖像處理】立體視覺基礎(1)

成像 成像過程&#xff1a;三維空間坐標到二維圖像坐標的變換 相機矩陣&#xff1a;建立三維到二維的投影關系 相機的使用步驟&#xff08;模型-視圖變換&#xff09;&#xff1a; &#xff08;1&#xff09;視圖變換 &#xff08;2&#xff09;模型變換 &#xff08;3&…

實驗4:列表與字典應用

目的 &#xff1a;熟練操作組合數據類型。 試驗任務&#xff1a; 1. 基礎&#xff1a;生日悖論分析。如果一個房間有23人或以上&#xff0c;那么至少有兩個人的生日相同的概率大于50%。編寫程序&#xff0c;輸出在不同隨機樣本數量下&#xff0c;23 個人中至少兩個人生日相同的…

c++之網絡編程

網絡編程&#xff1a;使得計算機程序能夠在網絡中發送和接受數據&#xff0c;從而實現分布式系統和網絡服務的功能。 作用&#xff1a;使應用程序能夠通過網絡協議與其他計算機程序進行數據交換 基本概念 套接字&#xff08;socket&#xff09;&#xff1a; 套接字是網絡通信…

【Harmony_Bug】forEach + asyncawait 的異步陷阱

一、問題描述 今天在做一個RDB的小項目時&#xff0c;遇到一個問題&#xff0c;因為沒報錯其實也是不算是BUG&#xff0c;以下描述時我就直接說關鍵點&#xff0c;其他代碼忽略。 我的數據模型初始化有六條數據如圖 在持久化層&#xff0c;通過initUserData這個方法執行插入。…

大腸桿菌誘導蛋白時OD600=0.6-0.8添加IPTG的思考-實驗操作系列-009

一、為什么用OD600表示菌液濃度&#xff1f; 1. 光密度與吸光值的關系 OD600是指在600納米波長下的光密度&#xff08;Optical Density&#xff09;&#xff0c;也就是通過細菌懸浮液的光的吸收程度。根據比爾-朗伯定律&#xff0c;光密度與溶液中光學活性物質&#xff08;如…

OpenHarmony - 小型系統內核(LiteOS-A)(十),魔法鍵使用方法,用戶態異常信息說明

OpenHarmony - 小型系統內核&#xff08;LiteOS-A&#xff09;&#xff08;十&#xff09; 十四、魔法鍵使用方法 使用場景 在系統運行出現無響應等情況時&#xff0c;可以通過魔法鍵功能確定系統是否被鎖中斷&#xff08;魔法鍵也無響應&#xff09;或者查看系統任務運行狀態…

CUDA編程之Grid、Block、Thread線程模型

一、線程模型:Grid、Block、Thread概念 ?1. 層級定義? ?Thread(線程)? CUDA中最基本的執行單元,對應GPU的單個CUDA核心(SP)。每個線程獨立執行核函數指令,擁有獨立的寄存器和局部內存空間?。 ?Block(線程塊)? 由多個線程組成(通常為32的倍數),是邏輯上的并…

實戰交易策略 篇十九:君山居士熊市交易策略

文章目錄 系列文章熊市三大特征熊市操作思維強勢重勢,弱勢重質搶反彈重要前提和五大原則反彈逃頂操盤其他炒股的至高境界力戒“三進三出”八大心理誤區八大戒律股市不敗之法系列文章 實戰交易策略 篇一:奧利弗瓦萊士短線交易策略 實戰交易策略 篇二:杰西利弗莫爾股票大作手…

Flutter IOS 真機 Widget 錯誤。Widget 安裝后系統中沒有

錯誤信息&#xff1a; SendProcessControlEvent:toPid: encountered an error: Error Domaincom.apple.dt.deviceprocesscontrolservice Code8 "Failed to show Widget com.xxx.xxx.ServerStatus error: Error DomainFBSOpenApplicationServiceErrorDomain Code1 "T…

【計算機視覺】CV實戰項目 - 深入解析基于HOG+SVM的行人檢測系統:Pedestrian Detection

深入解析基于HOGSVM的行人檢測系統&#xff1a;從理論到實踐 技術核心&#xff1a;HOGSVM檢測框架HOG特征原理SVM分類器 項目架構與數據準備INRIA Person數據集目錄結構 實戰指南&#xff1a;從零構建檢測系統環境配置完整訓練流程檢測應用 關鍵技術問題與解決方案1. 難例挖掘不…

day01_編程語言介紹丶Java語言概述丶開發環境搭建丶常用DOS命令

編程語言介紹 ?編程語言是一種用于人與計算機之間通信的語言&#xff0c;允許程序員編寫代碼&#xff0c;這些代碼告訴計算機要執行哪些操作?。編程語言可以被視為計算機可以理解并執行的指令集合&#xff0c;它是一種標準化的交流技巧&#xff0c;用于向計算機發出指令。?…

告別默認配置!Xray自定義POC開發指南

文章涉及操作均為測試環境,未授權時切勿對真實業務系統進行測試! 下載與解壓 官網地址: Xray GitHub Releases 根據系統選擇對應版本: Windows:xray_windows_amd64.exe.zipLinux:xray_linux_amd64.zipmacOS:xray_darwin_amd64.zip解壓后得到可執行文件(如 xray_linux_…

C語言編程--17.有效的括號

題目&#xff1a; 給定一個只包括 ‘(’&#xff0c;‘)’&#xff0c;‘{’&#xff0c;‘}’&#xff0c;‘[’&#xff0c;‘]’ 的字符串 s &#xff0c;判斷字符串是否有效。 有效字符串需滿足&#xff1a; 左括號必須用相同類型的右括號閉合。 左括號必須以正確的順序…

代碼隨想錄算法訓練營第60期第十七天打卡

今天我們繼續進入二叉樹的下一個章節&#xff0c;今天的內容我在寫今天的博客前大致看了一下部分題目難度不算大&#xff0c;那我們就進入今天的題目。 第一題對應力扣編號為654的題目最大二叉樹 這道題目的坑相當多&#xff0c;我第一次題目沒有看明白就是我不知道到底是如何…

Burp靶場JWT學習筆記1

JWT(JSON Web Token) 從其名字就可以看出來&#xff0c;它具有表示身份的作用&#xff0c;其本質是將用戶信息儲存到一串json字符串中再將其編碼得到一串token JWT由三部分組成&#xff0c;分別是 Header&#xff0c;Payload&#xff0c;Signatrue JWTBase64(Header).Base6…

第53.5講 | 小項目實戰:用 SHAP 值解釋農作物產量預測模型 [特殊字符][特殊字符]

目錄 ? 項目背景 &#x1f4e6; 所用工具 &#x1f4c1; 數據字段&#xff08;模擬&#xff09; &#x1f9d1;?&#x1f4bb; 代碼實現步驟 &#x1f3af; 解讀與啟發 &#x1f9e0; 項目拓展建議 ? 項目背景 我們使用一個簡化的玉米產量數據集&#xff08;可模擬實…

極狐GitLab 合并請求依賴如何解決?

極狐GitLab 是 GitLab 在中國的發行版&#xff0c;關于中文參考文檔和資料有&#xff1a; 極狐GitLab 中文文檔極狐GitLab 中文論壇極狐GitLab 官網 合并請求依賴 (PREMIUM ALL) 在極狐GitLab 16.6 中引入了對復雜合并依賴關系的支持&#xff0c;通過名為 remove_mr_blockin…