一、基于词级别文本预处理
词级别预处理过程:
1、文本分词
2、统计词频
3、去除低频词和停用词
4、选取适量的高频词形成词典
5、用词典过滤并映射文本分词
6、查看文本序列长度分布,确定补全长度
7、文本序列补全
具体代码:
from collections import Counter
import jieba_fast as jieba
import joblib
import pandas as pd
import os
from seaborn import distplot
from matplotlib import pyplot
# 结果保留位置
root = r"E:\result"
# 加载文本以及标签
# 数据示例
# return:
# texts = ["体育画报:李娜夺得法网国军","世界卫生组织宣布:人类战胜了新冠状病毒"]
# labels = ["体育","国际"]
def loadData(): #
data = pd.read_csv(r"E:\cnews.train.txt", header=None, index_col=None, delimiter="\t").values
labels = [l for l, t in data]
texts = [t for l, t in data]
return texts, labels
# 加载停用词
# 自己定义停用词,记住一定要转换为set集合类,list慢的要死,别问我为什么知道
def loadStopwords(): #
return set(joblib.load(r"E:\stopwords.pkl"))
# 标签和下标的双映射
def getLabelMap(labels: list):
label_set = list(set(labels))
index2label = {i: l for i, l in enumerate(label_set)}
label2index = {l: i for i, l in enumerate(label_set)}
return label2index, index2label
# 单词和下标的双映射
def getWordMap(word_set):
word2index = {w: i + 1 for i, w in enumerate(word_set)}
index2word = {i + 1: w for i, w in enumerate(word_set)}
return word2index, index2word
# 定义分词方式
# 这里用jiba_fast分词,当然使用jieba或其他的也行,看自己选择
# input: "我是一个中国人"
# return: ["我","是","一个","中国人"]
def splitText(text: str):
return jieba.lcut(text)
# 对文本列表进行分词
def splitTextList(texts):
res = []
for i, text in enumerate(texts):
if (i + 1) % 1000 ==