目录

分析字符串数组的文本数据

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

清理字符串数组

根据频率对单词进行排序

绘制单词频率图

用表收集基本统计信息


分析字符串数组的文本数据

下面示例演示如何以字符串数组形式存储文件中的文本、按单词频率对其进行排序、绘制结果图,以及收集文件中找到的单词的基本统计信息。

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

使用 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中分析字符串数组的文本数据相关推荐

  1. Matlab:分析字符串数组的文本数据

    Matlab:分析字符串数组的文本数据 将文本文件导入字符串数组 清理字符串数组 根据频率对单词进行排序 绘制单词频率图 用表收集基本统计信息 以下示例演示如何以字符串数组形式存储文件中的文本.按单词 ...

  2. 字符串搜索结果是数组 matlab,分析字符串数组的文本数据

    将文本文件导入字符串数组 使用 fileread 函数读取莎士比亚的十四行诗中的文本.fileread 会以 1×100266 字符向量的形式返回文本. sonnets = fileread('son ...

  3. Matlab中创建字符串数组

    目录 创建字符串数组 根据变量创建字符串数组 创建空字符串和缺失字符串 访问字符串数组的元素 访问字符串中的字符 将字符串串联到字符串数组中 向字符串追加文本 拆分.联接和排序字符串数组 创建字符串数 ...

  4. Matlab:创建字符串数组

    Matlab:创建字符串数组 根据变量创建字符串数组 创建空字符串和缺失字符串 访问字符串数组的元素 访问字符串中的字符 使用方括号 [] 串联两个字符串数组. 向字符串追加文本 拆分.联接和排序字符 ...

  5. matlab将表格数据做成图,入excel表格数据做图-如何向matlab中导入excel表格 利用表格数据做出图......

    如何向matlab中导入excel表格 利用表格数据做出图... 1.将待导入的矩阵结构的数据录入Excel中,录入时注意行列要跟原矩阵一一对应 2.录入完以后保存数据,为了后续步骤使用方便,命名时我 ...

  6. matlab时间字符串相减,Matlab中时间字符串处理总结

    Matlab的日期与时间处理 Matlab用三种格式来表示日期与时间 (1)双精度型日期数字:一个日期型数字代表从公元0年到某一日期的的天数,例如,2008年8月26日夜时0点钟被表示为733646, ...

  7. MATLAB中的字符串处理

    字符串的处理 在MATLAB中,字符串是用单引号括起来的字符序列 若字符串中的字符含有单引号,则该单引号字符要用两个单引号来表示 在MATLAB中,下标索引都是从1开始 案例: 建立一个字符串向量,然 ...

  8. c语言字 字符串转换成数组_C语言学习教程之详解C语言中的字符串数组

    在C语言当中,字符串数组可以使用: char a[] [10]; 或者 char *a[]; 表示 第一种表示方式固定了每个字符串的最大大小.第二种没有字符串的大小限制. #include 总结 以上 ...

  9. 如何在JavaScript中获取字符串数组的字符串?

    本文翻译自:How do you get a string to a character array in JavaScript? How do you get a string to a chara ...

最新文章

  1. 查询距离两天的数据_一张图就可以管理城建数据?!实景城市三维平台来了
  2. RunLoop的学习
  3. LeetCode 985. 查询后的偶数和
  4. oracle截取时间函数6,SQL 取日期部分函数
  5. shell检查硬盘分区空间
  6. 视音频格式基础知识视频压缩
  7. .net core 使用X509 私钥加密请求
  8. 大数据分析中常见的错误
  9. JAVA绘制拼音有问题
  10. 项目进度规划-甘特图
  11. 回归中的相关系数以及R平方值和Python应用举例
  12. 【放马过来---谈禅修打坐】
  13. 【linux基础1】linux命令行使用技巧
  14. 第四届中国(广东)国际“互联网+”博览会今日在佛山开幕 聚集工业“智慧”推动产业加速转型...
  15. 微型计算机celeron是,谁是赛扬D最佳搭档?微型计算机告诉你
  16. EXT151(QRC)安装步骤
  17. php视频怎么看,教你“如何巧看PHP中文网课程视频,悄悄成为高手?”
  18. Science综述: 微生物组是宿主新兴表型的来源
  19. 网络发展 OSI TCP/IP基本知识
  20. java计算机毕业设计基于安卓Android的校园快药APP-药店管理app

热门文章

  1. BUUCTF 传统知识+古典密码 1
  2. [17]岛屿数量和电话号码的字母组合
  3. item_fee-获得淘宝商品快递费用接口,接入获得淘宝天猫快递费用API文档说明
  4. Firebase iOS 远程配置教程
  5. 【ZYNQ】自定义IP核的封装
  6. VUE项目中的微信扫码登录
  7. Java 学习之路让我帮助很大的书籍
  8. SearchView搜索框的功能与用法
  9. CentOS7上搭建ftp服务
  10. 微信公众号推送消息给用户?