对文章进行分类、打标签、建模的主要步骤如下:
1)将已划分好类型的文本集(训练集)和待划分类型的文本集(测试集)进行分词处理,将长句划分为单个词组;
2)将步骤1中切好的词组放入词包中,并扩展成链式结构,形成bag of word;
3)应用TF-IDF算法计算训练集文档中每篇文章的TF-IDF权重矩阵;
4)使用朴素贝叶斯分类方法对训练集数据进行训练,然后利用得到的参数对测试集数据进行分类处理;
原始数据源:
-------------------------------------文本分词处理------------------------------------
分词
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import os
import jieba
import jieba.analyse # 导入提取关键词的库
# 对训练集 测试集文本都进行切词处理,对测试集数据打上主题标签
# 保存至文件
def save_file(save_path, content):
with open(save_path, "a",encoding= 'utf-8',errors='ignore') as fp:
fp.write(content)
# 读取文件
def read_file(file_path):
with open(file_path, "r",encoding= 'utf-8',errors='ignore') as fp:
content = fp.readlines()
# print(content)
return str(content)
# 抽取测试集的主题关键词
def extract_theme(content):
themes = []
tags = jieba.analyse.extract_tags(content, topK=3, withWeight=True, allowPOS=\
['n','ns','v','vn'],withFlag=True)
'''sentence 为待提取的文本topK 为返回几个 TF/IDF 权重最大的关键词,默认值为 20withWeight 为是否一并返回关键词权重值,默认值为 FalseallowPOS 仅包括指定词性的词,默认值为空,即不筛选withFlag 表示词性'''
for i in tags:
themes.append(i[0].word)
return str(themes)
def cast_words(origin_path, save_path, theme_tag):
'''train_words_path: 原始文本路径train_save_path: 切词后文本路径:return:'''
file_lists = os.listdir(origin_path) #原文档所在路径,os.listdir读取到一个目录下面所有的文件名
for dir_1 in file_lists: # 找到文件夹
file_path = origin_path + dir_1 + "/" #原始文件路径
seg_path = save_path + dir_1 + "/" #切词后文件路径
if not os.path.exists(seg_path):
os.makedirs(seg_path) #生成文件夹
detail_paths = os.listdir(file_path)
for detail_path in detail_paths: # 找到文件夹下具体文件路径
full_path = file_path + detail_path #原始文件下每个文档路径
file_content = read_file(full_path)
file_content = file