kNN文本分类器实现

本文介绍了一位作者在本科毕业设计中使用MATLAB实现的kNN文本分类器,通过TF-IDF算法进行特征加权,最终达到约64%的分类正确率。作者分享了实现思路和部分代码,欢迎交流。
摘要由CSDN通过智能技术生成

 

      本人本科毕业设计题目为:《基于摘要词频信息的论文分类方法的研究和实现》,属于文本分类(Text Classification)方面的内容。本人实现了kNN文本分类器,使用语言为Matlab(因为该脚本语言使用极为直观,且非常适合数据运算,尤其是矩阵运算,故选用Matlab进行仿真),最终分类正确率达到64%左右,具有一定实际意义,故分享一下本人实现的思路,一下代码均为个人编写,仅供参考!【一些细节问题未列出,欢迎提问交流】

Part I.文本预处理:

【说明,请将path改为存放数据库database1的绝对路径!】

 

clear;clc;
path = 'F:\【毕业生】\毕设\00000大论文\5\database1'; %公共路径

% 1、分词(得到向量):【[A] = textread('1.txt','%s','delimiter',',. ()');】
% 2、(统一大小写->小写字母)【A = lower(A);】、去除单个数字【data = delnumber(A)】;
% 3、去除停用词;
% 4、最终得到一个5*65的cell类型矩阵AfterPrepro,矩阵中每个元素均为结构体.

Fold_num = 5; %总共有5类
File_num = 65; %每类均含65篇文本
AfterPrepro = cell(Fold_num,File_num); %创建5*65的矩阵,每个元素均为结构体类型
for label = 1:Fold_num
    for file = 1:File_num
        file_path = strcat(path,'\',num2str(label),'\',num2str(file),'.txt');%文件路径
        %分词(得到cell类型列向量):
        tmp = textread(file_path,'%s','delimiter',',. ()'); 
        %统一大小写->小写字母 :
        tmp = lower(tmp);
         
        %去除单个数字 :
        tmp = delNumber(tmp);
        %去除停用词 :
        AfterPrepro{label,file}.text = delStopWords(tmp);%去除停用词后的文本
        %其他属性:类别label,序号seq
        AfterPrepro{label,file}.label = label;
        AfterPrepro{label,file}.seq = file;
    end
end

 

 

Part II. 特征加权(TF/IDF算法):

 

%关键词在文本中出现的频数freq;
%此类别文档的总数目【N = 65】;
%此类别文档中出现该关键词的文档频数num;
%计算该关键词的权重weight;

%加载经过预处理后得到的cell类型矩阵AfterPrepro:
load('F:\【毕业生】\毕设\00000大论文\5\programs\AfterPrepro.mat')

Fold_num = 5; %总共有5类
File_num = 65; %每类均含65篇文本
N = File_num;
for label = 1:Fold_num
    for seq = 1:File_num 
        AfterPrepro{label,seq}.tmp = freqStatistic(AfterPrepro{label,seq}.text); %用临时变量tmp进行词频统计,得到x*2的cell类型矩阵.
        AfterPrepro{label,seq}.text2 = AfterPrepro{label,seq}.tmp(:,1);%经词频统计后的文本(即AfterPrepro的新域text2,是x*1的cell类型矩阵).
        for n = 1:length(AfterPrepro{label,seq}.tmp(:,1))
            AfterPrepro{label,seq}.freq(n,1) = Af
  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 14
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值