folder_path = '/Users/apple/Documents/七月在线/NLP/第2课/Lecture_2/Naive-Bayes-Text-Classifier/Database/SogouC/Sample'
stopwords_file = '/Users/apple/Documents/七月在线/NLP/第2课/Lecture_2/Naive-Bayes-Text-Classifier/stopwords_cn.txt'

下载地址:链接:https://pan.baidu.com/s/1O5mW04PlulaCW5TUd93OUg  密码:ubkq

然后切换Python2.7,跑下面代码就可以进行自然语言入门了

#coding: utf-8
#python 2.7 运行正确'''经典的新闻主题分类,用朴素贝叶斯做。#2018-06-10  June Sunday the 23 week, the 161 day SZ
数据来源:链接:https://pan.baidu.com/s/1_w7wOzNkUEaq3KAGco19EQ 密码:87o0
朴素贝叶斯与应用
文本分类问题
经典的新闻主题分类,用朴素贝叶斯做。朴素贝叶斯进行文本分类的基本思路是先区分好训练集与测试集,对文本集合进行分词、去除标点符号等特征预处理的操作,然后使用条件独立假设, 将原概率转换成词概率乘积,再进行后续的处理。 贝叶斯公式 + 条件独立假设 = 朴素贝叶斯方法 基于对重复词语在训练阶段与判断(测试)阶段的三种不同处理方式,我们相应的有伯努利模型、多项式模型和混合模型。 在训练阶段,如果样本集合太小导致某些词语并未出现,我们可以采用平滑技术对其概率给一个估计值。 而且并不是所有的词语都需要统计,我们可以按相应的“停用词”和“关键词”对模型进行进一步简化,提高训练和判断速度。'''import os
import time
import random
import jieba  #处理中文
#import nltk  #处理英文
import sklearn
from sklearn.naive_bayes import MultinomialNB
import numpy as np
import pylab as pl
import matplotlib.pyplot as plt#粗暴的词去重
def make_word_set(words_file):words_set = set()with open(words_file, 'r') as fp:for line in fp.readlines():word = line.strip().decode("utf-8")if len(word)>0 and word not in words_set: # 去重words_set.add(word)return words_set# 文本处理,也就是样本生成过程
def text_processing(folder_path, test_size=0.2):folder_list = os.listdir(folder_path)data_list = []class_list = []# 遍历文件夹for folder in folder_list:new_folder_path = os.path.join(folder_path, folder)files = os.listdir(new_folder_path)# 读取文件j = 1for file in files:if j > 100: # 怕内存爆掉,只取100个样本文件,你可以注释掉取完breakwith open(os.path.join(new_folder_path, file), 'r') as fp:raw = fp.read()## 是的,随处可见的jieba中文分词jieba.enable_parallel(4) # 开启并行分词模式,参数为并行进程数,不支持windowsword_cut = jieba.cut(raw, cut_all=False) # 精确模式,返回的结构是一个可迭代的genertorword_list = list(word_cut) # genertor转化为list,每个词unicode格式jieba.disable_parallel() # 关闭并行分词模式data_list.append(word_list) #训练集listclass_list.append(folder.decode('utf-8')) #类别j += 1## 粗暴地划分训练集和测试集data_class_list = zip(data_list, class_list)random.shuffle(data_class_list)index = int(len(data_class_list)*test_size)+1train_list = data_class_list[index:]test_list = data_class_list[:index]train_data_list, train_class_list = zip(*train_list)test_data_list, test_class_list = zip(*test_list)#其实可以用sklearn自带的部分做#train_data_list, test_data_list, train_class_list, test_class_list = sklearn.cross_validation.train_test_split(data_list, class_list, test_size=test_size)# 统计词频放入all_words_dictall_words_dict = {}for word_list in train_data_list:for word in word_list:if all_words_dict.has_key(word):all_words_dict[word] += 1else:all_words_dict[word] = 1# key函数利用词频进行降序排序all_words_tuple_list = sorted(all_words_dict.items(), key=lambda f:f[1], reverse=True) # 内建函数sorted参数需为listall_words_list = list(zip(*all_words_tuple_list)[0])return all_words_list, train_data_list, test_data_list, train_class_list, test_class_listdef words_dict(all_words_list, deleteN, stopwords_set=set()):# 选取特征词feature_words = []n = 1for t in range(deleteN, len(all_words_list), 1):if n > 1000: # feature_words的维度1000breakif not all_words_list[t].isdigit() and all_words_list[t] not in stopwords_set and 1<len(all_words_list[t])<5:feature_words.append(all_words_list[t])n += 1return feature_words# 文本特征
def text_features(train_data_list, test_data_list, feature_words, flag='nltk'):def text_features(text, feature_words):text_words = set(text)## -----------------------------------------------------------------------------------if flag == 'nltk':## nltk特征 dictfeatures = {word:1 if word in text_words else 0 for word in feature_words}elif flag == 'sklearn':## sklearn特征 listfeatures = [1 if word in text_words else 0 for word in feature_words]else:features = []## -----------------------------------------------------------------------------------return featurestrain_feature_list = [text_features(text, feature_words) for text in train_data_list]test_feature_list = [text_features(text, feature_words) for text in test_data_list]return train_feature_list, test_feature_list# 分类,同时输出准确率等
def text_classifier(train_feature_list, test_feature_list, train_class_list, test_class_list, flag='nltk'):## -----------------------------------------------------------------------------------if flag == 'nltk':## 使用nltk分类器train_flist = zip(train_feature_list, train_class_list)test_flist = zip(test_feature_list, test_class_list)classifier = nltk.classify.NaiveBayesClassifier.train(train_flist)test_accuracy = nltk.classify.accuracy(classifier, test_flist)elif flag == 'sklearn':## sklearn分类器classifier = MultinomialNB().fit(train_feature_list, train_class_list)test_accuracy = classifier.score(test_feature_list, test_class_list)else:test_accuracy = []return test_accuracyprint "start"## 文本预处理
folder_path = '/Users/apple/Documents/七月在线/NLP/第2课/Lecture_2/Naive-Bayes-Text-Classifier/Database/SogouC/Sample'
all_words_list, train_data_list, test_data_list, train_class_list, test_class_list = text_processing(folder_path,test_size=0.2)# 生成stopwords_set
stopwords_file = '/Users/apple/Documents/七月在线/NLP/第2课/Lecture_2/Naive-Bayes-Text-Classifier/stopwords_cn.txt'
stopwords_set = make_word_set(stopwords_file)## 文本特征提取和分类
# flag = 'nltk'
flag = 'sklearn'
deleteNs = range(0, 1000, 20)
test_accuracy_list = []
for deleteN in deleteNs:# feature_words = words_dict(all_words_list, deleteN)feature_words = words_dict(all_words_list, deleteN, stopwords_set)train_feature_list, test_feature_list = text_features(train_data_list, test_data_list, feature_words, flag)test_accuracy = text_classifier(train_feature_list, test_feature_list, train_class_list, test_class_list, flag)test_accuracy_list.append(test_accuracy)
print test_accuracy_list# 结果评价
#plt.figure()
plt.plot(deleteNs, test_accuracy_list)
plt.title('Relationship of deleteNs and test_accuracy')
plt.xlabel('deleteNs')
plt.ylabel('test_accuracy')
plt.show()
#plt.savefig('result.png')print "finished"'''
输出
start
Building prefix dict from the default dictionary ...
Loading model from cache /var/folders/4k/5k587rhs73n7z73g0ssc81km0000gn/T/jieba.cache
Loading model cost 0.364 seconds.
Prefix dict has been built succesfully.
[0.5263157894736842, 0.5263157894736842, 0.47368421052631576, 0.47368421052631576, 0.47368421052631576, 0.47368421052631576, 0.5263157894736842, 0.5789473684210527, 0.5263157894736842, 0.5263157894736842, 0.5263157894736842, 0.5263157894736842, 0.47368421052631576, 0.47368421052631576, 0.47368421052631576, 0.47368421052631576, 0.47368421052631576, 0.47368421052631576, 0.5263157894736842, 0.5263157894736842, 0.5263157894736842, 0.5263157894736842, 0.5263157894736842, 0.5263157894736842, 0.5263157894736842, 0.5263157894736842, 0.5263157894736842, 0.47368421052631576, 0.42105263157894735, 0.42105263157894735, 0.42105263157894735, 0.42105263157894735, 0.3684210526315789, 0.3684210526315789, 0.3684210526315789, 0.3684210526315789, 0.3684210526315789, 0.3684210526315789, 0.42105263157894735, 0.42105263157894735, 0.42105263157894735, 0.47368421052631576, 0.42105263157894735, 0.47368421052631576, 0.47368421052631576, 0.47368421052631576, 0.42105263157894735, 0.47368421052631576, 0.47368421052631576, 0.5263157894736842]'''

输出图像:

认识你是我们的缘分,同学,等等,学习人工智能,记得关注我。

微信扫一扫
关注该公众号

《湾区人工智能》

回复《人生苦短,我用Python》便可以获取下面的超高清电子书和代码

朴素贝叶斯进行新闻主题分类,有代码和数据,可以跑通相关推荐

  1. 朴素贝叶斯算法新闻文本分类

    新闻数据有20个主题,有10万多篇文章,每篇文章对应不同的主题,要求是任意输入一篇新的文章,模型输出这篇文章属于哪个主题. 一. 算法原理 1. 朴素贝叶斯方法 朴素贝叶斯方法涉及一些概率论知识,我们 ...

  2. 利用朴素贝叶斯进行新闻文本分类

    初探文本分类,本文使用的数据是5000条中文新闻文本数据,目的是使用朴素贝叶斯算法,对中文新闻文本进行分类预测.流程如下: 文本数据载入及清洗 搜狗新闻数据源:http://www.sogou.com ...

  3. python实现随机森林、逻辑回归和朴素贝叶斯的新闻文本分类

    实现本文的文本数据可以在THUCTC下载也可以自己手动爬虫生成, 本文主要参考:https://blog.csdn.net/hao5335156/article/details/82716923 nb ...

  4. 【阿旭机器学习实战】【11】文本分类实战:利用朴素贝叶斯模型进行邮件分类

    [阿旭机器学习实战]系列文章主要介绍机器学习的各种算法模型及其实战案例,欢迎点赞,关注共同学习交流. 本文主要介绍如何使用朴素贝叶斯模型进行邮件分类,置于朴素贝叶斯模型的原理及分类,可以参考我的上一篇 ...

  5. 朴素贝叶斯(西瓜数据集分类,社区恶意留言分类,垃圾邮件分类,新浪新闻分类),AODE分类器 代码实现

    朴素贝叶斯(西瓜数据集分类,社区恶意留言分类,垃圾邮件分类,新浪新闻分类),AODE分类器 代码实现 以下代码为本人学习后,修改或补充后的代码实现,数据集和原代码请参考:https://github. ...

  6. 机器学习:基于朴素贝叶斯(Naive Bayes)的分类预测

    目录 一.简介和环境准备 简介: 环境: 二.实战演练 2.1使用葡萄(Wine)数据集,进行贝叶斯分类 1.数据导入 2.模型训练 3.模型预测 2.2模拟离散数据集–贝叶斯分类 1.数据导入.分析 ...

  7. Python实现基于朴素贝叶斯的垃圾邮件分类 标签: python朴素贝叶斯垃圾邮件分类 2016-04-20 15:09 2750人阅读 评论(1) 收藏 举报 分类: 机器学习(19) 听说

    Python实现基于朴素贝叶斯的垃圾邮件分类 标签: python朴素贝叶斯垃圾邮件分类 2016-04-20 15:09 2750人阅读 评论(1) 收藏 举报  分类: 机器学习(19)  听说朴 ...

  8. 朴素贝叶斯网络进行邮件分类

    朴素贝叶斯网络进行邮件分类 将以前做的邮件分类做个总结! 总体框架 下面我们将通过以下几个步骤,编写一个现实可用的垃圾邮件过滤器: 准备邮件数据: 创建词汇表: 特征提取: 训练模型: 模型验证: 使 ...

  9. 使用朴素贝叶斯对电影评论分类

    本文内容: 使用朴素贝叶斯对电影评论分类 1.数据集讲解: 2.具体实现: 3.实验结果: 实验总结 代码地址 使用朴素贝叶斯对电影评论分类 1.数据集讲解: ​ 该数据集是IMDB电影数据集的一个子 ...

最新文章

  1. STP生成树协议原理及配置
  2. html+css学习笔记 [基础1]
  3. objective-c(反射)
  4. wav文件格式分析详解
  5. wordpress 主题教程-笔记
  6. OGNL与Struts2标签展示页面(一)
  7. MySql-phpMyAdmin
  8. vue js 对象下的原型_如何使用Vue.js和Pusher创建实时原型反馈应用程序
  9. python经典教程游戏_使用pygame制作经典小游戏:五子棋
  10. java 显示图片的一部分_求只显示图片上半部分三分之一的写法
  11. 编程语言对高手没有差别,对低手差别太明显
  12. OpenCV-图像处理(08、模糊图像一)
  13. Inpaint 9 简体中文【订阅版+Win/Mac】
  14. 只需三步即可将 Python 程序转换成 exe 文件
  15. android opencv 识别水果,opencv – 在一盘水果中检测香蕉或苹果,成功率 90%. (见图)...
  16. Java 笔试练习 01: T1~19
  17. Nginx配置Basic_Auth登录认证
  18. deep learning in NLP
  19. google gms安装
  20. VS2019的基本介绍

热门文章

  1. abb机器人searchl报错_ABB机器人编程指令与函数
  2. Java面试之锁-公平锁和非公平锁
  3. 动态数据源切换--AbstractRoutingDataSource
  4. 实例解读什么是Redis缓存穿透、缓存雪崩和缓存击穿
  5. Python+OpenCV图像处理之模糊操作
  6. Docker一些常用命令
  7. 07 设置View的显示与隐藏
  8. php 采集程序 宋正河
  9. VS.Net中向报表模板中传递参数与公式
  10. C#常用正则表达式收藏