1、数据集准备

测试数据集下载:https://github.com/Asia-Lee/Vulnerability_classify/blob/master/testdata.xls

停用词过滤表下载:https://github.com/Asia-Lee/Vulnerability_classify/blob/master/stopwords.txt

2、数据预处理

(1)简单分词

# -*- coding: utf-8 -*-

import pandas as pd
import jieba
"""
函数说明:简单分词
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 if __name__=='__main__':
list_word_split, category_labels=word_split('testdata.xls') #获得每条文本的分词列表和标签列表
print(list_word_split)
print(category_labels)
print('分词成功')

  分词结果:

(2)词性还原

# -*- coding: utf-8 -*-

import pandas as pd
import jieba
from nltk.stem import WordNetLemmatizer """
函数说明:词性还原
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 if __name__=='__main__':
list_word_split, category_labels=word_split('testdata.xls') #获得每条文本的分词列表和标签列表
print('分词成功')
list_words_lemmatizer=word_lemmatizer(list_word_split) #词性还原
print('词性还原成功')

  

(3)停用词过滤

# -*- coding: utf-8 -*-

import pandas as pd
import jieba
from nltk.stem import WordNetLemmatizer """
函数说明:停用词过滤
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_stopwords if __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("停用词过滤成功")

  

(4)特征选择

对于处理这类文本数据,常用的特征选择方法有: TF-IDF(词频-逆向文档频率),信息增益卡方检验互信息N-Gram

(5)文本标签向量化

"""
函数说明:文本向量化,标签向量化 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)]=1
docvec_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)]=1
labelvec_list.append(doclabel)
return docvec_list,labelvec_list

  

(6)选择算法模型进行训练(机器学习、深度学习)

        

最新文章

  1. sql server2014不允许保存更改。阻止保存要求重新创建表的更改
  2. xenu工具介绍
  3. 手机触摸touch事件
  4. c#上iOS apns p12文件制作记录 iOS推送证书制件
  5. FEE Development Essentials
  6. Linux下恢复删除的文件
  7. paper 74:MATLAB图像处理_HSV与RGB颜色空间互转
  8. 控制文本和外观------Attr Binding(attr属性绑定)
  9. HDU 1698 Just a Hook (线段树区间更新)
  10. SQL 必知必会-- 第1课:数据库基础和什么是SQL
  11. oracle创建job方法
  12. 创建一个jQuery UI的垂直进度条效果
  13. Vue动态组件
  14. Mysql主从原理
  15. 使用localStorage保存搜索记录
  16. java 泛型的类型擦除与桥方法
  17. C# RSA加解密与验签,AES加解密,以及与JAVA平台的密文加解密
  18. 最课程阶段大作业之01:使用SVN实现版本控制
  19. 蚂蚁金服缘何自研Service Mesh?
  20. 深入JVM对象引用

热门文章

  1. centos apache2.4.6 apache https配置
  2. 基于点云的3ds Max快速精细三维建模方法及系统的制作方法 插件开发
  3. 170817关于Listener的知识点
  4. WebPack Task Runner
  5. Glide 图片框架
  6. 002-localStorage和sessionStorage操作
  7. 从 spring-cloud-alibaba-nacos-config 进入 nacos-client
  8. 模拟鼠标向下滚动 http://bbs.2ccc.com/topic.asp?topicid=461769
  9. webpack构建项目连接本机IP仍无法访问问题
  10. DropDownList 需要加AutoPostBack="true" ,OnSelectedIndexChanged方法才有效