主要内容

为分析准备文本数据

这个例子展示了如何创建一个函数来清理和预处理文本数据以供分析。

文本数据可能很大,可能包含大量的噪声,这会对统计分析产生负面影响。例如,文本数据可以包含以下内容:

  • 大小写的变化,例如"new"和"new"

  • 单词形式的变化,例如“walk”和“walking”

  • 增加噪音的单词,例如停顿词the和of

  • 标点符号和特殊字符

  • HTML和XML标记

这些词云演示了应用于工厂报告的一些原始文本数据和相同文本数据的预处理版本的词频分析。

加载和提取文本数据

加载示例数据。该文件factoryReports.csv包含工厂报告,包括每个事件的文本描述和分类标签。

文件名=“factoryReports.csv”;数据= readtable(文件名,“TextType”“字符串”);

从字段中提取文本数据描述,以及字段中的标签数据类别

textData = data.Description;标签=数据。类别;textData (1:10)
ans =10×1的字符串“物品偶尔会卡在扫描仪线轴上。”“巨大的咔啦咔啦声和砰砰声来自装配活塞。”“当工厂启动时,电力会被切断。”“装配器里的电容器烧坏了。”“搅拌器把保险丝弄断了。”爆裂的管道中正在喷洒冷却剂。“搅拌机里的保险丝烧断了。”“东西继续从皮带上掉下来。”“从传送带上掉下来的东西。”“扫描器卷轴裂开了,很快就会开始弯曲。”

创建令牌化文档

创建一个标记文档数组。

cleanedDocuments = tokenizedDocument(textData);cleanedDocuments (1:10)
ans = 10×1 tokenizedDocument: 10 token:项目偶尔会卡在扫描仪线轴中。11代币:响亮的咔嗒声和砰砰声来自组装活塞。11代币:启动工厂时会断电。6令牌:装配器中的炸电容器。5代币:搅拌器触发了保险丝。10令牌:爆裂管中施工剂正在喷冷却剂。8代币:熔断器熔断。9代币:东西继续从腰带上掉下来。7令牌:从传送带上掉落的物品。记号:扫描器卷轴已分裂,它将很快开始弯曲。

在使用的文档中增加词性细节,可以提高词性addPartOfSpeechDetails.使用addPartOfSpeech在删除停止词和lemmatizing之前。

cleanedDocuments = addPartOfSpeechDetails(cleanedDocuments);

像“a”、“and”、“to”和“the”(被称为停止词)这样的单词会给数据添加噪音。方法删除停止词列表removeStopWords函数。使用removeStopWords函数之前使用normalizeWords函数。

cleanedDocuments = removeStopWords(cleanedDocuments);cleanedDocuments (1:10)
ans = 10×1 tokenizedDocument: 7 token:项目偶尔卡在扫描仪线轴上。8代币:响亮的咔嗒咔嗒的声音来组装活塞。5代币:切断电源启动装置。4令牌:油炸电容器汇编。4令牌:混合器跳闸保险丝。7令牌:爆管建造剂喷涂冷却剂。4令牌:熔断器熔断。6代币:东西继续从皮带上掉下来。5令牌:坠落物品传送带。8 .令牌:扫描仪卷筒分裂,很快开始弯曲。

把这些词用normalizeWords

cleanedDocuments = normalizeWords(cleanedDocuments,“风格”“引理”);cleanedDocuments (1:10)
ans = 10×1 tokenizedDocument: 7 token:项目偶尔会卡在扫描仪线轴。8 .令牌:响亮的咔嗒声,砰的一声,来组装活塞。5令牌:切断电源启动装置。4令牌:fry电容汇编器。4令牌:混合器跳闸保险丝。7令牌:爆管施工剂喷雾冷却剂。4令牌:熔断器吹混合器。6代币:东西继续从皮带上掉下来。5 . token:坠落物品传送带。8 .令牌:扫描仪卷筒分裂,很快开始弯曲。

把文件上的标点符号擦掉。

cleanedDocuments = erasePunctuation(cleanedDocuments);cleanedDocuments (1:10)
ans = 10×1 tokenizedDocument: 6个标志:物品偶尔卡在扫描仪线轴上7个标志:响叮当声来装配活塞4个标志:切断电源启动装置3个标志:炸电容器装配器3个标志:混合器跳闸熔断器6个标志:爆裂管道结构剂喷雾冷却剂3个标志:熔断器吹混合器5个标志:东西继续滚落皮带4个标志:下落物品传送带6个标志:扫描仪卷轴分裂很快开始弯曲

