使用贝叶斯进行新闻分类
贝叶斯新闻分类任务
- 新闻数据集处理
爬取的新闻数据,需要我们对文本数据进行很多预处理才能使用
- 文本分词
通常我们处理的都是词而不是一篇文章
- 去停用词
停用词会对结果产生不好的影响,所以一定得把他们去剔除掉
- 构建文本特征
如何构建合适特征是自然语言处理中最重要的一步,这俩我们选择两种方案来进行对比
- 贝叶斯分类
基于贝叶斯算法来完成最终的分类任务
import csv
import jieba.analyse
import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB
df_news = pd.read_table(filepath_or_buffer='./bayes/data.txt',names=['category','theme','URL','content'],encoding='UTF-8')
df_news.dropna()
df_news.tail()
category | theme | URL | content | |
---|---|---|---|---|
4995 | 时尚 | 常吃六类食物快速补充水分 | http://lady.people.com.cn/GB/18248366.html | 随着天气逐渐炎热,补水变得日益重要。据美国《跑步世界》杂志报道,喝水并不是为身体补充水分的唯... |
4996 | 时尚 | 情感:你是我的那盘菜 吃不起我走【2】 | http://lady.people.com.cn/n/2012/0712/c1014-18... | 我其实不想说这些话刺激他,他也是不得已。可是,我又该怎样说,怎样做?我只能走,离开这个伤心地... |
4997 | 时尚 | 揭秘不老女神刘晓庆的四任丈夫(图) | http://lady.people.com.cn/n/2012/0730/c1014-18... | 58岁刘晓庆最新嫩照O衷诘牧跸庆绝对看不出她已经58岁了,她绝对可以秒杀刘亦菲、范冰冰这类美... |
4998 | 时尚 | 样板潮爸 时尚圈里的父亲们 | http://lady.people.com.cn/GB/18215232.html | 导语:做了爸爸就是一种幸福,无论是领养还是亲生,更何况出现在影视剧中。时尚圈永远是需要领军人... |
4999 | 时尚 | 全球最美女人长啥样?中国最美女人酷似章子怡(图) | http://lady.people.com.cn/BIG5/n/2012/0727/c10... | 全球最美女人合成图::国整形外科教授李承哲,在国际学术杂志美容整形外科学会学报发表了考虑种族... |
stopwords = pd.read_table(filepath_or_buffer='./bayes/stopwords.txt',names=['stopword'],sep='\t',quoting=csv.QUOTE_NONE,encoding='UTF-8')
stopwords = stopwords['stopword'].values.tolist()
content_arr = df_news['content'].values.tolist()
content_arr[0]
'经销商\u3000电话\u3000试驾/订车U憬杭州滨江区江陵路1780号4008-112233转5864#保常叮00万9阒菔邪自魄白云大道北1361号;广州市天河区黄埔大道西100号富力盈泰大厦105室4008-112233转9915#保常福00万I蕉省淄博市张店区山泉路89号4008-112233转5156#保常叮00万4罅保税区黄海西三路101号4008-112233转2603#保玻埃00万L粕绞新纺锨复兴路21号4008-112233转3043#保常叮00万V泄云南昆明市度假区滇池路1268号4008-112233转7312#保常叮00万R川市兴庆区丽景北街800号4008-112233转3269#保常叮00万9尔滨市道外区先锋路469号4008-112233转2029#保矗福00万3ど呈刑煨那桂花坪街道雀园路口/星沙中南汽车世界A区05号4008-112233转7666#保常梗00万N浜菏信塘城经济开发区盘龙汽车城#矗埃埃福112233转7524#保常叮00万9阒莘禺区市广路989号(祈福食街旁)#矗埃埃福112233转9963#保常叮00万F侄新区御桥路1377号4008-112233转6337#保常福00万0不帐『戏适邪河工业区纬一路22号138.00万I虾J斜ι角江杨南路1381号4008-112233转6722#保常叮00万t奚蕉路198号4008-112233转5933#保常叮00万1本┦谐阳区北四环望京街68号4008-112233转8615#保玻福00万1本┦胁平区立汤路亚北博晟汽车汇展中心#保埃福86万=西省南昌市青山湖区科技大道599号136.00万I苄耸信劢工业区康宁路车管所对面#保常叮00万D暇┦薪宁区天元中路111号4008-112233转5501#保常叮00万3ご菏形餍戮济技术开发区长沈路4222号136.00万J家庄市北二环东路86号河北国际汽车贸易园区#矗埃埃福112233转3178#保矗福00万8壅⑶城港路99号广达车城永兴路3号136.00万I蜓羰刑西区北二中路11号4008-112233转2498#保常叮00万3啥际星嘌虼蟮溃保福负牛ㄐ挛幕宫对面)#保矗常80万A赡省沈阳市皇姑区鸭绿江街32号甲(长客总站北行1500米)#保矗福00万I钲谑新藓区罗芳立交六星汽车园进口大众4S店4008-112233转9866#保担埃00万3ご憾环城路10056号136.00万'
content_words = []
for line in content_arr:
current_segment = jieba.lcut(line)
if len(current_segment) > 1 and current_segment != '\t\r':
content_words.append(current_segment)
content_words[0]
['经销商',
'\u3000',
'电话',
'\u3000',
'试驾',
'/',
'订车',
'U',
'憬',
'杭州',
'滨江区',
'江陵',
'路',
'1',
'7',
'8',
'0',
'号',
'4',
'0',
'0',
'8',
'-',
'1',
'1',
'2',
'2',
'3',
'3',
'转',
'5',
'8',
'6',
'4',
'#',
'保常',
'叮',
'0',
'0',
'万',
'9',
'阒',
'菔',
'邪',
'自魄',
'白云',
'大道北',
'1',
'3',
'6',
'1',
'号',
';',
'广州市',
'天河区',
'黄埔',
'大道',
'西',
'1',
'0',
'0',
'号',
'富力',
'盈泰',
'大厦',
'1',
'0',
'5',
'室',
'4',
'0',
'0',
'8',
'-',
'1',
'1',
'2',
'2',
'3',
'3',
'转',
'9',
'9',
'1',
'5',
'#',
'保常福',
'0',
'0',
'万',
'I',
'蕉',
'省',
'淄博市',
'张店区',
'山泉',
'路',
'8',
'9',
'号',
'4',
'0',
'0',
'8',
'-',
'1',
'1',
'2',
'2',
'3',
'3',
'转',
'5',
'1',
'5',
'6',
'#',
'保常',
'叮',
'0',
'0',
'万',
'4',
'罅',
'保税区',
'黄海',
'西',
'三路',
'1',
'0',
'1',
'号',
'4',
'0',
'0',
'8',
'-',
'1',
'1',
'2',
'2',
'3',
'3',
'转',
'2',
'6',
'0',
'3',
'#',
'保玻埃',
'0',
'0',
'万',
'L',
'粕',
'绞',
'新',
'纺锨',
'复兴路',
'2',
'1',
'号',
'4',
'0',
'0',
'8',
'-',
'1',
'1',
'2',
'2',
'3',
'3',
'转',
'3',
'0',
'4',
'3',
'#',
'保常',
'叮',
'0',
'0',
'万',
'V',
'泄',
'云南',
'昆明市',
'度假区',
'滇池',
'路',
'1',
'2',
'6',
'8',
'号',
'4',
'0',
'0',
'8',
'-',
'1',
'1',
'2',
'2',
'3',
'3',
'转',
'7',
'3',
'1',
'2',
'#',
'保常',
'叮',
'0',
'0',
'万',
'R',
'川市',
'兴庆区',
'丽景',
'北街',
'8',
'0',
'0',
'号',
'4',
'0',
'0',
'8',
'-',
'1',
'1',
'2',
'2',
'3',
'3',
'转',
'3',
'2',
'6',
'9',
'#',
'保常',
'叮',
'0',
'0',
'万',
'9',
'尔滨市',
'道外区',
'先锋',
'路',
'4',
'6',
'9',
'号',
'4',
'0',
'0',
'8',
'-',
'1',
'1',
'2',
'2',
'3',
'3',
'转',
'2',
'0',
'2',
'9',
'#',
'保',
'矗福',
'0',
'0',
'万',
'3',
'ど',
'呈刑',
'煨',
'那',
'桂花',
'坪',
'街道',
'雀园',
'路口',
'/',
'星沙',
'中南',
'汽车',
'世界',
'A',
'区',
'0',
'5',
'号',
'4',
'0',
'0',
'8',
'-',
'1',
'1',
'2',
'2',
'3',
'3',
'转',
'7',
'6',
'6',
'6',
'#',
'保常',
'梗',
'0',
'0',
'万',
'N',
'浜',
'菏',
'信塘城',
'经济',
'开发区',
'盘龙',
'汽车城',
'#',
'矗埃埃福',
'1',
'1',
'2',
'2',
'3',
'3',
'转',
'7',
'5',
'2',
'4',
'#',
'保常',
'叮',
'0',
'0',
'万',
'9',
'阒莘禺',
'区市',
'广路',
'9',
'8',
'9',
'号',
'(',
'祈福',
'食街',
'旁',
')',
'#',
'矗埃埃福',
'1',
'1',
'2',
'2',
'3',
'3',
'转',
'9',
'9',
'6',
'3',
'#',
'保常',
'叮',
'0',
'0',
'万',
'F',
'侄',
'新区',
'御桥',
'路',
'1',
'3',
'7',
'7',
'号',
'4',
'0',
'0',
'8',
'-',
'1',
'1',
'2',
'2',
'3',
'3',
'转',
'6',
'3',
'3',
'7',
'#',
'保常福',
'0',
'0',
'万',
'0',
'不帐',
'『',
'戏适',
'邪河',
'工业区',
'纬',
'一路',
'2',
'2',
'号',
'1',
'3',
'8',
'.',
'0',
'0',
'万',
'I',
'虾',
'J',
'斜',
'ι',
'角江',
'杨',
'南路',
'1',
'3',
'8',
'1',
'号',
'4',
'0',
'0',
'8',
'-',
'1',
'1',
'2',
'2',
'3',
'3',
'转',
'6',
'7',
'2',
'2',
'#',
'保常',
'叮',
'0',
'0',
'万',
't',
'奚蕉路',
'1',
'9',
'8',
'号',
'4',
'0',
'0',
'8',
'-',
'1',
'1',
'2',
'2',
'3',
'3',
'转',
'5',
'9',
'3',
'3',
'#',
'保常',
'叮',
'0',
'0',
'万',
'1',
'本',
'┦',
'谐阳区',
'北四环',
'望京',
'街',
'6',
'8',
'号',
'4',
'0',
'0',
'8',
'-',
'1',
'1',
'2',
'2',
'3',
'3',
'转',
'8',
'6',
'1',
'5',
'#',
'保玻福',
'0',
'0',
'万',
'1',
'本',
'┦',
'胁',
'平区立',
'汤路',
'亚北博晟',
'汽车',
'汇展',
'中心',
'#',
'保埃福',
'8',
'6',
'万',
'=',
'西省',
'南昌市',
'青山湖区',
'科技',
'大道',
'5',
'9',
'9',
'号',
'1',
'3',
'6',
'.',
'0',
'0',
'万',
'I',
'苄',
'耸信',
'劢',
'工业区',
'康宁',
'路',
'车管所',
'对面',
'#',
'保常',
'叮',
'0',
'0',
'万',
'D',
'暇',
'┦',
'薪宁区',
'天元',
'中路',
'1',
'1',
'1',
'号',
'4',
'0',
'0',
'8',
'-',
'1',
'1',
'2',
'2',
'3',
'3',
'转',
'5',
'5',
'0',
'1',
'#',
'保常',
'叮',
'0',
'0',
'万',
'3',
'ご',
'菏形',
'餍',
'戮济',
'技术开发区',
'长沈路',
'4',
'2',
'2',
'2',
'号',
'1',
'3',
'6',
'.',
'0',
'0',
'万',
'J',
'家庄',
'市',
'北二环',
'东路',
'8',
'6',
'号',
'河北',
'国际',
'汽车贸易',
'园区',
'#',
'矗埃埃福',
'1',
'1',
'2',
'2',
'3',
'3',
'转',
'3',
'1',
'7',
'8',
'#',
'保',
'矗福',
'0',
'0',
'万',
'8',
'壅',
'⑶',
'城港路',
'9',
'9',
'号',
'广达',
'车城',
'永兴路',
'3',
'号',
'1',
'3',
'6',
'.',
'0',
'0',
'万',
'I',
'蜓',
'羰刑',
'西区',
'北二',
'中路',
'1',
'1',
'号',
'4',
'0',
'0',
'8',
'-',
'1',
'1',
'2',
'2',
'3',
'3',
'转',
'2',
'4',
'9',
'8',
'#',
'保常',
'叮',
'0',
'0',
'万',
'3',
'啥际星',
'嘌',
'虼',
'蟮',
'溃',
'保福',
'负牛',
'ㄐ',
'挛幕宫',
'对面',
')',
'#',
'保',
'矗常',
'8',
'0',
'万',
'A',
'赡省',
'沈阳市',
'皇姑区',
'鸭绿江',
'街',
'3',
'2',
'号',
'甲',
'(',
'长客',
'总站',
'北',
'行',
'1',
'5',
'0',
'0',
'米',
')',
'#',
'保',
'矗福',
'0',
'0',
'万',
'I',
'钲',
'谑',
'新藓区',
'罗芳',
'立交',
'六星',
'汽车',
'园',
'进口',
'大众',
'4',
'S',
'店',
'4',
'0',
'0',
'8',
'-',
'1',
'1',
'2',
'2',
'3',
'3',
'转',
'9',
'8',
'6',
'6',
'#',
'保担',
'埃',
'0',
'0',
'万',
'3',
'ご',
'憾',
'环城路',
'1',
'0',
'0',
'5',
'6',
'号',
'1',
'3',
'6',
'.',
'0',
'0',
'万']
def drop_stopwords(content_words,stopwords):
content_words_clean = []
for line_words in content_words:
line_clean = []
for word in line_words:
if word in stopwords:
continue
line_clean.append(word)
content_words_clean.append(line_clean)
return content_words_clean
content_words_clean = drop_stopwords(content_words,stopwords)
train_data = pd.DataFrame({"content_clean":content_words_clean,"label":df_news['category']})
train_data.head()
content_clean | label | |
---|---|---|
0 | [经销商, 电话, 试驾, 订车, U, 憬, 杭州, 滨江区, 江陵, 路, 号, 转, ... | 汽车 |
1 | [呼叫, 热线, 服务, 邮箱, k, f, p, e, o, p, l, e, d, a,... | 汽车 |
2 | [M, I, N, I, 品牌, 二月, 公布, 最新, M, I, N, I, 新, 概念... | 汽车 |
3 | [清仓, 甩卖, 一汽, 夏利, N, 威志, V, 低至, 万, 启新, 中国, 一汽, ... | 汽车 |
4 | [日内瓦, 车展, 见到, 高尔夫, 家族, 新, 成员, 高尔夫, 敞篷版, 款, 全新,... | 汽车 |
label_mapping = {"汽车": 1, "财经": 2, "科技": 3, "健康": 4, "体育":5, "教育": 6,"文化": 7,"军事": 8,"娱乐": 9,"时尚": 0}
train_data['label'].unique()
array(['汽车', '财经', '科技', '健康', '体育', '教育', '文化', '军事', '娱乐', '时尚'],
dtype=object)
train_data['label'] = train_data['label'].map(label_mapping)
train_data.head()
content_clean | label | |
---|---|---|
0 | [经销商, 电话, 试驾, 订车, U, 憬, 杭州, 滨江区, 江陵, 路, 号, 转, ... | 1 |
1 | [呼叫, 热线, 服务, 邮箱, k, f, p, e, o, p, l, e, d, a,... | 1 |
2 | [M, I, N, I, 品牌, 二月, 公布, 最新, M, I, N, I, 新, 概念... | 1 |
3 | [清仓, 甩卖, 一汽, 夏利, N, 威志, V, 低至, 万, 启新, 中国, 一汽, ... | 1 |
4 | [日内瓦, 车展, 见到, 高尔夫, 家族, 新, 成员, 高尔夫, 敞篷版, 款, 全新,... | 1 |
x_train,x_test,y_train,y_test = train_test_split(train_data['content_clean'].values,train_data['label'].values,random_state=1)
train_words = []
for line_index in range(len(x_train)):
train_words.append(' '.join(x_train[line_index]))
train_words[0]
'中新网 上海 日电 于俊 父亲节 网络 吃 一顿 电影 快餐 微 电影 爸 对不起 我爱你 定于 本月 父亲节 当天 各大 视频 网站 首映 葜 谱 鞣 剑 保慈 障蚣 钦 呓 樯 埽 ⒌ 缬 埃 ǎ 停 椋 悖 颍 铩 妫 椋 恚 称 微型 电影 新 媒体 平台 播放 状态 短时 休闲 状态 观看 完整 策划 系统 制作 体系 支持 显示 较完整 故事情节 电影 微 超短 放映 微 周期 制作 天 数周 微 规模 投资 人民币 几千 数万元 每部 内容 融合 幽默 搞怪 时尚 潮流 人文 言情 公益 教育 商业 定制 主题 单独 成篇 系列 成剧 唇 开播 微 电影 爸 对不起 我爱你 讲述 一对 父子 观念 缺少 沟通 导致 关系 父亲 传统 固执 钟情 传统 生活 方式 儿子 新派 音乐 达 习惯 晚出 早 生活 性格 张扬 叛逆 两种 截然不同 生活 方式 理念 差异 一场 父子 间 拉开序幕 子 失手 打破 父亲 心爱 物品 父亲 赶出 家门 剧情 演绎 父亲节 妹妹 哥哥 化解 父亲 这场 矛盾 映逋坏 嚼 斫 狻 ⒍ 粤 ⒌ 桨容 争执 退让 传统 尴尬 父子 尴尬 情 男人 表达 心中 那份 感恩 一杯 滤挂 咖啡 父亲节 变得 温馨 镁 缬 缮 虾 N 逄 煳 幕 传播 迪欧 咖啡 联合 出品 出品人 希望 观摩 扪心自问 父亲节 父亲 记得 父亲 生日 哪一天 父亲 爱喝 跨出 家门 那一刻 感觉 一颗 颤动 心 操劳 天下 儿女 父亲节 大声 喊出 父亲 家人 爱 完'
test_words = []
for line_index in range(len(x_test)):
test_words.append(' '.join(x_test[line_index]))
test_words[0]
'国家 公务员 考试 申论 应用文 类 试题 实质 一道 集 概括 分析 提出 解决问题 一体 综合性 试题 说 一道 客观 凝练 申发 论述 文章 题目 分析 历年 国考 申论 真题 公文 类 试题 类型 多样 包括 公文 类 事务性 文书 类 题材 从题 干 作答 材料 内容 整合 分析 无需 太 创造性 发挥 纵观 历年 申论 真题 作答 应用文 类 试题 文种 格式 作出 特别 重在 内容 考查 行文 格式 考生 平常心 面对 应用文 类 试题 准确 把握 作答 领会 内在 含义 把握 题材 主旨 材料 结构 轻松 应对 应用文 类 试题 R 弧 ⒆ 钒 盐 展文 写作 原则 T 材料 中来 应用文 类 试题 材料 总体 把握 客观 考生 材料 中来 材料 中 把握 材料 准确 理解 题材 主旨 T 政府 角度 作答 应用文 类 试题 更应 注重 政府 角度 观点 政府 角度 出发 原则 表述 观点 提出 解决 之策 考生 作答 站 政府 人员 角度 看待 提出 解决问题 T 文体 结构 形式 考查 重点 文体 结构 大部分 评分 关键点 解答 方法 薄 ⒆ ス 丶 词 明 方向 作答 题目 题干 作答 作答 方向 作答 角度 关键 向导 考生 仔细阅读 题干 作答 抓住 关键词 作答 方向 相关 要点 整理 作答 思路 年国考 地市级 真 题为 例 潦惺姓 府 宣传 推进 近海 水域 污染 整治 工作 请 给定 资料 市政府 工作人员 身份 草拟 一份 宣传 纲要 R 求 保对 宣传 内容 要点 提纲挈领 陈述 玻 体现 政府 精神 全市 各界 关心 支持 污染 整治 工作 通俗易懂 超过 字 肮 丶 词 近海 水域 污染 整治 工作 市政府 工作人员 身份 宣传 纲要 提纲挈领 陈述 体现 政府 精神 全市 各界 关心 支持 污染 整治 工作 通俗易懂 提示 归结 作答 要点 包括 污染 情况 原因 解决 对策 作答 思路 情况 原因 对策 意义 逻辑 顺序 安排 文章 结构 病 ⒋ 缶殖 龇 ⅲ 明 结构 解答 应用文 类 试题 考生 材料 整体 出发 大局 出发 高屋建瓴 把握 材料 主题 思想 事件 起因 解决 对策 阅读文章 构建 文章 结构 直至 快速 解答 场 ⒗ 硭 乘悸 罚明 逻辑 应用文 类 试题 严密 逻辑思维 情况 原因 对策 意义 考生 作答 先 弄清楚 解答 思路 统筹安排 脉络 清晰 逻辑 表达 内容 表述 础 把握 明 详略 考生 仔细阅读 分析 揣摩 应用文 类 试题 内容 答题 时要 详略 得当 主次 分明 安排 内容 增加 文章 层次感 阅卷 老师 阅卷 时能 明白 清晰 一目了然 玻埃 保蹦旯 考 考试 申论 试卷 分为 省级 地市级 两套 试卷 能力 大有 省级 申论 试题 考生 宏观 角度看 注重 深度 广度 考生 深谋远虑 地市级 试题 考生 微观 视角 观察 侧重 考查 解决 能力 考生 贯彻执行 作答 区别对待'
cv = CountVectorizer(analyzer='word',max_features=5000,lowercase=False)
feature = cv.fit_transform(train_words)
classifier = MultinomialNB()
classifier.fit(feature,y_train)
classifier.score(cv.transform(test_words),y_test)
0.8048
tv = TfidfVectorizer(analyzer='word',max_features=5000,lowercase=False)
feature = tv.fit_transform(train_words)
classifier = MultinomialNB()
classifier.fit(feature,y_train)
classifier.score(tv.transform(test_words),y_test)
0.816
选择一篇文章进行测试
test_content = "昨日,沪指收盘击穿钻石底,报2126点,创2009年3月以来新低,深指破位9100点关口。 钻石底沦陷,两市昨日交投不足千亿,A股持仓账户比例下滑至33.96%创新低,股民投资意愿降至“冰点”。A头地产股大跌A绞凶蛉找蝗缂韧低开,盘初窄幅震荡,沪指一度突破5日均线,升至日内高点2147.66点,深指冲上9200点。N绾螅受困基本面表现乏力、利好消息缺失,两市成交持续低迷。地产板块午后大幅下挫,四大龙头地产股“招保万金”放量大跌,加重场内担忧,权重股纷纷翻绿,导致两市最后半小时放量跳水。W钪眨沪指报收2126点,下跌0.48%,创2009年3月9日以来收盘新低。深指下跌0.80%,收报9081.90点,失守9100点关口。#冻烧嘶Э詹铸@醋灾械枪司的最新数据显示,7月16日至7月20日当周,新增A股开户数为8.41万户,较上周增加0.67万户,增幅8.56%,已连续两周增加。但上周市场参与度仅为5.01%,已连降两周;截至上周末,A股持仓账户数为5645万户,较前一周减少7.17万户,比例下滑至33.96%,续创历史新低。M庾士始唱多S肷⒒У摹白山观虎斗”迥异的是,外资机构唱多声音此起彼伏,更有机构“冰川期”满仓操作。DΩ士丹利在其最新研报中称,中国A股和H股的估值都显著低于历史水平,年内应有较好表现;高盛高华则认为,上证指数有望到年底达到2750点。M庾驶构“看多”同时也做多。2006年获得A股QFII资格的爱德蒙得洛希尔资产管理公司总经理汤熠近日透露,该公司在A股市场的7亿多美元投资目前已满仓操作。";
test_current_segment = jieba.lcut(test_content)
test_contents_clean = drop_stopwords(content_words = [test_current_segment],stopwords=stopwords)
t_words = [' '.join(test_contents_clean[0])]
classifier.predict(tv.transform(t_words))
array([2], dtype=int64)
参考资料:
- 必须先用fit_transform(trainData),之后再transform(testData)
- 如果直接transform(testData),程序会报错
- 如果fit_transfrom(trainData)后,使用fit_transform(testData)而不transform(testData),虽然也能归一化,但是两个结果不是在同一个“标准”下的,具有明显差异。(一定要避免这种情况)
https://blog.csdn.net/weixin_38278334/article/details/82971752