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)选择算法模型进行训练(机器学习、深度学习)

        

Python3实现文本预处理的更多相关文章

  1. 浅谈NLP 文本分类/情感分析 任务中的文本预处理工作

    目录 浅谈NLP 文本分类/情感分析 任务中的文本预处理工作 前言 NLP相关的文本预处理 浅谈NLP 文本分类/情感分析 任务中的文本预处理工作 前言 之所以心血来潮想写这篇博客,是因为最近在关注N ...

  2. 【NLP】Tika 文本预处理:抽取各种格式文件内容

    Tika常见格式文件抽取内容并做预处理 作者 白宁超 2016年3月30日18:57:08 摘要:本文主要针对自然语言处理(NLP)过程中,重要基础部分抽取文本内容的预处理.首先我们要意识到预处理的重 ...

  3. Keras文本预处理

    学习了Keras文档里的文本预处理部分,参考网上代码写了个例子 import keras.preprocessing.text as T from keras.preprocessing.text i ...

  4. [ DLPytorch ] 文本预处理&语言模型&循环神经网络基础

    文本预处理 实现步骤(处理语言模型数据集距离) 文本预处理的实现步骤 读入文本:读入zip / txt 等数据集 with zipfile.ZipFile('./jaychou_lyrics.txt. ...

  5. NLP自然语言处理入门-- 文本预处理Pre-processing

    引言 自然语言处理NLP(nature language processing),顾名思义,就是使用计算机对语言文字进行处理的相关技术以及应用.在对文本做数据分析时,我们一大半的时间都会花在文本预处理 ...

  6. L4文本预处理

    文本预处理 timemachine.txt数据下载地址 链接:https://pan.baidu.com/s/1RO2OLyTRQZ90HJUW7V7BCQ 提取码:bjox NLTK数据集下载 链接 ...

  7. 学习笔记--python中使用多进程、多线程加速文本预处理

    一.任务描述 最近尝试自行构建skip-gram模型训练word2vec词向量表.其中有一步需要统计各词汇的出现频率,截取出现频率最高的10000个词汇进行保留,形成常用词词典.对于这个问题,我建立了 ...

  8. NLP 文本预处理

    1.不同类别文本量统计,类别不平衡差异 2.文本长度统计 3.文本处理,比如文本语料中简体与繁体共存,这会加大模型的学习难度.因此,他们对数据进行繁体转简体的处理. 同时,过滤掉了对分类没有任何作用的 ...

  9. Python3之文本操作

    文件操作示例分析: 文件操作一般要经历三个步骤: 打开文件 操作文件 关闭文件 读取操作示例: >>>f = open('test.txt', 'r') # 打开文件test.txt ...

随机推荐

  1. 设计模式学习笔记——Composite 组合模式

    用于描述无限层级的复杂对象,类似于描述资源管理器,抽象出每一个层级的共同特点(文件夹和文件,展开事件) 以前描述一个对象,是将整个对象的全部数据都描述清楚,而组合模式通过在对象中定义自己,描述自己的下 ...

  2. 3D Computer Grapihcs Using OpenGL - 01 环境设置

    这系列文章是我学习Youtube上一套OpenGL教程的笔记,自己对教程的案例重新制作并且做了一定程度的修改(更有条理,且修正了一些问题).后续将持续更新. Visual Studio 2017工程 ...

  3. codeforces D Salary Changing

    题意:给你n个人,和s块钱,每个人都有一个工资区间,你给所有人都发工资.然后要他们工资的中位数最大. 思路:二分找那个值.那个值要满足至少有n/2+1个工资区间内. #include<cstdi ...

  4. abc136

    第一次打ABC 题目简单,但我菜 E - Max GCD 可以任选两个数,一个减去1,一个加上1,可以操作$0,\cdots,K$次,求操作后数组最大GCD 枚举数组之和的因子,试图找到符合题意的最大 ...

  5. 【转】阿里架构总监一次讲透中台架构,13页PPT精华详解

    转:https://blog.csdn.net/u011323949/article/details/99542576 本文整理了阿里几位技术专家,如架构总监 谢纯良,中间件技术专家 玄难等几位大牛, ...

  6. sql分别用日期、月、年 分组 group by 分组,datepart函数

    标签: datepart函数sql分别用日期月年 分组group by 分组 2013-12-26 15:31 20764人阅读 评论(1) 收藏 举报 分类: SQL Server(21) 版权声明 ...

  7. 协议-TCP:TCP

    ylbtech-协议-TCP:TCP 传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的.可靠的.基于字节流的传输层通信协议,由IETF的RFC 793 ...

  8. DirectX 安装报错: 不能信任一个安装所需的压缩文件,请检查加密服务是否启用并且cabinet文件证书是否有效

    DirectX 安装报错 不能信任一个安装所需的压缩文件,请检查加密服务是否启用并且cabinet文件证书是否有效 是直播软件open broadcaster software,这个软件安装的时候提示 ...

  9. Zuul网关过滤器中转发头信息不起作用

    大家应该都知道在做Zuul网关过滤的时候,如果不在网关过滤时转发头信息,经过网关时头信息就会丢失. 但我用 addZuulRequestHeader转发头信息时,却不起作用,在子服务的controll ...

  10. 链表两数相加(add two numbers)

    问题 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它 ...