自然语言处理——中文文本预处理

自然语言处理——中文文本预处理

近期,在自学自然语言处理,初次接触NLP觉得十分的难,各种概念和算法,而且也没有很强的编程基础,学着稍微有点吃力。不过经过两个星期的学习,已经掌握了一些简单的中文、英文语料的预处理操作。写点笔记,记录一下学习的过程。

1、中文语料的特点

第一点:中文语料中词与词之间是紧密相连的,这一点不同与英文或者其它语种的语料,因此在分词的时候不能像英文使用空格分词,可以jieba库进行分词。第二点:编码问题,中文语料的编码格式是unicode,而不是utf-8编码格式。这里介绍utf-8编码和unicode编码读取的区别,unicode 一个中文字符占2个字节,而UTF-8一个中文字符占3个字节,因此如果不注意编码问题,在处理过程中肯定会出错的。

2、中文语料预处理

本次我做的中文语料预处理包含了以下操作:数据导入、数据清洗、中文分词、去停用词、特征处理(TF-IDF权重计算)。下面我将模块介绍我的处理过程。

2.1 数据导入

首先,先准备好本次要使用的数据集,一段摘自腾讯体育新闻中新闻报道,文本保存格式设置为utf-8。然后倒入进python,使用到open函数读取文件,读取格式选择‘r’表示读取文件,编码encoding = ’utf-8’,查看文件中的内容用read函数。具体编码如下:

#文件读取
def read_txt (filepath):
    file = open(filepath,'r',encoding='utf-8')
    txt = file.read()
    return txt

在这里插入图片描述
(注意:返回的txt是str类型的,即字符串类型,不需要decode。str与bytes表示的是两种数据类型,str为字符串型,bytes为字节型。对str编码encode得到bytes,对bytes解码decode得到str)

2.2 数据清洗

新闻文本数据中不仅包括了中文字符,还包括了数字、英文字符、标点等非常规字符,这些都是无意义,并且需要处理的数据。清洗的方法使用的是正则表达式,匹配规则为:[\u4e00-\u9fa5],\un匹配n,其中n是一个用四个十六进制数字表示的Unicode字符,而4e00-9fa5之间的Unicode编码表示的是20000多个中文字符。具体编码如下:

#匹配[^\u4e00-\u9fa5]
def find_chinese (file):
    pattern = re.compile(r'[^\u4e00-\u9fa5]')
    chinese_txt = re.sub(pattern,'',file)
    return chinese_txt

解释:[\u4e00-\u9fa5]表示匹配汉字,[^\u4e00-\u9fa5]表示匹配除汉字以外的所有字符。

数据展示:
在这里插入图片描述

2.3 中文分词

分词是中文文本分析的重要内容,正确的分词可以帮助我们更好的构建模型、运用算法分析。中文分词一般使用jieba库中的cut方法,cut方法分词有两种模式,一种为全模式,另一种为精准模式,相较于全模式,精准模式分词更加精准可靠,因此选用精准模式对文本分词。注:精准模式和全模式的区别在于是否cut_all,精准模式选择cut_all= False;全模式选择cut_all= True。Jieba库的安装十分简单,只需要在命令框中输入:pip install jieba 即可安装。

import jieba

txt = '''
腾讯体育3月6日讯 史蒂芬-库里时隔127天后复出,勇士113-121不敌猛龙。猛龙本场比赛过后,取得44胜18负战绩,锁定季后赛,成为本赛季联盟第2支锁定季后赛的球队,第1支是雄鹿。
比赛开始后,库里持球组织进攻,明显改变了猛龙的防守,给克里斯和维金斯创造了轻松得分的机会。但在第一节还剩6分11秒下场时,库里没有得分,2次三分出手全部偏出。
但在第二节比赛重新登场后,我们看到了那个熟悉的库里。他接球投三分命中,迎着防守人超远压哨三分命中,第三节还迎着洛瑞完成3+1。那个三分之王和2次常规赛MVP风采依旧。
勇士将士就像打不死的小强,从第一节开始就非常顽强,紧紧的咬住比分,甚至伺机反扑。'''

#全模式
jieba_list = jieba.cut(txt,cut_all=True)
jieba_txt1 = ' '.join
  • 23
    点赞
  • 187
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
以下是 Python 中常用的文本预处理代码: 1. 分词: 使用第三方库 `jieba` 进行中文分词: ```python import jieba # 将文本进行分词 text = "你好,我是一个AI助手。" seg_list = jieba.cut(text, cut_all=False) print(" ".join(seg_list)) # 输出分词结果,用空格隔开 ``` 2. 去除停用词: 使用第三方库 `nltk` 进行英文停用词的去除: ```python import nltk from nltk.corpus import stopwords # 下载停用词表 nltk.download('stopwords') # 定义停用词列表 stop_words = stopwords.words('english') # 将文本进行分词 text = "This is a sample sentence, showing off the stop words filtration." words = text.lower().split() # 去除停用词 filtered_words = [word for word in words if word not in stop_words] print(filtered_words) ``` 使用第三方库 `jieba` 进行中文停用词的去除: ```python import jieba # 定义停用词列表 stop_words = ['的', '了', '是', '我', '你', '他', '她'] # 将文本进行分词 text = "你好,我是一个AI助手。" seg_list = jieba.cut(text, cut_all=False) # 去除停用词 filtered_words = [word for word in seg_list if word not in stop_words] print(" ".join(filtered_words)) # 输出去除停用词后的分词结果,用空格隔开 ``` 3. 去除标点符号: 使用 Python 内置的 `string` 模块进行标点符号的去除: ```python import string # 定义标点符号列表 punctuation = string.punctuation # 将文本进行分词 text = "This is a sample sentence, showing off the punctuation removal." # 去除标点符号 filtered_text = "".join([char for char in text if char not in punctuation]) print(filtered_text) ``` 使用第三方库 `jieba` 进行中文标点符号的去除: ```python import jieba # 定义标点符号列表 punctuation = '!?。"#$%&'()*+,-/:;<=>@[\]^_`{|}~、。,《》【】' # 将文本进行分词 text = "你好,我是一个AI助手。" seg_list = jieba.cut(text, cut_all=False) # 去除标点符号 filtered_words = [word for word in seg_list if word not in punctuation] print(" ".join(filtered_words)) # 输出去除标点符号后的分词结果,用空格隔开 ``` 4. 文本表示: 使用第三方库 `sklearn` 进行文本向量化: ```python from sklearn.feature_extraction.text import CountVectorizer # 定义文本列表 texts = ["This is a sample sentence.", "Another sample sentence.", "I love Python!"] # 创建 CountVectorizer 对象 vectorizer = CountVectorizer() # 对文本进行向量化 vectorized_texts = vectorizer.fit_transform(texts) # 输出向量化后的结果 print(vectorized_texts.toarray()) ``` 以上是一些常用的文本预处理代码,不同的文本预处理任务可能需要使用不同的代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值