python进行文本预处理_Python3实现文本预处理

1、数据集准备

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

进行文本预处理前,首先需要将文本数据读入到Python中。可以使用Python内置的`open()`函数来打开文本文件并读取数据。 一般来说,文本预处理包括以下几个步骤: 1. 去除特殊符号:例如标点符号、数字、网址链接等,可以使用Python内置的正则表达式模块re来实现。 2. 分词:将文本分解成单独的单词,可以使用nltk或者jieba等中文分词库来实现。 3. 去除停用词:停用词是指在文本中出现频率很高但对文本分类、聚类等任务没有太大贡献的词汇,例如“的”、“了”、“是”等。可以使用nltk或者jieba等中文分词库提供的停用词表来去除停用词。 4. 词干化/词形还原:将单词转化为它的基本形式,例如将“running”转化为“run”,可以使用nltk等自然语言处理库中提供的词干化或者词形还原功能实现。 5. 向量化:将文本转化为计算机可以处理的向量形式,可以使用词袋模型或者TF-IDF等方法来实现。 下面是一个简单的例子,演示如何使用nltk进行文本预处理: ```python import nltk from nltk.corpus import stopwords from nltk.stem import SnowballStemmer from nltk.tokenize import word_tokenize import re # 读入文本文件 with open('example.txt', 'r') as f: text = f.read() # 去除特殊符号 text = re.sub(r'[^\w\s]', '', text) text = re.sub(r'\d+', '', text) text = re.sub(r'http\S+', '', text) # 分词 tokens = word_tokenize(text) # 去除停用词 stop_words = set(stopwords.words('english')) tokens = [word for word in tokens if not word.lower() in stop_words] # 词干化 stemmer = SnowballStemmer('english') tokens = [stemmer.stem(word) for word in tokens] # 向量化 word_freq = nltk.FreqDist(tokens) print(word_freq.most_common(10)) ``` 在上面的代码中,首先通过`re`模块去除了文本中的标点符号、数字和网址链接。然后使用`nltk`库中的`word_tokenize()`函数将文本分解成单独的单词,然后使用`stopwords`模块去除了英文停用词。接着使用`SnowballStemmer`类进行了词干化,并使用`FreqDist`类统计了每个单词出现的频率,最后输出了出现频率最高的10个单词。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值