基于词级别和字级别的中文文本预处理

一、基于词级别文本预处理

词级别预处理过程:

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 ==
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值