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

    xiaoxiao2022-07-03  112

    五、(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

    搞定收工。

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

    ↓↓↓↓

    最新回复(0)