【python 编程】文本分类KNN算法实现及结果输出

文本分类流程:

1、特征选取:

网页爬取-》网页预处理获取汉字-》中文分词及词性标注-》保留名词-》词频统计-》输出词-文档矩阵-》计算词的信息增益值-》选取增益大的前N个词作为特征词-》计算每个词在文档中的权重-》生成文档-词矩阵-》对词的权重进行归一化处理-》即每个训练文档特征词及权重选取完毕。

2、匹配流程

获取新的网页重复上面步骤到分词,得到分词后统计此文档所对应的特征词的词频-》采用KNN等机器学习算法对要分类的文档与现有训练样本中的每个样本进行夹角余弦计算-》夹角余弦最大值为其所最接近的分类,分类成功。



KNN算法实现文本分类,程序及输出结果如下:

1、程序

# -*- coding: cp936 -*-
import urllib2
import re
import sys
import os
import math


#os.system(cmd)os.system('ls')


#class MyClass:
#    key_word
    
doc_no = 1
def start_fun():
        reload(sys)
        sys.setdefaultencoding('utf-8')
        print sys.getdefaultencoding()


def testfun():
        str_test = "http://hao123.com\" class is >china</b>"
        searchstr= re.findall(r'http://(.*?)\"',str_test)
        print searchstr[0]
def split_word(webpage_chinese_file,webpage_chinese_word_file):
        #调用命令行对中文文档进行分词处理
        os.system('cd splitword && ictclas_demo_c.exe ../'+ webpage_chinese_file + ' ../'+webpage_chinese_word_file )
def doc_word_count_deal(webpage_chinese_word_file,webpage_all_word_count_docno):
        global doc_no
        word_dicts = dict()


        #1、读取中文分词内容到缓存中
        word_file = open(webpage_chinese_word_file,"r")
        word_buf = word_file.read()
        word_file.close()


        #2、将分词以空格分隔并按/过滤提取分词中文内容和词性,不是名词或者长度小于2的不进行记录
        word_sets =  word_buf.split(' ')
        for i in word_sets:
                #print i
                if i == "" :
                        continue
                j = i.index('/')
                #print 'j='+str(j)
                k = i[j+1:j+2]
                i = i[0:j]
                
                
                #print i
                #word_dicts[i]如果不存在KEY则会报KeyError错误
                if len(i) <= 2 or (k != None and k != 'n'):
                        #print 'k='+k
                        continue
                if word_dicts.get(i) == None :
                        word_dicts[i] = 1
                else:
                        word_dicts[i] = word_dicts[i] + 1
        #sorted(word_dicts.viewvalues())
        #list ->word_dicts = [ v for v in sorted(word_dicts.values())]


        #3、将过滤后的中文分词按照出现次数进行排序,将排序好的数据存储到相应的文件中                       
        word_count = open(webpage_all_word_count_docno,'w')
        word_dicts_list = sorted([(v, k) for k, v in word_dicts.items()], reverse=True)
        for i in word_dicts_list:
                print i[1],i[0]
                word_count.write(str(doc_no)+" "+i[1]+" "+str(i[0])+"\n")
        word_count.close()
        doc_no = doc_no + 1
                        
        """
        for i in word_dicts.viewkeys():
                print i,word_dicts[i]
        "

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值