五、(3)朴素贝叶斯预测文章类别

五、(3)朴素贝叶斯预测文章类别

# -*- coding: utf-8 -*-
"""
Created on Mon May 20 12:25:00 2019

@author: zhangzongji
"""

import os   #用于读取文件
import jieba #用于给中文分词
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB

#preprocess用于将一个文本文档进行切词,并以字符串形式输出切词结果
def preprocess(path_name):
    text_with_spaces=""
    textfile=open(path_name,"r",encoding="utf-8").read()
    textcut=jieba.cut(textfile)
    for word in textcut:
        text_with_spaces+=word+" "
    return text_with_spaces


#loadtrainset用于将某一文件夹下的所有文本文档批量切词后,载入为训练数据集;返回训练集和每一个文本(元组)对应的类标号。
def loadtrainset(path,classtag):
    allfiles=os.listdir(path)
    processed_textset=[]
    allclasstags=[]
    for thisfile in allfiles:
        path_name=path+"/"+thisfile
        processed_textset.append(preprocess(path_name))
        allclasstags.append(classtag)
    return processed_textset,allclasstags

#输入所有的类别地址,根据自己需求下载各个类别的文本,然后放到同一文件夹下。
processed_textdata1,class1=loadtrainset(r"C:\Users\sun\Desktop\论文\算法代码\朴素贝叶斯算法\预测文章类别\所有文章类别\交通","交通")
processed_textdata2,class2=loadtrainset(r"C:\Users\sun\Desktop\论文\算法代码\朴素贝叶斯算法\预测文章类别\所有文章类别\教育","教育")
processed_textdata3,class3=loadtrainset(r"C:\Users\sun\Desktop\论文\算法代码\朴素贝叶斯算法\预测文章类别\所有文章类别\经济","经济")
processed_textdata4,class4=loadtrainset(r"C:\Users\sun\Desktop\论文\算法代码\朴素贝叶斯算法\预测文章类别\所有文章类别\军事","军事")
integrated_train_data=processed_textdata1+processed_textdata2+processed_textdata3+processed_textdata4
classtags_list=class1+class2+class3+class4


count_vector = CountVectorizer()
#该类会将文本中的词语转换为词频矩阵,矩阵元素a[i][j] 表示j词在i类文本下的词频
vector_matrix = count_vector.fit_transform(integrated_train_data)

#tfidf度量模型
train_tfidf = TfidfTransformer(use_idf=False).fit_transform(vector_matrix)
#将词频矩阵转化为权重矩阵,每一个特征值就是一个单词的TF-IDF值


#调用MultinomialNB分类器进行训练
clf = MultinomialNB().fit(train_tfidf,classtags_list)


#测试,本代码从网上下载了一篇关于军事的新闻进行预测。
testset=[]
testset.append(preprocess(r"C:\Users\sun\Desktop\论文\算法代码\朴素贝叶斯算法\预测文章类别\把预测文章放入此文件夹\军事新闻.txt"))
new_count_vector = count_vector.transform(testset)
new_tfidf= TfidfTransformer(use_idf=False).fit_transform(new_count_vector)
predict_result = clf.predict(new_tfidf) #预测结果
print("预测文章类别为:",predict_result)

运行结果如图示;

在这里插入图片描述
本文参考链接https://www.cnblogs.com/d0main/p/6914742.html

搞定收工。

“☺☺☺ 若本篇文章对你有一丝丝帮助,请帮顶、评论点赞,谢谢。☺☺☺”

↓↓↓↓

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值