使用多词短语分析文本数据
这个例子展示了如何使用n-gram频率计数分析文本。
n-gram是的元组 连续的单词。例如,一个bigram(当 )是一对连续的单词,如“heavy rainfall”。一个uniggram(当 )是一个单字。n-grams袋模型记录了不同n-grams在文档集合中出现的次数。
使用bag-of-n-grams模型,可以在原始文本数据中保留更多关于单词排序的信息。例如,一袋n-grams模型更适合捕捉文本中出现的短语,如“大雨”和“雷暴风”。
要创建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
.
使用示例预处理函数preprocessText
准备文本数据。
documents = preprocessText(textData);文档(1:5)
ans = 5×1 tokenizedDocument: 6令牌:物品偶尔卡住扫描仪线轴7令牌:响亮的咔咔声来装配活塞4令牌:切断电源启动装置3令牌:炸电容器装配3令牌:混合器跳闸保险丝
创建Bigrams的Word Cloud
首先使用。创建一袋n-grams模型来创建一个biggram词云bagOfNgrams
,然后将模型输入到wordcloud
.
要计算长度为2的n-grams (bigrams),使用bagOfNgrams
使用默认选项。
(文件)
袋子= bagOfNgrams属性:计数:[480×921 double]词汇:["项目" "偶尔" "得到" "卡住" "扫描仪" "大声" "嘎嘎" "砰" "声音" "来" "汇编" "切断" "电源" "开始" "炸" "电容器" "混频器" "旅行" "爆裂" "管道"…]Ngrams: [921×2字符串]ngram长度:2 NumNgrams: 921 NumDocuments: 480
使用单词云可视化n-grams袋模型。
图wordcloud(袋);标题(文本数据:预处理Bigrams)
拟合主题模型到n - grams袋
潜狄利克雷分配(Latent Dirichlet Allocation, LDA)模型是一种在文档集合中发现潜在主题并推断主题中的单词概率的主题模型。
创建一个包含10个主题的LDA主题模型fitlda
.该函数通过将n-grams视为单个单词来拟合LDA模型。
mdl = fitlda(包,10,Verbose=0);
把前四个主题想象成词云。
图tiledlayout (“流”);为I = 1:4 nexttile wordcloud(mdl, I);标题(“LDA主题”+ i)结束
词云突出了LDA主题中常见的共出现的重词。该函数根据指定LDA主题的概率,用大小绘制二图。
使用较长的短语分析文本
要分析使用较长短语的文本,请指定NGramLengths
选项bagOfNgrams
是一个更大的值。
当使用较长的短语时,在模型中保留停止词会很有用。例如,为了检测短语“is not happy”,在模型中保留停止词“is”和“not”。
预处理文本。删除标点符号erasePunctuation
,以及标记化使用tokenizedDocument
.
cleanTextData = eraspunctuation (textData);documents = tokenizedDocument(cleanTextData);
要计算长度为3的n-grams (triggram),使用bagOfNgrams
并指定NGramLengths
等于3。
bag = bagOfNgrams(文档,ngram长度=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
.
函数documents = preprocessText(textData)将文本数据转换为小写。cleanTextData = lower(textData);标记文本。documents = tokenizedDocument(cleanTextData);删除标点符号。documents = eraspunctuation(文档);删除一个停止词列表。documents = removeStopWords(文档);删除2个或更少字符的单词,以及15个或更多字符的单词%字符。文档= removeShortWords(文档,2);documents = removeLongWords(documents,15);把这些词简化。文档= addPartOfSpeechDetails(文档);文档= normalizeWords(文档,样式=“引理”);结束
另请参阅
tokenizedDocument
|bagOfWords
|removeStopWords
|erasePunctuation
|removeLongWords
|removeShortWords
|bagOfNgrams
|normalizeWords
|topkngrams
|fitlda
|ldaModel
|wordcloud
|addPartOfSpeechDetails