简单的使用PYTHON对中文文本聚类并预测

浏览: 3548

前言

这篇文章会接着上篇分词文章讲,内容也是比较简单,并没有做太多的深究,主要是为了让自己尽快熟悉PYTHON的语言环境,至于算法之类的讲解这里就不多说了

工具:pycharm

环境:python2.7

在这里我导入习惯常用的包

# -*- coding: UTF-8 -*-
import sys
import os
from sklearn.datasets.base import Bunch
from sklearn import feature_extraction
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.feature_extraction.text import TfidfVectorizer
import cPickle as pickle
import scipy as sp
from numpy import *

设置一下我们的中文语言环境

#设中文语言环境
reload
(sys)
sys.setdefaultencoding("utf-8")

编写一个读文文本的函数

def readfile(path):
fp = open(path, "rb")
content = fp.read()
fp.close()
return content

这里我们需要构建一下我们的词空间永久化对象,这个是为了方便我们保存对象信息到文件里面去,当然,这里不做太多的操作,只是为了方便读取

tfidfspase = Bunch(target_name=[], label=[], filenames=[], contents=[],tdm=[],vocabulary={})

这里读取一下停用词表

stopword=r'E:\python_txt/stoplist.txt'
stplist=readfile(stopword).splitlines()

接来下是读取一下我们以前就已经分词好的文本

seg_path=r'E:\python_txt\answer\test/'
catelist=os.listdir(seg_path)
#将各个分类目录保存到词空间对象中
tfidfspase.target_name.extend(catelist)#循环读取分词后的文本,并保存到
print tfidfspase.target_name

Clipboard Image.png

#循环读取分词后的文本,并保存列表中
for mydir in catelist:
class_path=seg_path+mydir+'/'
file_list = os.listdir(class_path)
for file_path in file_list:
full_name=class_path+file_path
tfidfspase.label.append(mydir) # 保存文件分类标签
tfidfspase.filenames.append(full_name) # 保存当前文件的文件路径
tfidfspase.contents.append(readfile(full_name).strip())


开始计算TF-IDF权值

科普TF-IDFhttp://baike.baidu.com/link?url=85TvB8SSt9CLTNDJVGvZPpHeWQpVHwXeLitUSYUJs1vAS4yhMN7vtn2iF0anPgvvc-1jhqOmFzbV_QUu9qOtt_

这时候我们的词空间持久化对象就已经构建好了,接下来就是使用sklearn中的TfidfVectorizer初始化词空间了 ,这里的停用词参数就是我们上面加载的数据,顺便打印一下我们才词频向量

vectorizer=TfidfVectorizer(stop_words=stplist,sublinear_tf=True)
transformer=TfidfTransformer()#该类会统计每个词语的IF-IDF权值
#文本转为词频矩阵,单独保存字典文件
tfidfspase.tdm=vectorizer.fit_transform(tfidfspase.contents)
tfidfspase.vocabulary=vectorizer.vocabulary
um_sample,num_features=tfidfspase.tdm.shape
print "sample:%d,features: %d"%(num_sample,num_features)

Clipboard Image.png

这里我们总共有862个文本,35万多个属性;

接下来就是就是我们的建模了,建模的这个步骤写的很简单,大神们就稍微看一下笑话吧,本人也在学习中;

这里设置分的簇的大小为5,因为目录分类就为5类,提前知道的

#构建K-MEAN模型
k=5
from sklearn.cluster import KMeans
km=KMeans(n_clusters=k,init="random",n_init=1,verbose=1)
km.fit(tfidfspase.tdm)

接下来我们对一个文档进行测试,这个文档是我们已经提前为它分好了词的。

#测试模型效果
test_path=r"E:\python_txt\answer\test\C7-History/C7-History001.txt"
test_content=[]
test_content.append(readfile(test_path).strip())
test_tfidf =vectorizer.transform(test_content)
print test_tfidf.shape

Clipboard Image.png

向量已经成功的生成,接下来就是我们给这个文档进行分类了,并打印类别

new_label=km.predict(test_tfidf)[0]
print "new_label:",new_label

Clipboard Image.png

OK!建模就讲到了这里,有兴趣的东西可以深究下去;

参考书籍

《机器学习系统设计》

推荐 2
本文由 夏尔康 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册