MATLAB NLP 工具箱 文本預處理教程

文章目錄

  • 前言
  • 一、文本預處理核心步驟
  • 二、MATLAB 實現示例
  • 三、高級預處理技術
  • 四、預處理流程整合
  • 五、性能優化與注意事項
  • 六、實戰案例:IMDB 影評預處理


前言

以下是 MATLAB 自然語言處理 (NLP) 工具箱的文本預處理教程,涵蓋核心步驟、代碼實現及最佳實踐。


一、文本預處理核心步驟

文本清理:去除 HTML 標簽、特殊字符、數字等
分詞:將文本拆分為單詞或子詞
大小寫統一:通常轉換為小寫
停用詞過濾:移除無實際意義的高頻詞
詞干提取 / 詞形還原:將詞還原為基本形式
拼寫檢查與校正
向量化:將文本轉換為數值表示

二、MATLAB 實現示例

  1. 文本數據導入與基本清理
% 導入文本數據
documents = importdata('text_data.txt');% 創建文本表格
tbl = table(documents, 'VariableNames', {'Text'});% 清理HTML標簽
tbl.Text = replace(tbl.Text, '<[^>]+>', '');% 移除URL
tbl.Text = replace(tbl.Text, 'http\S+', '');% 移除特殊字符和數字
tbl.Text = replace(tbl.Text, '[^a-zA-Z]', ' ');% 統一大小寫
tbl.Text = lower(tbl.Text);
  1. 分詞與停用詞過濾
% 分詞
tokenizedData = tokenizedDocument(tbl.Text);% 移除停用詞
stopWords = stopwords('english');
cleanTokens = removeWords(tokenizedData, stopWords);% 移除短詞(長度<3)
cleanTokens = removeShortWords(cleanTokens, 3);
  1. 詞干提取與詞形還原
% 詞干提取(Porter算法)
stemmedTokens = stemWords(cleanTokens);% 詞形還原(更精確但計算開銷大)
lemmatizer = trainDocumentlemmatizer(cleanTokens);
lemmatizedTokens = lemmatize(lemmatizer, cleanTokens);
  1. 拼寫檢查與校正
% 創建拼寫檢查器
speller = spellChecker('text', cleanTokens);% 校正拼寫錯誤
correctedTokens = correctWords(speller, cleanTokens);
  1. 向量化表示
% 詞袋模型(BOW)
bag = bagOfWords(correctedTokens);% TF-IDF特征
tfidf = tfidf(bag);% 詞嵌入表示
embedding = wordEmbedding(correctedTokens, 'NumDimensions', 100);
docVectors = transform(embedding, correctedTokens);

三、高級預處理技術

  1. 詞性標注 (Part-of-Speech Tagging)
% 訓練詞性標注器
posTagger = trainPOSTagger(correctedTokens);% 對文本進行詞性標注
taggedTokens = posTag(posTagger, correctedTokens);% 僅保留名詞和動詞
nounsAndVerbs = selectByPOS(taggedTokens, {'NN', 'NNS', 'VB', 'VBD', 'VBG'});
  1. 命名實體識別 (NER)
% 加載預訓練NER模型
nerNet = nerNetwork('english');% 識別命名實體
entities = recognizeNamedEntities(nerNet, tbl.Text);% 提取人名和組織名
persons = entities(contains(entities.Type, 'PERSON'), :);
organizations = entities(contains(entities.Type, 'ORG'), :);
  1. 情感分析預處理
% 保留情感相關標點符號
tbl.Text = replace(tbl.Text, '[^a-zA-Z!?.]', ' ');% 擴展縮寫詞
tbl.Text = replace(tbl.Text, "can't", 'can not');
tbl.Text = replace(tbl.Text, "won't", 'will not');
% 更多縮寫詞替換...

四、預處理流程整合

function processedData = preprocessText(rawText)% 文本清理cleanedText = replace(rawText, '<[^>]+>', '');cleanedText = replace(cleanedText, 'http\S+', '');cleanedText = replace(cleanedText, '[^a-zA-Z]', ' ');cleanedText = lower(cleanedText);% 分詞tokens = tokenizedDocument(cleanedText);% 停用詞過濾stopWords = stopwords('english');tokens = removeWords(tokens, stopWords);% 詞干提取tokens = stemWords(tokens);% 拼寫校正speller = spellChecker('text', tokens);tokens = correctWords(speller, tokens);processedData = tokens;
end% 應用預處理到整個數據集
tbl.ProcessedText = preprocessText(tbl.Text);

五、性能優化與注意事項

大規模數據處理:

% 使用內存映射文件處理超大數據
tds = tabularTextDatastore('large_data.csv', 'TreatAsMissing', 'nan');
while hasdata(tds)tbl = read(tds);processedTbl = preprocessText(tbl);% 保存或進一步處理
end并行計算加速:
matlab
% 使用并行池加速預處理
parpool;
processedData = zeros(size(tbl, 1), 1);parfor i = 1:size(tbl, 1)processedData(i) = preprocessText(tbl.Text(i));
end常見問題處理:
中文 / 非英文文本:使用tokenizedDocument時指定語言,如'Language', 'chinese'
領域特定停用詞:擴展默認停用詞列表,添加領域無關詞匯
內存不足:分批處理數據,使用datastore對象

