当前位置: 首页 > news >正文

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);

相关文章:

  • Flink基于Yarn多种启动方式详解
  • 【羊圈——状压 + DP / 记忆化搜索DP】
  • vue 水印组件
  • 第三十四天打卡
  • 线程的一些基本知识
  • FME入门系列教程7-基于FME的ArcGIS空间数据互操作技术研究与实践
  • 青少年编程与数学 02-020 C#程序设计基础 03课题、开始编程
  • onnx模型转入rknn3399平台上工作记录
  • Axure元件动作五:设置列表选中项
  • 蓝桥杯国14 互质
  • Vue+css实现扫描动画效果(使用@keyframes scan)
  • COZE工作流全场景变现新路径:小程序/网站封装集成
  • SDL2常用函数SDL事件处理:SDL_Event|SDL_PollEvent
  • 如何选择服务器机房托管服务?
  • OpenCV入门
  • Seata分布式事物案例及详解
  • 如何配置jmeter做分布式压测
  • Spring Boot + MyBatis-Plus实现操作日志记录
  • oracle数据库生成awr报告,排查数据库服务器CPU100%,系统卡顿,慢sql,根据sqlid查询关键信息,如会话SID,客户端机器名
  • MySQL 8.0 OCP 1Z0-908 题目解析(11)
  • 中山高端企业网站设计/今日头条荆州新闻
  • 漯河百度做网站电话/百度关键词排名点
  • 网站开发怎样/seo排名快速优化
  • 手机怎么做网站教程/广安seo外包
  • 有什么网站可以发布个人信息/网推拉新app推广接单平台
  • 网站后台搭建图文/站长之家seo概况查询