当前位置:   article > 正文

贝叶斯文本分类python_scikit_learn 中朴素贝叶斯算法做文本分类的 实践总结

bayes.py给出了基于朴素贝叶斯的文本分类的简单例子。请读懂bayes.py,并利用该框

朴素贝叶斯算法对于分类非常高效 想了解的可以参考这篇博文:贝叶斯从浅入深详细解析,详细例子解释 - zwan0518的专栏 - 博客频道 - CSDN.NET贝叶斯从浅入深

先来做个小小总结说明

在这之前我还从没写过python

这东西,接到这个小项目的时候便去恶补了一天python

的基本语法和包安装以及一些基本包的使用(主要是数据库包还有编码以及scikit-learn的贝叶斯算法的api)。感觉python

还是比较容易上手的,大概花了一周时间就大致done了,准确率百分之八九十以上!(哈哈,这里有吹牛B的嫌疑)

行了,我们来开始工作吧(跟哥飞起....)第一步

首先我们创建一个目录 tlw(我名字的缩写) 写个 get_articke.py 的脚本脚本把我们数据库的文章全部弄出来写道一个文件里面去,结构是 :文章id,文章内容,文章分类

#!/usr/bin/python

# -*- coding: utf-8 -*-

import MySQLdb

import re

import sys

reload(sys)

#编码重置

sys.setdefaultencoding("utf8")

conn=MySQLdb.connect(db='db',host='host',port=3339,user='user',passwd='xiemeijiao5201314',charset='utf8')

cursor = conn.cursor()

cursor.execute("selectid,type,title, content_text, create_time, update_time,publish_time,origin_url,tag from sw_article_info where type is not null and replace(type,' ','')<>'' and type<>'推荐' and content_text is not null and replace(content_text,' ','')<>''")

rows = cursor.fetchall()

for row in rows:

contents = row[3].replace('\n','').replace(',','').replace('@','')

print row[0],",",contents,",",row[1]

cursor.close

我把推荐这个分类去掉了,原因是这个分类太变态,完全跟文章内容无关的嘛 是不是 (哥可是有心眼的)。

好了执行 ./get_articke.py >article.txt

倒数 3、2、1 ,然后ls 一下 我可以看见目路下多了一个 article.txt 文件,马上打开看下行数,我靠 3500 行 这....(这里,稍稍凌乱了下),3500 就3500吧,反正就是用来测试下的。

第二步

写一个 trainTDF.py 的脚本来生成我们的测试数据,这里各位亲们可以先去了解TfidfVectorizer 它会一次都处理好,生成词频矩阵,这是计算的基础哦。

#!/usr/bin/python

# -*- coding: utf-8 -*-

import os

import time

import re

import string

import sys

# 引入Bunch 构建python 存文件的对象

from sklearn.datasets.base import Bunch

import cPickle as pickle #这个是用来把python对象存文件用的

from sklearn.feature_extraction.text import TfidfVectorizer #用于生成tfidf的词频权重矩阵

import pandas as pd

from pandas import Series, DataFrame

import jieba #这个是python的分词模块,记得要先安装这个包哦

reload(sys)

sys.setdefaultencoding("utf8")

path = '/data/webapps/dataColl/sklearn/tlw/'

# 读取bunch对象

def _readbunchobj(path):

with open(path, "rb") as file_obj:

bunch = pickle.load(file_obj)

return bunch

# 写入bunch对象

def _writebunchobj(path, bunchobj):

with open(path, "wb") as file_obj:

pickle.dump(bunchobj, file_obj)引入需要的包,定义两个读写对象的方法,基本上scikit-lerning 是python 自带的包 但是 分词工具jieba 是要手动安装的,可以用pip 命令很方便的安装好

#定义下数组和字典

words_list = []

filename_list = []

category_list = []

#停用词是哥在

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/713423
推荐阅读
相关标签
  

闽ICP备14008679号