主要内容

为分析准备文本数据

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

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

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

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

  • 添加杂音的单词,比如"the"和"of"

  • 标点符号和特殊字符

  • HTML和XML标记

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

加载和提取文本数据

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

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

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

textData = data.Description;labels = data.Category;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个代币:从传送带上落下的物品。13标记:扫描器卷轴被分裂,它将很快开始弯曲。

为了提高词元化,可以在使用的文档中添加词性细节addPartOfSpeechDetails.使用addPartOfSpeech函数在删除停止词和lematizing之前。

cleanedDocuments = addPartOfSpeechDetails(cleanedDocuments);

像“a”、“and”、“to”和“the”(称为停止词)这样的词会给数据添加噪声。删除停止词列表使用removeStopWords函数。使用removeStopWords函数,再使用normalizeWords函数。

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

使用词汇normalizeWords

cleanedDocuments = normalizeWords(清洁文档,“风格”“引理”);cleanedDocuments (1:10)
ans = 10×1 tokenizedDocument: 7令牌:项目偶尔会卡在扫描仪线轴上。8令牌:总成活塞发出巨大的嘎嘎声。5令牌:切断电源启动工厂。4令牌:油炸电容器汇编。4令牌:混合器跳闸保险丝。7令牌:爆管施工剂喷雾冷却剂。4个代币:熔断器吹风机。6代币:东西继续滚下皮带。5 .令牌:掉落物品输送带。8 .令牌:扫描仪卷筒分裂,很快开始弯曲。

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

cleanedDocuments = eraspunctuation (cleanedDocuments);cleanedDocuments (1:10)
ans = 10×1 tokenized文档: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 tokenized文档:6个符号:物品偶尔卡住扫描仪线轴7个符号:巨大的嘎嘎声巨响来装配机活塞4个符号:切断电源启动装置3个符号:炸电容器装配机3个符号:混合器跳闸保险丝6个符号:爆裂管道施工剂喷雾冷却剂3个符号:保险丝吹风机5个符号:东西继续滚落带4个符号:掉落物品传送带6个符号:扫描仪卷轴分裂很快开始曲线

创建单词袋模型

创建单词袋模型。

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

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

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

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

从词袋模型中删除空文档,并从中删除相应的标签标签

[cleanedBag,idx] = removeEmptyDocuments(cleanedBag);标签(idx) = [];cleanedBag
cleanedBag = bagOfWords with properties:计数:[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 token:分拣机发出很大的噪音

与原始数据比较

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

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

计算数据的缩减。

numwordscished = cleanedBag.NumWords;numWordsRaw = rawBag.NumWords;reduce = 1 - numwordssccleaned /numWordsRaw .
还原= 0.7063

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

图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);删除一个停止词列表,然后对这些词进行lemalize。改善% lemmation,首先使用addPartOfSpeechDetails。文档= addPartOfSpeechDetails(文档);documents = removeStopWords(文档);文档= normalizeWords(文档,“风格”“引理”);删除标点符号。documents = eraspunctuation(文档);删除2个或更少字符的单词,以及15个或更多字符的单词%字符。文档= removeShortWords(文档,2);documents = removeLongWords(documents,15);结束

另请参阅

||||||||||

相关的话题