当前位置:   article > 正文

Matlab中分析字符串数组的文本数据_matlab数字挖掘将该语段中“string”出现的次数及其具体位置,并分析说明所输出的

matlab数字挖掘将该语段中“string”出现的次数及其具体位置,并分析说明所输出的

目录 

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

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

清理字符串数组

根据频率对单词进行排序

绘制单词频率图

用表收集基本统计信息


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

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

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

        使用 fileread 函数读取莎士比亚的十四行诗中的文本。fileread 会以 1×100266 字符向量的形式返回文本。

  1. sonnets = fileread('sonnets.txt');
  2. sonnets(1:35)
  3. ans =
  4. 'THE SONNETS
  5. by William Shakespeare'

        使用 string函数将文本转换为字符串。然后,使用 splitlines 函数按换行符对其进行拆分。sonnets 将变成一个 2625×1 字符串数组,其中每个字符串都包含这些诗中的一行。显示 sonnets 的前五行。

  1. sonnets = string(sonnets);
  2. sonnets = splitlines(sonnets);
  3. sonnets(1:5)
  4. ans = 5x1 string array
  5. "THE SONNETS"
  6. ""
  7. "by William Shakespeare"
  8. ""
  9. ""

清理字符串数组

        要计算 sonnets 中的单词的频率,请首先删除空字符串和标点符号对其进行清理。然后,将其重构为一个以元素形式包含单个单词的字符串数组。

        从该字符串数组中删除不含字符 ("") 的字符串。将 sonnets 的每个元素都与 ""(空字符串)进行比较。从 R2017a 开始,可以使用双引号创建字符串(包括空字符串)。TF 是一个逻辑向量,如果 sonnets 包含一个不含字符的字符串,该向量相应位置即包含一个 true 值。使用 TF 对 sonnets 进行索引,然后删除所有不含字符的字符串。

  1. TF = (sonnets == "");
  2. sonnets(TF) = [];
  3. sonnets(1:10)
  4. ans = 10x1 string array
  5. "THE SONNETS"
  6. "by William Shakespeare"
  7. " I"
  8. " From fairest creatures we desire increase,"
  9. " That thereby beauty's rose might never die,"
  10. " But as the riper should by time decease,"
  11. " His tender heir might bear his memory:"
  12. " But thou, contracted to thine own bright eyes,"
  13. " Feed'st thy light's flame with self-substantial fuel,"
  14. " Making a famine where abundance lies,"

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

  1. p = [".","?","!",",",";",":"];
  2. sonnets = replace(sonnets,p," ");
  3. sonnets(1:10)
  4. ans = 10x1 string array
  5. "THE SONNETS"
  6. "by William Shakespeare"
  7. " I"
  8. " From fairest creatures we desire increase "
  9. " That thereby beauty's rose might never die "
  10. " But as the riper should by time decease "
  11. " His tender heir might bear his memory "
  12. " But thou contracted to thine own bright eyes "
  13. " Feed'st thy light's flame with self-substantial fuel "
  14. " Making a famine where abundance lies "

        去除 sonnets 的每个元素中的前导和尾随空格字符。

  1. sonnets = strip(sonnets);
  2. sonnets(1:10)
  3. ans = 10x1 string array
  4. "THE SONNETS"
  5. "by William Shakespeare"
  6. "I"
  7. "From fairest creatures we desire increase"
  8. "That thereby beauty's rose might never die"
  9. "But as the riper should by time decease"
  10. "His tender heir might bear his memory"
  11. "But thou contracted to thine own bright eyes"
  12. "Feed'st thy light's flame with self-substantial fuel"
  13. "Making a famine where abundance lies"

        将 sonnets 拆分为以单个单词为元素的字符串数组。可以使用 split 函数,根据空白字符或所指定的分隔符拆分字符串数组的元素。然而,split 要求字符串数组的每个元素都能拆分为相同数目的新字符串。sonnets 的元素包含不同数目的空格,因此不能拆分为相同数目的字符串。要对 sonnets 使用 split 函数,请编写一个 for 循环,以便每次对一个元素调用 split

        使用 strings 函数创建空字符串数组 sonnetWords。编写一个 for 循环,以使用 split 函数拆分 sonnets 的每个元素。将 split 的输出串联到 sonnetWords 中。sonnetWords 的每个元素都是 sonnets 中的单个单词。

  1. sonnetWords = strings(0);
  2. for i = 1:length(sonnets)
  3. sonnetWords = [sonnetWords ; split(sonnets(i))];
  4. end
  5. sonnetWords(1:10)
  6. ans = 10x1 string array
  7. "THE"
  8. "SONNETS"
  9. "by"
  10. "William"
  11. "Shakespeare"
  12. "I"
  13. "From"
  14. "fairest"
  15. "creatures"
  16. "we"

根据频率对单词进行排序

        查找 sonnetWords 中的唯一单词。计算单词的数量并根据其频率进行排序。

        要将只有大小写不同的单词计算为同一个单词,请将 sonnetWords 转换为小写。例如,The 和 the 计算为同一个单词。使用 unique 函数查找唯一的单词。然后,使用 histcounts 函数计算每个唯一单词出现的次数。

  1. sonnetWords = lower(sonnetWords);
  2. [words,~,idx] = unique(sonnetWords);
  3. numOccurrences = histcounts(idx,numel(words));

        对 sonnetWords 中的单词按出现的次数(从最常见到最不常见)进行排序。

  1. [rankOfOccurrences,rankIndex] = sort(numOccurrences,'descend');
  2. wordsByFrequency = words(rankIndex);

绘制单词频率图

        从最常见的单词到最不常见的单词绘制 Sonnets 中单词的出现情况图。Zipf 定律指出,大型主体文本中的单词出现情况分布遵循幂律分布。

  1. loglog(rankOfOccurrences);
  2. xlabel('Rank of word (most to least common)');
  3. ylabel('Number of Occurrences');

                                            

        显示 Sonnets 中最常见的十个单词。

  1. wordsByFrequency(1:10)
  2. ans = 10x1 string array
  3. "and"
  4. "the"
  5. "to"
  6. "my"
  7. "of"
  8. "i"
  9. "in"
  10. "that"
  11. "thy"
  12. "thou"

用表收集基本统计信息

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

  1. numOccurrences = numOccurrences(rankIndex);
  2. numOccurrences = numOccurrences';
  3. numWords = length(sonnetWords);
  4. T = table;
  5. T.Words = wordsByFrequency;
  6. T.NumOccurrences = numOccurrences;
  7. T.PercentOfText = numOccurrences / numWords * 100.0;
  8. T.CumulativePercentOfText = cumsum(numOccurrences) / numWords * 100.0;

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

  1. T(1:10,:)
  2. ans=10×4 table
  3. Words NumOccurrences PercentOfText CumulativePercentOfText
  4. ______ ______________ _____________ _______________________
  5. "and" 490 2.7666 2.7666
  6. "the" 436 2.4617 5.2284
  7. "to" 409 2.3093 7.5377
  8. "my" 371 2.0947 9.6324
  9. "of" 370 2.0891 11.722
  10. "i" 341 1.9254 13.647
  11. "in" 321 1.8124 15.459
  12. "that" 320 1.8068 17.266
  13. "thy" 280 1.5809 18.847
  14. "thou" 233 1.3156 20.163

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/447557
推荐阅读
相关标签
  

闽ICP备14008679号