主要内容

准备文本数据进行分析

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

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

  • case的变体,例如"new"和"new"

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

  • 带有噪声的词,例如“the”和“of”

  • 标点符号和特殊字符

  • HTML和XML标记

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

加载和提取文本数据

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

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

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

textData = data.Description;标签= 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令牌:爆管中施工剂正在喷洒冷却剂。令牌:搅拌器中的保险丝熔断了。9代币:东西继续从腰带上掉下来。7代币:从传送带上掉落的物品。13令牌:扫描仪卷轴被分割,它很快就会开始弯曲。

要改进词源化,请在使用的文档中添加部分语音细节添加部分speechdetails.使用言语的附加部分函数在删除停止词和词根化之前。

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代币:掉落物品传送带。令牌:扫描仪卷轴分裂,很快开始曲线。

使使用的词义化normalizeWords

cleanedDocuments = normalizeWords (cleanedDocuments,“风格”“引理”);cleanedDocuments (1:10)
ans = 10×1 tokenizedDocument: 7 token:物品偶尔会卡在扫描仪卷轴上。8代币:响亮的响声来组装活塞。5代币:切断电源启动电站。4代币:油炸电容器组装器。4令牌:混合器脱扣保险丝。7令牌:爆管施工剂喷淋冷却剂。4令牌:熔丝吹混器。代币:东西继续滚下皮带。5代币:掉落物品传送带。令牌:扫描仪卷轴分裂,很快开始曲线。

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

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代代币:扫描仪卷轴分裂很快开始曲线

创建Bag-of-Words模型

创建一个词汇袋模型。

cleanedBag=BagoWords(清洁文档)
cleanedBag = bagOfWords with properties: Counts: [480×352 double

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

cleanedBag = removeInfrequentWords (cleanedBag, 2)
cleanedBag = bagOfWords with properties: Counts: [480×163 double] Vocabulary: [1×163 string] NumWords: 163 NumDocuments: 480

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

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

[cleanedBag, idx] = removeEmptyDocuments (cleanedBag);标签(idx) = [];cleanedBag
cleanedBag = bagOfWords with properties: Counts: [480×163 double] Vocabulary: [1×163 string] NumWords: 163 NumDocuments: 480

创建预处理功能

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

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

  1. 使用标记文本标记化文档

  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: Counts: [480×555 double] Vocabulary: [1×555 string] NumWords: 555 NumDocuments: 480

计算数据的减少量。

numWordsCleaned = cleanedBag.NumWords;numWordsRaw = rawBag.NumWords;减少= 1 - numwordcleaned /numWordsRaw
减少=0.7063

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

图次要情节(1、2、1)wordcloud (rawBag);标题(“原始数据”次要情节(1、2、2)wordcloud (cleanedBag);标题(“清除数据”

预处理函数

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

  1. 使用标记文本标记化文档

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

  3. 使使用的词义化normalizeWords

  4. 删除标点符号使用erasePunctuation

  5. 删除使用2个或更少字符的单词removeShortWords

  6. 删除超过15个字符的单词removeLongWords

函数文件= preprocessText (textData)标记文本。文件= tokenizedDocument (textData);删除一个停止词列表,然后对这些词进行lemmalize。改善%柠檬化,首先使用addPartOfSpeechDetails。= addPartOfSpeechDetails文件(文档);= removeStopWords文件(文档);文档= normalizeWords(文档,“风格”“引理”);%擦掉标点符号。= erasePunctuation文件(文档);%删除包含2个或更少字符的单词,以及包含15个或更多字符的单词%人物。documents=removeShortWords(documents,2);documents=removeLongWords(documents,15);结束

另请参阅

||||||||||

相关话题