目录
1、数据集准备
2、数据集处理
(1)简单分词、词性还原、停用词过滤
(2)特征提取(TT-IDF、信息增益、卡方检验、互信息、N-Gram等)
(3)文本标签向量化
(4)选择合适的算法模型进行训练
1、数据集准备
测试数据集下载:testdata.xls 停用词过滤表下载:stopwords.txt
2、数据集处理
(1)简单分词、词性还原、停用词过滤
# -*- coding: utf-8 -*-import pandas as pd
import jieba
from nltk.stem import WordNetLemmatizer"""
函数说明:简单分词
Parameters:filename:数据文件
Returns:list_word_split:分词后的数据集列表category_labels: 文本标签列表
"""
def word_split(filename):read_data=pd.read_excel(filename)list_word_split=[]category_labels=[]for i in range(len(read_data)):row_data = read_data.iloc[i, 1] # 读取单个漏洞描述文本list_row_data = list(jieba.cut(row_data)) # 对单个漏洞进行分词list_row_data=[x for x in list_row_data if x!=' '] #去除列表中的空格字符list_word_split.append(list_row_data)row_data_label=read_data.iloc[i,2] #读取单个漏洞的类别标签category_labels.append(row_data_label) #将单个漏洞的类别标签加入列表return list_word_split, category_labels"""
函数说明:词性还原
Parameters:list_words:数据列表
Returns:list_words_lemmatizer:词性还原后的数据集列表
"""
def word_lemmatizer(list_words):wordnet_lemmatizer = WordNetLemmatizer()list_words_lemmatizer = []for word_list in list_words:lemmatizer_word = []for i in word_list:lemmatizer_word.append(wordnet_lemmatizer.lemmatize(i))list_words_lemmatizer.append(lemmatizer_word)return list_words_lemmatizer"""
函数说明:停用词过滤
Parameters:filename:停用词文件list_words_lemmatizer:词列表
Returns:list_filter_stopwords:停用词过滤后的词列表
"""
def stopwords_filter(filename,list_words_lemmatizer):list_filter_stopwords=[] #声明一个停用词过滤后的词列表with open(filename,'r') as fr:stop_words=list(fr.read().split('\n')) #将停用词读取到列表里for i in range(len(list_words_lemmatizer)):word_list = []for j in list_words_lemmatizer[i]:if j not in stop_words:word_list.append(j.lower()) #将词变为小写加入词列表list_filter_stopwords.append(word_list)return list_filter_stopwordsif __name__=='__main__':list_word_split, category_labels=word_split('testdata.xls') #获得每条文本的分词列表和标签列表print('分词成功')list_words_lemmatizer=word_lemmatizer(list_word_split) #词性还原print('词性还原成功')list_filter_stopwords=stopwords_filter('stopwords.txt',list_words_lemmatizer) #获得停用词过滤后的列表print("停用词过滤成功")
停用词表也可参考:stopwords
(2)特征提取(TT-IDF、信息增益、卡方检验、互信息、N-Gram等)
TF-IDF算法实现参看:TF-IDF算法 信息增益算法实现参看:信息增益算法
(3)文本标签向量化
"""
函数说明:文本向量化,标签向量化 one-hot编码
Parameters:feature_words:特征词集doc_words:文本列表doc_category_labels:文本类别标签
Returns:docvec_list:文本向量列表labelvec_list:标签向量列表
"""
def words2vec(feature_words,doc_words,doc_category_labels):#文本列表转向量列表docvec_list=[]for words in doc_words:docvec = [0] * len(feature_words)for j in words:if j in feature_words:docvec[feature_words.index(j)]=1docvec_list.append(docvec)#标签列表转向量列表labelvec_list = []labelset=list(set(doc_category_labels))for label in doc_category_labels:doclabel = [0] * len(labelset)doclabel[labelset.index(label)]=1labelvec_list.append(doclabel)return docvec_list,labelvec_list
(4)选择合适的算法模型进行训练
本人博文NLP学习内容目录:
一、NLP基础学习
1、NLP学习路线总结
2、TF-IDF算法介绍及实现
3、NLTK使用方法总结
4、英文自然语言预处理方法总结及实现
5、中文自然语言预处理方法总结及实现
6、NLP常见语言模型总结
7、NLP数据增强方法总结及实现
8、TextRank算法介绍及实现
9、NLP关键词提取方法总结及实现
10、NLP词向量和句向量方法总结及实现
11、NLP句子相似性方法总结及实现
12、NLP中文句法分析
二、NLP项目实战
1、项目实战-英文文本分类-电影评论情感判别
2、项目实战-中文文本分类-商品评论情感判别
3、项目实战-XGBoost与LightGBM文本分类
4、项目实战-TextCNN文本分类实战
5、项目实战-Bert文本分类实战
6、项目实战-NLP中文句子类型判别和分类实战
交流学习资料共享欢迎入群:955817470(群一),801295159(群二)