删除2个或更少字符的单词,以及15个或更多字符的单词。

cleanedDocuments = removeShortWords(cleanedDocuments,2);cleanedDocuments = removeLongWords(cleanedDocuments,15);cleanedDocuments (1:10)
ans = 10×1 tokenizedDocument: 6个标志:物品偶尔卡在扫描仪线轴上7个标志:响叮当声来装配活塞4个标志:切断电源启动装置3个标志:炸电容器装配器3个标志:混合器跳闸熔断器6个标志:爆裂管道结构剂喷雾冷却剂3个标志:熔断器吹混合器5个标志:东西继续滚落皮带4个标志:下落物品传送带6个标志:扫描仪卷轴分裂很快开始弯曲

创建词袋模型

创建一个单词袋模型。

cleanedBag = bagOfWords(cleanedDocuments)
cleanedBag = bagOfWords有属性:计数:[480×352 double]词汇:[1×352 string] NumWords: 352 NumDocuments: 480

删除单词袋模型中出现次数不超过两次的单词。

cleanedBag = removeInfrequentWords(cleanedBag,2)
cleanedBag = bagOfWords有属性:计数:[480×163 double]词汇:[1×163 string] NumWords: 163 NumDocuments: 480

一些预处理步骤,如removeInfrequentWords在字袋模型中留下空文档。为了确保预处理后字袋模型中没有空文档,使用removeEmptyDocuments作为最后一步。

从单词袋模型中删除空文档,并从标签

[cleanedBag,idx] = removeEmptyDocuments(cleanedBag);Labels (idx) = [];cleanedBag
cleanedBag = bagOfWords有属性:计数:[480×163 double]词汇:[1×163 string] NumWords: 163 NumDocuments: 480

创建预处理函数

创建一个执行预处理的函数是很有用的,这样您就可以用相同的方式准备不同的文本数据集合。例如,可以使用一个函数,以便使用与训练数据相同的步骤对新数据进行预处理。

创建一个对文本数据进行标记和预处理的函数,以便将其用于分析。这个函数preprocessText,执行以下步骤:

  1. 使用标记化文本tokenizedDocument

  2. 删除一个停止使用的单词列表(例如“and”,“of”和“the”)removeStopWords

  3. 把这些词用normalizeWords

  4. 删除使用的标点符号erasePunctuation

  5. 删除含有2个或更少字符的单词removeShortWords

  6. 删除含有15个或更多字符的单词removeLongWords

使用示例预处理函数preprocessText准备文本数据。

newText =“分拣机发出很大的噪音。”;newDocuments = preprocessText(newText)
newDocuments = tokenizedDocument: 6令牌:分拣机发出很大的噪音

与原始数据比较

将预处理数据与原始数据进行比较。

rawDocuments = tokenizedDocument(textData);rawBag = bagOfWords(rawDocuments)
rawBag = bagOfWords有属性:计数:[480×555 double]词汇:[1×555 string] NumWords: 555 NumDocuments: 480

计算数据的缩减。

numwordcleaned = cleanedBag.NumWords;numWordsRaw = rawBag.NumWords;reduce = 1 - numwordscaled /numWordsRaw
还原= 0.7063

通过使用词云可视化两个单词包模型,比较原始数据和清理后的数据。

figure subplot(1,2,1) wordcloud(rawBag);标题(“原始数据”) subplot(1,2,2) wordcloud(cleanedBag);标题(“清除数据”

预处理功能

这个函数preprocessText,依次执行以下步骤:

  1. 使用标记化文本tokenizedDocument

  2. 删除一个停止使用的单词列表(例如“and”,“of”和“the”)removeStopWords

  3. 把这些词用normalizeWords

  4. 删除使用的标点符号erasePunctuation

  5. 删除含有2个或更少字符的单词removeShortWords

  6. 删除含有15个或更多字符的单词removeLongWords

函数documents = preprocessText(textData)标记文本。documents = tokenizedDocument(textData);删除一个停止词列表,然后将单词lem化。。改善首先使用addPartOfSpeechDetails。文档= addPartOfSpeechDetails(文档);文档= removeStopWords(文档);文档= normalizeWords“风格”“引理”);删除标点符号。文档= erasePunctuation(文档);删除2个或更少字符的单词,以及15个或更多字符的单词%字符。documents = removeShortWords(documents,2);documents = removeLongWords(documents,15);结束

另请参阅

||||||||||

相关的话题