Matlab中分析字符串数组的文本数据
目录
分析字符串数组的文本数据
将文本文件导入字符串数组
清理字符串数组
根据频率对单词进行排序
绘制单词频率图
用表收集基本统计信息
分析字符串数组的文本数据
下面示例演示如何以字符串数组形式存储文件中的文本、按单词频率对其进行排序、绘制结果图,以及收集文件中找到的单词的基本统计信息。
将文本文件导入字符串数组
使用 fileread
函数读取莎士比亚的十四行诗中的文本。fileread
会以 1×100266 字符向量的形式返回文本。
sonnets = fileread('sonnets.txt');
sonnets(1:35)ans = 'THE SONNETSby William Shakespeare'
使用 string
函数将文本转换为字符串。然后,使用 splitlines
函数按换行符对其进行拆分。sonnets
将变成一个 2625×1 字符串数组,其中每个字符串都包含这些诗中的一行。显示 sonnets
的前五行。
sonnets = string(sonnets);
sonnets = splitlines(sonnets);
sonnets(1:5)ans = 5x1 string array"THE SONNETS""""by William Shakespeare"""""
清理字符串数组
要计算 sonnets
中的单词的频率,请首先删除空字符串和标点符号对其进行清理。然后,将其重构为一个以元素形式包含单个单词的字符串数组。
从该字符串数组中删除不含字符 (""
) 的字符串。将 sonnets
的每个元素都与 ""
(空字符串)进行比较。从 R2017a 开始,可以使用双引号创建字符串(包括空字符串)。TF
是一个逻辑向量,如果 sonnets
包含一个不含字符的字符串,该向量相应位置即包含一个 true 值。使用 TF
对 sonnets
进行索引,然后删除所有不含字符的字符串。
TF = (sonnets == "");
sonnets(TF) = [];
sonnets(1:10)ans = 10x1 string array"THE SONNETS""by William Shakespeare"" I"" From fairest creatures we desire increase,"" That thereby beauty's rose might never die,"" But as the riper should by time decease,"" His tender heir might bear his memory:"" But thou, contracted to thine own bright eyes,"" Feed'st thy light's flame with self-substantial fuel,"" Making a famine where abundance lies,"
将一些标点符号替换为空格字符。例如,替换句点、逗号和分号。保留撇号,因为它们可能是十四行诗中的某些单词的一部分,例如 light's。
p = [".","?","!",",",";",":"];
sonnets = replace(sonnets,p," ");
sonnets(1:10)ans = 10x1 string array"THE SONNETS""by William Shakespeare"" I"" From fairest creatures we desire increase "" That thereby beauty's rose might never die "" But as the riper should by time decease "" His tender heir might bear his memory "" But thou contracted to thine own bright eyes "" Feed'st thy light's flame with self-substantial fuel "" Making a famine where abundance lies "
去除 sonnets
的每个元素中的前导和尾随空格字符。
sonnets = strip(sonnets);
sonnets(1:10)ans = 10x1 string array"THE SONNETS""by William Shakespeare""I""From fairest creatures we desire increase""That thereby beauty's rose might never die""But as the riper should by time decease""His tender heir might bear his memory""But thou contracted to thine own bright eyes""Feed'st thy light's flame with self-substantial fuel""Making a famine where abundance lies"
将 sonnets
拆分为以单个单词为元素的字符串数组。可以使用 split
函数,根据空白字符或所指定的分隔符拆分字符串数组的元素。然而,split
要求字符串数组的每个元素都能拆分为相同数目的新字符串。sonnets
的元素包含不同数目的空格,因此不能拆分为相同数目的字符串。要对 sonnets
使用 split
函数,请编写一个 for 循环,以便每次对一个元素调用 split
。
使用 strings
函数创建空字符串数组 sonnetWords
。编写一个 for 循环,以使用 split
函数拆分 sonnets
的每个元素。将 split
的输出串联到 sonnetWords
中。sonnetWords
的每个元素都是 sonnets
中的单个单词。
sonnetWords = strings(0);
for i = 1:length(sonnets)sonnetWords = [sonnetWords ; split(sonnets(i))];
end
sonnetWords(1:10)ans = 10x1 string array"THE""SONNETS""by""William""Shakespeare""I""From""fairest""creatures""we"
根据频率对单词进行排序
查找 sonnetWords
中的唯一单词。计算单词的数量并根据其频率进行排序。
要将只有大小写不同的单词计算为同一个单词,请将 sonnetWords
转换为小写。例如,The
和 the
计算为同一个单词。使用 unique
函数查找唯一的单词。然后,使用 histcounts
函数计算每个唯一单词出现的次数。
sonnetWords = lower(sonnetWords);
[words,~,idx] = unique(sonnetWords);
numOccurrences = histcounts(idx,numel(words));
对 sonnetWords
中的单词按出现的次数(从最常见到最不常见)进行排序。
[rankOfOccurrences,rankIndex] = sort(numOccurrences,'descend');
wordsByFrequency = words(rankIndex);
绘制单词频率图
从最常见的单词到最不常见的单词绘制 Sonnets 中单词的出现情况图。Zipf 定律指出,大型主体文本中的单词出现情况分布遵循幂律分布。
loglog(rankOfOccurrences);
xlabel('Rank of word (most to least common)');
ylabel('Number of Occurrences');
显示 Sonnets 中最常见的十个单词。
wordsByFrequency(1:10)ans = 10x1 string array"and""the""to""my""of""i""in""that""thy""thou"
用表收集基本统计信息
计算 sonnetWords
中每个单词的总出现次数。计算出现次数占单词总数的百分比,并计算从最常见到最不常见的累积百分比。将单词和单词的基本统计信息写入表中。
numOccurrences = numOccurrences(rankIndex);
numOccurrences = numOccurrences';
numWords = length(sonnetWords);
T = table;
T.Words = wordsByFrequency;
T.NumOccurrences = numOccurrences;
T.PercentOfText = numOccurrences / numWords * 100.0;
T.CumulativePercentOfText = cumsum(numOccurrences) / numWords * 100.0;
显示最常见的十个单词的统计信息。
T(1:10,:)ans=10×4 tableWords NumOccurrences PercentOfText CumulativePercentOfText______ ______________ _____________ _______________________"and" 490 2.7666 2.7666 "the" 436 2.4617 5.2284 "to" 409 2.3093 7.5377 "my" 371 2.0947 9.6324 "of" 370 2.0891 11.722 "i" 341 1.9254 13.647 "in" 321 1.8124 15.459 "that" 320 1.8068 17.266 "thy" 280 1.5809 18.847 "thou" 233 1.3156 20.163
十四行诗中的最常见单词 and 出现了 490 次。最常见的十个单词加起来占文本的 20.163%。
Matlab中分析字符串数组的文本数据相关推荐
- Matlab:分析字符串数组的文本数据
Matlab:分析字符串数组的文本数据 将文本文件导入字符串数组 清理字符串数组 根据频率对单词进行排序 绘制单词频率图 用表收集基本统计信息 以下示例演示如何以字符串数组形式存储文件中的文本.按单词 ...
- 字符串搜索结果是数组 matlab,分析字符串数组的文本数据
将文本文件导入字符串数组 使用 fileread 函数读取莎士比亚的十四行诗中的文本.fileread 会以 1×100266 字符向量的形式返回文本. sonnets = fileread('son ...
- Matlab中创建字符串数组
目录 创建字符串数组 根据变量创建字符串数组 创建空字符串和缺失字符串 访问字符串数组的元素 访问字符串中的字符 将字符串串联到字符串数组中 向字符串追加文本 拆分.联接和排序字符串数组 创建字符串数 ...
- Matlab:创建字符串数组
Matlab:创建字符串数组 根据变量创建字符串数组 创建空字符串和缺失字符串 访问字符串数组的元素 访问字符串中的字符 使用方括号 [] 串联两个字符串数组. 向字符串追加文本 拆分.联接和排序字符 ...
- matlab将表格数据做成图,入excel表格数据做图-如何向matlab中导入excel表格 利用表格数据做出图......
如何向matlab中导入excel表格 利用表格数据做出图... 1.将待导入的矩阵结构的数据录入Excel中,录入时注意行列要跟原矩阵一一对应 2.录入完以后保存数据,为了后续步骤使用方便,命名时我 ...
- matlab时间字符串相减,Matlab中时间字符串处理总结
Matlab的日期与时间处理 Matlab用三种格式来表示日期与时间 (1)双精度型日期数字:一个日期型数字代表从公元0年到某一日期的的天数,例如,2008年8月26日夜时0点钟被表示为733646, ...
- MATLAB中的字符串处理
字符串的处理 在MATLAB中,字符串是用单引号括起来的字符序列 若字符串中的字符含有单引号,则该单引号字符要用两个单引号来表示 在MATLAB中,下标索引都是从1开始 案例: 建立一个字符串向量,然 ...
- c语言字 字符串转换成数组_C语言学习教程之详解C语言中的字符串数组
在C语言当中,字符串数组可以使用: char a[] [10]; 或者 char *a[]; 表示 第一种表示方式固定了每个字符串的最大大小.第二种没有字符串的大小限制. #include 总结 以上 ...
- 如何在JavaScript中获取字符串数组的字符串?
本文翻译自:How do you get a string to a character array in JavaScript? How do you get a string to a chara ...
最新文章
- 查询距离两天的数据_一张图就可以管理城建数据?!实景城市三维平台来了
- RunLoop的学习
- LeetCode 985. 查询后的偶数和
- oracle截取时间函数6,SQL 取日期部分函数
- shell检查硬盘分区空间
- 视音频格式基础知识视频压缩
- .net core 使用X509 私钥加密请求
- 大数据分析中常见的错误
- JAVA绘制拼音有问题
- 项目进度规划-甘特图
- 回归中的相关系数以及R平方值和Python应用举例
- 【放马过来---谈禅修打坐】
- 【linux基础1】linux命令行使用技巧
- 第四届中国(广东)国际“互联网+”博览会今日在佛山开幕 聚集工业“智慧”推动产业加速转型...
- 微型计算机celeron是,谁是赛扬D最佳搭档?微型计算机告诉你
- EXT151(QRC)安装步骤
- php视频怎么看,教你“如何巧看PHP中文网课程视频,悄悄成为高手?”
- Science综述: 微生物组是宿主新兴表型的来源
- 网络发展 OSI TCP/IP基本知识
- java计算机毕业设计基于安卓Android的校园快药APP-药店管理app