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

初探文本分类,本文使用的数据是5000条中文新闻文本数据,目的是使用朴素贝叶斯算法,对中文新闻文本进行分类预测。流程如下:

在这里插入图片描述

文本数据载入及清洗

搜狗新闻数据源:http://www.sogou.com/labs/resource/ca.php

我们从搜狗下载的数据是类似XML的带标签对的数据,因此需要使用正则表达式或者BeautifulSoup等工具处理为dataframe格式,如下图,大家通过网络爬虫获取的数据处理方法也类似。

在这里插入图片描述

文本数据提取这里就不赘述了,下面直接读入处理后的csv文件

import pandas as pd
import jieba
data = pd.read_table('news_data/news_data.txt')

把数据集分为训练集和测试集

sk-learn库中train_test_split函数可以把数据集随机划分为训练集和测试集,训练集用于模型训练,测试集用于检验模型的优劣,random_state参数是指定随机种子。

from sklearn.model_selection import train_test_split

x_train, x_test, y_train, y_test = train_test_split(data['新闻内容'], data['类别'], random_state=1)

中文分词

我们使用jieba库进行分词,并以空格把分词连成字符串。

def fenci(train_data):
    words_df = train_data.apply(lambda x:' '.join(jieba.cut(x)))
    return words_df

x_train_fenci = fenci(x_train)
x_train_fenci[:5]

分词后的数据如下:

3186    中新网 上海 6 月 1 4 日电 ( 记者 于俊 ) 今年 的 父亲节 , 人们 可 通过...
632     目前 正值 中 报 发布 之际 , 多家 券商 认为 , 上半年 银行 整体 利润 增速 下...
577     作为 中非 合作 论坛 的 重要 分 论坛 之一 , 中 非金融 合作 论坛 将 于 1 3...
2406    雅虎 体育讯   北京 时间 7 月 3 日 下午 , 炎炎夏日 中 山东 球迷 终于 迎来...
4686    欧莱雅集团 的 药妆 品牌 理肤泉 ( 右图 ) 和 薇 姿 ( 左图 ) 。   资料 图...
Name: 新闻内容, dtype: object

引入停用词

infile = open("stopwords.txt",encoding='utf-8')
stopwords_lst = infile.readlines()
stopwords = [x.strip() for x in stopwords_lst]

文本特征提取(词库表示法)

CountVectorizer旨在通过计数来将一个文档转换为向量。当不存在先验字典时,Countvectorizer作为Estimator提取词汇进行训练,并生成一个CountVectorizerModel用于存储相应的词汇向量空间。该模型产生文档关于词语的稀疏表示。下面举一个例子示范:

#用于转词向量的语料
yuliao = ['dog cat fish dog dog dog','cat eat fish','i like eat fish']

#sklearn库CountVectorizer转词向量
from sklearn.feature_extraction.text import CountVectorizer
cv = CountVectorizer()
vector = cv.fit_transform(yuliao)
vector.todense()

转换后的矩阵为

matrix([[1, 4, 0, 1, 0],
        [1, 0, 1, 1, 0],
        [0, 0, 1, 1, 1]], dtype=int64)

接下来我们看下提取到的特征分别是

#提取到的文本特征
cv.vocabulary_

得到的文本特征

{'cat': 0, 'dog': 1, 'eat': 2, 'fish': 3, 'like': 4}

从上面的例子可以看出,语料中每个词作为一个特征,词频数作为特征的值,如第一句中dog出现了4次,因此特征值为4。下面我们使用CountVectorizer把分词后的新闻文本转为向量。sklearn库中可以指定stopwords,我们把之前准备好的停用词表穿进去就好,这样我们的文本特征提取就做好啦。

vectorizer =
  • 11
    点赞
  • 190
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值