文本分类流程:
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]
"