这个例子展示了如何使用n-gram频率计数来分析文本。
n元组是的元组 连续的单词。例如,双字母组合(当的情况 )是一对连续的单词,如“heavy rainfall”。unigram(当的情况 )是一个单词。n-g包模型记录不同n-g出现在文档集合中的次数。
使用bag-of-n-grams模型,您可以在原始文本数据中保留更多关于单词排序的信息。例如,bag-of-n-grams模型更适合捕捉出现在文本中的短语,如“heavy rainfall”和“雷暴wind”。
要创建包-n-grams模型,请使用bagOfNgrams
.你可以输入bagOfNgrams
对象到其他文本分析工具箱函数中,例如wordcloud
和fitlda
.
加载示例数据。该文件factoryReports.csv
包含工厂报告,包括每个事件的文本描述和分类标签。删除带有空报告的行。
文件名=“factoryReports.csv”;data = readtable(文件名,“TextType”,“字符串”);
从表中提取文本数据并查看前几个报告。
textData = data.Description;textData (1:5)
ans =5×1的字符串“物品偶尔会卡在扫描仪的线轴上。”“组装器的活塞发出响亮的咔嗒咔嗒和砰砰的声音。”“启动核电站时,电力会被切断。”“组装器里的电容器被炸了。”“搅拌机把保险丝弄坏了。”
创建一个函数,用于标记和预处理文本数据,以便用于分析。这个函数preprocessText
列在示例的最后,执行以下步骤:
使用。将文本数据转换为小写较低的
.
使用标记文本tokenizedDocument
.
删除标点符号使用erasePunctuation
.
删除使用停止词的列表(如“and”,“of”和“the”)removeStopWords
.
删除使用2个或更少字符的单词removeShortWords
.
删除超过15个字符的单词removeLongWords
.
使使用的词义化normalizeWords
.
使用示例预处理函数preprocessTest
准备文本数据。
文件= preprocessText (textData);文档(1:5)
ans = 5×1 tokenizedDocument: 6代币:物品偶尔被卡住扫描仪卷轴7代币:响亮的叮当声巨响来组装器活塞4代币:切断电源启动工厂3代币:炸电容器组装器3代币:搅拌器trip fuse
创建一个双字词云,首先创建一个包-n-grams模型使用bagOfNgrams
,然后将模型输入wordcloud
.
要计算长度为2的n-g(双格),请使用bagOfNgrams
使用默认选项。
袋= bagOfNgrams(文档)
[1×351 string] Ngrams: [941×2 string] ngramlength: 2 NumNgrams: 941 NumDocuments: 480
使用单词云可视化包-n-grams模型。
图wordcloud(袋);标题(文本数据:预处理双字图)
Latent Dirichlet Allocation (LDA)模型是一种主题模型,它发现文档集合中的底层主题,并推断主题中的单词概率。
创建包含10个主题的LDA主题模型fitlda
.该函数通过将n-gram视为单个单词来符合LDA模型。
mdl = fitlda(包10“详细”, 0);
将前四个主题想象成词云。
数字为I = 1:4 subplot(2,2, I) wordcloud(mdl, I);标题(“LDA的话题”+ i)结束
在LDA主题中,单词clouds突出了常见的共现双格。函数根据特定LDA主题的概率绘制具有大小的双格图。
要使用较长的短语分析文本,请指定“NGramLengths”
选项bagOfNgrams
是一个更大的值。
当使用较长的短语时,在模型中保留停止词是很有用的。例如,要检测短语“is not happy”,在模型中保留停止词“is”和“not”。
预处理文本。用erasePunctuation
,并标记使用tokenizedDocument
.
cleanTextData = erasePunctuation (textData);文件= tokenizedDocument (cleanTextData);
要计算长度为3的n-g(三元组),请使用bagOfNgrams
并指定“NGramLengths”
是3。
袋= bagOfNgrams(文档,“NGramLengths”3);
使用单词云可视化包-n-grams模型。三元组的词云更好地显示了单个词的上下文。
图wordcloud(袋);标题(“文本数据:三元模型”)
查看前10个三元组和他们的频率计数使用topkngrams
.
台= topkngrams(袋,10)
台=10×3表Ngram计数NgramLength __________________________________ _____ ___________ " ”“”“搅拌机”14 3“在”“”“扫描仪”13 3“吹”“在”“9 3”“机器人”“手臂”7 3”“”“”“6 3”是“喷洒”“冷却剂”6 3”“时间”“6 3”时间”“”“时间”6 3”听到“”“”“6 3”的“地板”6 3
这个函数preprocessText
依次执行以下步骤:
使用。将文本数据转换为小写较低的
.
使用标记文本tokenizedDocument
.
删除标点符号使用erasePunctuation
.
删除使用停止词的列表(如“and”,“of”和“the”)removeStopWords
.
删除使用2个或更少字符的单词removeShortWords
.
删除超过15个字符的单词removeLongWords
.
使使用的词义化normalizeWords
.
函数文件= preprocessText (textData)%将文本数据转换为小写。cleanTextData =低(textData);标记文本。文件= tokenizedDocument (cleanTextData);%擦掉标点符号。= erasePunctuation文件(文档);删除一个停止词列表。= removeStopWords文件(文档);%删除2个或更少的单词,以及15个或更大的单词%字符。文件= removeShortWords(文件,2);= removeLongWords文档(文档、15);将单词义化。= addPartOfSpeechDetails文件(文档);文档= normalizeWords(文档,“风格”,“引理”);结束
addPartOfSpeechDetails
|bagOfNgrams
|bagOfWords
|erasePunctuation
|fitlda
|ldaModel
|normalizeWords
|removeLongWords
|removeShortWords
|removeStopWords
|tokenizedDocument
|topkngrams
|wordcloud