赞
踩
第一个分类任务,记录一下
语料库下载
一、进行手工分类
导师给的数据是两个文件夹,一个包含了以用户ID名为标题的一大堆txt(未分类),还有一个文件夹里面是已经分类好的男女性别ID的集合txt。
先要做的任务就是将未分类的txt分成两类(根据给的已经分类的id集合txt),这个分为三步:
1、新建男女分类的空文件夹。
2、提取id集合中的id,存在两个list里面.
3、提取未分类txt的文件名,对它们进行分类,如果是女的,将其复制txt到女文件夹。否则放到男文件夹。
最后得到结果如下:
其中female 和male文件夹中是已经分类好的txt文件。
二、进行分词
利用Jieba分词和去除停用词(这里我用的是全模式分词),每一篇文档为一行 用换行拼接,得到result.txt
fobj = open(new_folder_path + '//' + file, 'r', encoding='utf-8') # 打开样本
raw = fobj.read() # 读样本
word_cut = jieba.cut(raw,cut_all=True) # 对样本进行结巴分词
stopwords=stopwordslist('D:/pycharm/project1/tingyongci.txt') # 这里加载停用词的路径
三、用gensim.word2vec得到词向量模型
对result.txt进行模型训练
得到train.model(我用的维度50,min_count=1)
四、求和求平均得到文档向量
对每一篇文章的词向量进行求和,然后除以词数量,得到文档向量(维度为50的向量)。
其中70%划分到train_set,30%划分到test
利用numpy里面的sum函数对列求和
a=np.sum(ce,axis=0)
a.tolist()
a=[i/number for i in a] #求平均值后的文档向量
五、利用sklearn-svm进行分类
输入的是训练数据和训练标签(对应每一个文档向量的类别标签),进行训练。
预测则输入测试数据,得到测试标签(即测试分类结果)
如下:
核函数为rbf的时候效果最好。
clf=svm.SVC()
train_data_x = [d for (d, c) in train_set]
train_data_y = [c for (d, c) in train_set]
test_data_x = [d for (d, c) in test_set]
test_data_y = [c for (d, c) in test_set]
print("开始训练")
clf.fit(train_data_x,train_data_y)
result=clf.predict(test_data_x)
acc = accuracy_score(test_data_y,result)
print(acc)
print(classification_report(test_data_y, result,labels=class_list,target_names=class_name))
结果如下:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。