使用matlab来统计一个Txt文本中的每个汉字的个数
同学向我请教的题目,说实话很久没有用matlab了,但始终还有一些使用matlab的经验,最后总归是解决了。题目如下:
一、题目:
请任意找1篇中文小说全文存入txt,然后编程将单词分离并统计每个汉字出现的次数后存入Excel表格。
二、解题思路
首先我们通过题目理解知道我们的目的是使用matlab统计出txt文本当中每个汉字的个数,我将其分为三个部分来完成。
1)读取txt文件,去除统计结果当中包含的标点符号
读取txt文档的方式有很多,最后我选择了使用textread函数来读取文件,然后将读取到的细胞数组转换成矩阵,再去除矩阵当中包含s矩阵中存在的标点符号和空格的值,即最后得到矩阵数据是纯汉字文本的。便于后面统计。
2)统计矩阵中每个字符的个数:
我们都知道matlab具有非常丰富的库函数,因此在想到统计字符串中的每个字符的个数时我第一时间就想到了去找一个具有这样功能的库函数。通过查询我找到了几种统计矩阵中每个元素的个数的函数,但是都有一定的限制,只能统计矩阵中不同数值的个数,而统计文本的最后才让我找到了tabulate()函数,它可以统计一个数组中各个元素出现的频数以及频率,包括字符在内都可以统计,因此我直接用它来进行统计读取到的文本数据中每个字符的频数。
3)将需要的数据存储为excel格式
我们使用tabulate()函数得到了相应的每个汉字的频数以及频率之后,但是我们只需要频数,因此我们只用将得到的矩阵的第一列和第二列的数据存入到excel当中。
三、源码
clc;
clear;
%读取txt文件
data = textread('E:/WorkSpace/matlab工作空间/test.txt','%2s');
%将读取到的细胞数组格式数据转换为char类型的矩阵
x = char(data);
%用s矩阵存储txt文本中存在的标点符号,没有列出所有标点符号依据文本而定
s = [',','。',';',' ',':','“','”','《','》','!','?'];
%去掉x矩阵当中的所有标点符号
for i = s
x(find(x==i))=[];
end
%统计x矩阵中每个字符的个数
result = tabulate(x);
%将统计到的数据输出为excel格式并存储到本机上
s = xlswrite('E:/WorkSpace/matlab工作空间/test.xls', result(:,1:2));
四、结果分析
我以西游记.txt第一回为测试数据得到统计结果,
输入txt数据:
统计结果截取输出的excel结果的一段为例。
这里附上西游记.txt文本的下载:
链接: https://pan.baidu.com/s/1YjBVkwhZpmIspjZ9BMPiFA
提取码: chfy 复制这段内容后打开百度网盘手机App,操作更方便哦
五、我的感受
一其他专业同学跑来问我这个问题应该怎么做,我觉得还不是很难就帮他写好了代码,一开始咱也没想要啥钱,纯属出于同学之情帮一个忙。谁曾想我将代码发给他之后他竟然看不懂,说他这门选修课什么都没学到,然后叫我再帮他写一下报告,有偿。我说这不好吧;无奈他是真的不会,所以我就只能花了两个小时帮他把代码重新整理了一遍,然后又写报告。最后做完了他就给我转了80块钱,害,钱不钱的真的是,有就更好,没有也没啥嘛,同学一场。这里我也把所有代码和分析都贴出来以供大家学习,要是看得过也请点个关注呀!有帮助的同学也需要感谢一下那位替大家付费了的同学。感谢!!!