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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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;还能用于艺术创作、交互装置、视觉特效等场景。 传统的“哈哈镜”往往是针对整张图像做某种镜像或扭曲变换…