Matlab批量检测文本中某词的词频

说白了,就是你有几个词,比如“小李”,“鸣人”,“佐助”,你想批量检测一个文件夹下这几个名字在各文本中都出现了多少次,然后将结果写到一个新的文本中去,下面的这个代码很好地解决了你的问题,哈哈哈,不客气

clc;
close all;
dirs = dir('F:\hongloumeng\*.txt');%*号是通配符,读取当前路径下的所有的txt文件
writein = fopen('result.txt','a');%这里是新开一个文本文件供写入结果
% dircell=struct2cell(dirs)';%结构体转换成元胞数组,并将结果转置一下,让第一列全为文件名
% filenames = dircell(:,1);%(:,1)代表所有行的第一列
for j = 1:120                %这里之所以设为120,是因为红楼梦一共120章啊,哈哈
    %fid = dlmread(['F:\hongloumeng\',dirs(j).name],''0,1)
    fid = fopen(dirs(j).name,'r');
    if fid == -1
        disp('Can not open the file');
        return 
    end
    dict = char('贾宝玉','宝玉','通灵宝玉','林黛玉','黛玉','薛宝钗','宝钗','王熙凤','凤丫头','凤姐','史湘云','湘云','秦可卿','秦氏','妙玉','贾迎春','迎春','贾巧姐','巧姐','贾惜春','惜春','贾元春','元春','贾探春','探春','李纨','李氏'); %字典,你要查找的关键字
    freq = zeros(size(dict,1),1);%频率
    while(~feof(fid))
        aLine = fgetl(fid);
        disp(aLine)
        for i = 1:size(dict,1)%deblank使用原因:词语长度不一,dict生成时,会在短的词语后面加空格,查找的时候必须去掉,否则搜索不到
            re = strfind(aLine,deblank(dict(i,:)));%strfind函数可以返回查找对象的位置
            freq(i) = freq(i) + length(re);
        end
    end
    for i = 1:size(dict,1)
        disp([dict(i,:),'出现次数:',num2str(freq(i))])
        fprintf(writein,'%s ',num2str(freq(i)));
    end
    fprintf(writein,'\n');
    fclose(fid);
end

 


版权声明:本文为sand8o8time原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。