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('红薯的好处 常吃这种食物能够帮你减肥'))