赞
踩
朴素贝叶斯算法对于分类非常高效 想了解的可以参考这篇博文:贝叶斯从浅入深详细解析,详细例子解释 - 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 = []
#停用词是哥在
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。