主要内容

使用字符串数组分析文本数据

这个示例展示了如何将文件中的文本存储为字符串数组,按频率对单词进行排序,绘制结果,并收集文件中找到的单词的基本统计信息。

导入文本文件到字符串数组

读莎士比亚十四行诗中的段落fileread函数。fileread返回文本为1 × 100266个字符向量。

十四行诗“sonnets.txt”);十四行诗(1时35)抵达
《莎士比亚十四行诗》

将文本转换为字符串字符串函数。然后,用换行符分隔它splitlines函数。十四行诗变成一个2625 × 1的字符串数组,其中每个字符串包含诗歌中的一行。的前五行十四行诗

十四行诗=字符串(十四行诗);十四行诗=分行诗(十四行诗);十四行诗(1:5)
ans =5 x1字符串十四行诗" "" "威廉·莎士比亚" "" ""

干净字符串数组

计算中单词的频率十四行诗,首先清除空字符串和标点符号。然后将其重塑为包含单个单词作为元素的字符串数组。

删除零字符的字符串(”“)从字符串数组。比较的每个元素十四行诗”“,空字符串。可以使用双引号创建字符串,包括空字符串。特遣部队逻辑向量在任何地方都包含真值吗十四行诗包含零字符的字符串。索引十四行诗特遣部队并删除所有零字符的字符串。

TF =(十四行诗==”“);十四行诗(TF) = [];十四行诗(1:10)
ans =10 x1字符串"十四行诗" "威廉·莎士比亚" "我" "我们希望最美丽的生物生长" "美丽的玫瑰永不凋谢" "但就像成熟的花朵会随着时间的流逝而凋谢" "他温柔的继承人会继承他的记忆" "而你,紧紧紧紧地紧紧拥抱着自己明亮的双眼" "用自我充实的燃料来喂养你的火焰" "在丰饶之地制造饥荒"

用空格字符替换一些标点符号。例如,替换句号、逗号和分号。保留撇号,因为它们可能是十四行诗中某些单词的一部分,例如光的

P = [“。”“?”“啊!””、“”;“":"];替换(十四行诗,p;”“);十四行诗(1:10)
ans =10 x1字符串"十四行诗"威廉·莎士比亚" "我" "从最美丽的生灵那里我们渴望增长" "这样美丽的玫瑰就永不凋谢" "但就像成熟的花朵会随着时间的流逝而凋谢" "他温柔的继承人可能会继承他的记忆" "但你只保留了自己明亮的眼睛" "用自我充实的燃料来喂养你的火焰" "在丰饶的地方制造饥荒"

的每个元素中去掉前导和尾随空格字符十四行诗

十四行诗=长条(十四行诗);十四行诗(1:10)
ans =10 x1字符串"十四行诗"威廉·莎士比亚" "我" "从最美丽的生灵那里我们渴望增长" "这样美丽的玫瑰就永不凋谢" "但就像成熟的花朵会随着时间的流逝而凋谢" "他温柔的继承人可能会继承他的记忆" "但你只保留了自己明亮的眼睛" "用自我充实的燃料来喂养你的火焰" "在丰饶的地方制造饥荒"

分裂十四行诗转换为字符串数组,其元素为单个单词。你可以使用分裂函数根据空白字符或指定的分隔符拆分字符串数组的元素。然而,分裂要求字符串数组的每个元素必须可整除为相等数量的新字符串。的元素十四行诗具有不同数量的空格,因此不能被分割成相同数量的字符串。要使用分裂函数十四行诗,编写一个for循环,调用分裂一次一个元素。

创建空字符串数组sonnetWords使用字符串函数。编写一个for循环,拆分的每个元素十四行诗使用分裂函数。连接的输出分裂sonnetWords。的每个元素sonnetWords一个单独的单词是从十四行诗

sonnetWords = strings(0);i = 1:length(sonnets) sonnetWords = [sonnetWords;分割(十四行诗(i)));结束sonnetWords (1:10)
ans =10 x1字符串“十四行诗”“威廉”“莎士比亚”“我”“来自”“最美丽的”“生物”“我们”

根据频率对单词进行排序

找出独特的单词sonnetWords。对它们进行计数,并根据它们出现的频率进行排序。

要将仅按大小写不同的单词计数为相同的单词,请转换sonnetWords小写。例如,算作同一个单词。查找独特的单词独特的函数。然后,计算每个唯一单词出现的次数histcounts函数。

sonnetWords = lower(sonnetWords);[words,~,idx] = unique(sonnetWords);numOccurrences = histcounts(idx, nummel (words));

把单词分类sonnetWords按出现次数,从最常见到最不常见。

[rankOfOccurrences,rankIndex] = sort(numocurrences,)“下”);wordbyfrequency = words(rankIndex);

词频图

将十四行诗中出现的单词从最常见的单词到最不常见的单词绘制出来。齐夫定律指出,在大型正文中,单词出现的分布遵循幂律分布。

重对数(rankOfOccurrences);包含(“单词排序(从最常用到最不常用)”);ylabel (“出现次数”);

图包含一个轴对象。axes对象包含line类型的对象。

展示十四行诗中最常见的十个单词。

wordsByFrequency (1:10)
ans =10 x1字符串”和“”“”“”“””“我”“在”“,”“你”“你”

收集表中的基本统计信息

中每个单词出现的总次数sonnetWords。计算出现的次数占单词总数的百分比,并计算从最常见到最不常见的累积百分比。将单词和基本统计数据写在表格中。

numOccurrences = numOccurrences(rankIndex);numOccurrences = numOccurrences';numWords = length(sonnetWords);T = table;words = wordbyfrequency;numOccurrences = numOccurrences;T.PercentOfText = numcurrences / numWords * 100.0;t.c ulativepercentoftext = cumsum(nummoccurrences) / numWords * 100.0;

显示十个最常见单词的统计信息。

T (1:10,:)
ans =10×4表“436 2.4617 5.2284”到“409 2.3093 7.5377”我的“371 2.0947 9.6324”的“370 2.0891 11.722”i“341 1.9254 13.647”在“321 1.8124 15.459”,“320 1.8068 17.266”thy“280 1.5809 18.847“thou”233 1.3156 20.163

十四行诗中最常见的词,,共出现490次。10个最常见的单词加起来占文本的20.163%。

另请参阅

||||||||||

相关的话题