六、實戰案例:IMDB 影評預處理

% 加載IMDB影評數據集
tbl = readtable('imdb_reviews.csv');% 預處理文本
tbl.ProcessedText = preprocessText(tbl.Review);% 創建詞袋模型
bag = bagOfWords(tbl.ProcessedText);% 移除低頻詞(出現次數少于5)
bag = removeInfrequentWords(bag, 5);% 創建訓練集和測試集
cv = cvpartition(height(tbl), 'HoldOut', 0.2);
idxTrain = training(cv);
idxTest = test(cv);% 訓練分類器
classifier = trainDocumentClassifier(bag(idxTrain), tbl.Sentiment(idxTrain), ...'Classifier', 'svm', ...'TextRepresentation', 'tfidf');% 評估性能
YPred = classify(classifier, bag(idxTest));
accuracy = mean(YPred == tbl.Sentiment(idxTest));
fprintf('情感分析準確率: %.2f%%\n', accuracy*100);

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

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

相關文章

大模型的量化與雙重量化(1)

文章目錄 大模型量化的含義和作用什么是量化量化的作用具體示例 雙重量化的含義和作用什么是雙重量化雙重量化的具體實現雙重量化的作用具體示例對比實際應用場景 大模型量化的含義和作用 什么是量化 量化是指將神經網絡中的參數&#xff08;權重和激活值&#xff09;從高精度…

ES6 新增 API 方法

ES6 新增 API 方法 目錄 ES6 新增 API 方法背景介紹數組方法1. Array.from()2. Array.of()3. find/findIndex4. includes5. flat/flatMap 對象方法1. Object.assign()2. Object.keys/values/entries3. Object.getOwnPropertyDescriptors() 字符串方法1. includes/startsWith/en…

vscode使用ssh鏈接服務器

vscode SSH vscode先下載remote ssh的插件&#xff0c;隨后在左邊的菜單欄里選擇遠程。 點擊新建連接&#xff0c;輸入用戶名和地址&#xff0c;-p參數指定端口 ssh ubuntu{ip} -p xxx 隨后就可以正常連接了&#xff0c;這里使用普通用戶的用戶名密碼&#xff0c;別用root。 配…

基于FPGA的電子萬年歷系統開發,包含各模塊testbench

目錄 1.課題概述 2.系統仿真結果 3.核心程序與模型 4.系統原理簡介 5.完整工程文件 1.課題概述 基于FPGA的電子萬年歷系統開發,包含各模塊testbench。主要包含以下核心模塊&#xff1a; 時鐘控制模塊&#xff1a;提供系統基準時鐘和計時功能。 日歷計算模塊&#xff1a…

C++ 的 out_ptr 和 inout_ptr

1 問題的起因 1.1 T** 或 T&* ? C 的智能指針可以通過 get() 和 * 的重載得到原始指針 T*&#xff0c;遇到這樣的 C 風格的函數的時候&#xff1a; void Process(Foo *ptr);std::unique_ptr<Foo> sp ...;Process(sp.get()); //調用 Process 函數Process() 函數以…

取消 Conda 默認進入 Base 環境

在安裝 Conda 后&#xff0c;每次打開終端時默認會進入 base 環境。可以通過以下方法取消這一默認設置。 方法一&#xff1a;使用命令行修改配置 在終端中輸入以下命令&#xff0c;將 auto_activate_base 參數設置為 false&#xff1a; conda config --set auto_activate_ba…

數字計數--數位dp

1.不考慮前導零 2.每一位計數&#xff0c;就是有點“數頁碼”的意思 P2602 [ZJOI2010] 數字計數 - 洛谷 相關題目&#xff1a;記得加上前導零 數頁碼--數位dp-CSDN博客 https://blog.csdn.net/2301_80422662/article/details/148160086?spm1011.2124.3001.6209 #include…

Redis學習打卡-Day5-Redis 持久化

單點 Redis 的一些問題 數據丟失&#xff1a;Redis 是內存存儲&#xff0c;服務重啟可能會丟失數據。solution&#xff1a;實現 Redis 數據持久化。并發能力&#xff1a;單節點 Redis 并發能力雖然不錯&#xff0c;但也無法滿足如618這樣的高并發場景。solution&#xff1a;搭…

飛書知識問答深度體驗:企業AI應用落地的典范產品

飛書知識問答深度體驗&#xff1a;企業AI應用落地的典范產品 產品介紹-飛書知識問答是什么與常規通用大模型相比有何優點&#xff1f;大模型橫行的時代&#xff0c;飛書知識問答對普通人和企業有何影響呢&#xff1f; 場景示例-不同角色可以用飛書知識問答做什么&#xff1f;對…

