八、朴素贝叶斯中文分类实战

1.朴素贝叶斯中文分类实战

文本分类的流程如下图所示
在这里插入图片描述
朴素贝叶斯中文分类的目录结构

  • 中文分类的目录机构包括停用词文件、训练集文件和和测试集文件,具体内容如下图所示:
    在这里插入图片描述

2 数据准备与处理

2.1 数据集介绍

  • 案例中使用的数据是一些新闻数据,每条数据包含了新闻类型和新闻标题。
  • 类型有以下四种:财经类、娱乐类、健康类和体育类。
    在这里插入图片描述

2.3 加载数据

  • load_data函数的功能是读取训练数据和测试数据:titles_list和labels_list中分别存放文本标题和对应的标签信息。
# 加载数据
	def load_data(_dir):
	    file_list = os.listdir(_dir)
	
	    titles_list = []
	    labels_list = []
	
	    for file_name in file_list:
	        file_path = _dir + '/' + file_name
	
	        titles, labels = load_file(file_path)
	
	        titles_list += titles
	        labels_list += labels
	
	    return titles_list, labels_list

2.4 中文分词

  • load_file()函数的功能是对文本数据进行分词,为实现文本向量化做准备,tiltes和labels存放标题和标签
# 分词
	def load_file(file_path):
	    with open(file_path, encoding='utf-8') as f:
	        lines = f.readlines()
	
	    titles = [] # 样本数据
	    labels = [] # 标签
	
	    for line in lines:
	        line = line.encode('unicode-escape').decode('unicode-escape')
	        line = line.strip().rstrip('\n')
	
	        _lines = line.split('---')
	        if len(_lines) != 2:
	            continue
	
	        label, title = _lines
	        words = jieba.cut(title)
	
	        s = ''
	        for w in words:
	            s += w + ' '
	
	        s = s.strip()
	
	        titles.append(s)
	        labels.append(label)
	
	    return titles, labels

3 模型的构建

步骤一:加载停用词

stop_words = load_stopwords('stop_word/stopword.txt')

步骤二:加载训练数据

train_datas, train_labels = load_data('train_data')

步骤三:文本向量表示

tf = CountVectorizer(stop_words=stop_words, max_df=0.5)
train_features = tf.fit_transform(train_datas)
train_features_arr = train_features.toarray()

步骤四:多项式贝叶斯分类器

clf = MultinomialNB(alpha=0.001).fit(train_features_arr, train_labels)

test_datas, test_labels = load_data('test_data')
test_features = tf.transform(test_datas)

步骤五:模型的评估和保存

# 预测数据
predicted_labels = clf.predict(test_features)

# 计算准确率
score = metrics.accuracy_score(test_labels, predicted_labels)
print(score)

joblib.dump(clf, 'nb.pkl')
joblib.dump(tf, 'tf.pkl')

步骤六:模型的加载预测

def nb_predict(title):
    assert MODEL != None and TF != None
    
    words = jieba.cut(title)
    s = ' '.join(words)

    test_features = TF.transform([s]) 
    predicted_labels = MODEL.predict(test_features)

    return predicted_labels[0]


if __name__ == '__main__':
    load_model('nb.pkl', 'tf.pkl')
    print (nb_predict('东莞市场采购贸易联网信息平台参加部委首批联合验收'))
    print (nb_predict('留在中超了!踢进生死战决胜一球,武汉卓尔保级成功'))
	print (nb_predict('陈思诚全新系列电影《外太空的莫扎特》首曝海报 黄渤、荣梓杉演父子'))
    print (nb_predict('红薯的好处 常吃这种食物能够帮你减肥'))
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值