Python打卡訓練營學習記錄Day34

知識點回歸&#xff1a; CPU性能的查看&#xff1a;看架構代際、核心數、線程數 GPU性能的查看&#xff1a;看顯存、看級別、看架構代際 GPU訓練的方法&#xff1a;數據和模型移動到GPU device上 類的call方法&#xff1a;為什么定義前向傳播時可以直接寫作self.fc1(x) CPU性…

Django的請求和響應+template模板

&#x1f31f; 如果這篇文章觸動了你的心弦&#xff0c;請不要吝嗇你的支持&#xff01; 親愛的讀者&#xff0c; 感謝你花時間閱讀這篇分享。希望這里的每一個字都能為你帶來啟發或是讓你會心一笑。如果你覺得這篇文章有價值&#xff0c;或者它解決了你一直以來的一個疑問&a…

Python |GIF 解析與構建(2):狀態機解析

Python &#xff5c;GIF 解析與構建&#xff08;2&#xff09;&#xff1a;狀態機解析 目錄 Python &#xff5c;GIF 解析與構建&#xff08;2&#xff09;&#xff1a;狀態機解析 引言 一、狀態機概述 狀態機的優勢與改進方向 總結 引言 在《Python &#xff5c;GIF 解…

PCB設計實踐(二十六)貼片電容與插件電容的全面解析:差異、演進與應用場景

一、核心差異&#xff1a;結構與性能對比 物理結構與封裝形式 貼片電容&#xff08;Surface Mount Device, SMD&#xff09;采用扁平化設計&#xff0c;外形多為長方體或圓柱體&#xff0c;直接通過焊盤固定在電路板表面。其封裝材料通常為陶瓷、聚合物或鋁電解層&#xff0c;外…

XC7A200T-2FFG1156I FPGA AMD Xilinx Artix-7

XC7A200T-2FFG1156I 是 AMD Xilinx Artix-7 系列的一款高性能低功耗 FPGA&#xff0c;采用 28 nm 高性能低功耗&#xff08;HPL&#xff09;工藝制造&#xff0c;核心電壓在 0.95 V–1.05 V 之間&#xff0c;可在 –40 C 至 100 C 工業溫度范圍內穩定工作 。 邏輯資源&#xff…

LVS + Keepalived + Nginx 高可用負載均衡系統實驗

1. 項目背景 在現代 Web 應用中&#xff0c;高可用性和負載均衡是至關重要的需求。本項目旨在通過 LVS&#xff08;Linux Virtual Server&#xff09;實現流量分發&#xff0c;通過 Keepalived 實現高可用性&#xff0c;通過 Nginx 提供后端服務。該架構能夠確保在單點故障的情…

window 顯示驅動開發-視頻內存供應和回收(一)

Windows 顯示驅動程序模型 (WDDM) 1.2 及更高版本用戶模式顯示驅動程序必須使用內存套餐和回收功能&#xff08;從Windows 8開始提供&#xff09;&#xff0c;以減少本地內存和系統內存中臨時表面所需的內存開銷。 最低 WDDM 版本&#xff1a;1.2 最低 Windows 版本&#xff…

什么是VR場景?VR與3D漫游到底有什么區別

在數字化時代&#xff0c;虛擬現實&#xff08;Virtual Reality, 簡稱VR&#xff09;場景與3D漫游作為兩種前沿技術&#xff0c;改變著人們的生活方式和體驗模式。通過計算機模擬真實或假想的場景&#xff0c;讓用戶仿佛身臨其境&#xff0c;并能與虛擬環境進行互動。盡管VR場景…

JAVA查漏補缺(2)

AJAX 什么是Ajax Ajax&#xff08;Asynchronous Javascript And XML&#xff09;&#xff0c;即是異步的JavaScript和XML&#xff0c;Ajax其實就是瀏覽器與服務器之間的一種異步通信方式 異步的JavaScript 它可以異步地向服務器發送請求&#xff0c;在等待響應的過程中&…

客服中心大模型應用演進路線:從傳統服務到超級智能助手的轉型

客服中心作為企業與客戶溝通的重要橋梁&#xff0c;近年來經歷了從人工服務到人工智能驅動的深刻變革。本文基于"客服中心大模型應用演進路線圖"&#xff0c;詳細解析客服中心從傳統模式向AI驅動智能服務的轉型歷程&#xff0c;剖析每個發展階段的特點、應用場景及關…

使用 OpenCV 實現“隨機鏡面墻”——多鏡片密鋪的哈哈鏡效果

1. 引言 “哈哈鏡”是一種典型的圖像變形效果&#xff0c;通過局部鏡面反射產生扭曲的視覺趣味。在計算機視覺和圖像處理領域&#xff0c;這類效果不僅有趣&#xff0c;還能用于藝術創作、交互裝置、視覺特效等場景。 傳統的“哈哈鏡”往往是針對整張圖像做某種鏡像或扭曲變換…