python :中英文文本预处理(包含去标点分词词干提取)

版权声明:未经允许,禁止转载 https://blog.csdn.net/weixin_43216017/article/details/88324093

python :中英文文本预处理(包含去标点/分词/词干提取)

       在做文本分析之前,一般我们都需要进行文本的预处理。这一步其实和做数据时的数据清洗非常的相像。在对文本进行清洗的时候,我们需要分成中文和英文两种语言来进行,因为语言的不同,我们需要进行的操作也不同:

  1. 英文:大小写的处理,标点符号的处理,文本的分词,去除停用词,以及词干的提取(cleaning提取成clean)
  2. 中文:标点符号的处理,文本的分词

       下面我们分开来记述操作!~


英文的处理

python包:nltk+string

text = 'Natural language processing (NLP) Is A SuBfield Of Computer scIence, inFormation eNgineering, and artificial intelligence concerned with the interactions between computers and human (natural) languages, in particular how to program computers to process and analyze large amounts of natural language data!?!!....'

以上文本选自wikipedia的nlp介绍,为了测试效果,我自己把小写改成了大写,添加了几个标点。

大小写转换

操作过程一般都是大写字母转换成小写字母,毕竟表示的是一个意思。

#转换成小写
lower = text.lower()
标点符号的处理

如果不处理标点符号的话,那么在分词的时候标点也会占用一个位置,但是这个位置是没有意义的,所以,我们要把标点也去除。需要注意的是,下面的方法只能处理英文的标点。

import string
#string.punctuation中包含英文的标点,我们将其放在待去除变量remove中
#函数需要三个参数,前两个表示字符的映射,我们是不需要的。
remove = str.maketrans('','',string.punctuation) 
without_punctuation = lower.translate(remove)
分词

在去掉标点之后,我们可以对其进行分词

import nltk
tokens = nltk.word_tokenize(without_punctuation)
去除停用词

在英语中会有很多的词语不表达实际的意思,比如in/on/for等介词。

from nltk.corpus import stopwords
#首先获取英文的停用词,在去除掉
without_stopwords = [w for w in tokens if not w in stopwords.words('english')] 
提取词干

在英文中有很多变形,比如cleaning/cleans/cleaned等等,这些和clean都是一个意思,这里我们要对其提取词干。

import nltk.stem
s = nltk.stem.SnowballStemmer('english')  #参数是选择的语言
cleaned_text = [s.stem(ws) for ws in without_stopwords]
print(cleaned_text)

输出的结果:
1


中文的处理

python包:zhon/re/jieba

zhon包下载: pip install zhon

text_chinese = '自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。自然语言处理是一门融语言学、计算机科学、数学于一体的科学。因此,这一领域的研究将涉及自然语言,即人们日常使用的语言,所以它与语言学的研究有着密切的联系,但又有重要的区别。自然语言处理并不是一般地研究自然语言,而在于研制能有效地实现自然语言通信的计算机系统,特别是其中的软件系统。因而它是计算机科学的一部分。'

以上文本选自百度百科:自然语言处理

去除标点符号

我们适应zhon.hanzi.punctuation来调用中文符号。

import re
from zhon.hanzi import punctuation
#去除标点符号
chi_nopuc = re.sub("[{}]+".format(punctuation), "", text_chinese)
中文分词

jieba分词支持不同的分词方式,本文中使用的是默认模式

chi_token = jieba.lcut(chi_nopuc)
去除停用词

在这里,我们得先有一个停用词的列表。这个停用词没有一个标准化的指标,我自己的停用词下载:

停用词下载链接
提取码:bs5s

#首先我们需要引入停用词
f = open(r"C:\Users\Mr.Reliable\Desktop\中文停用词.txt",'r',encoding = 'UTF-8')
stopwords_n = f.readlines()
f.close()  
#清洗停用词数据
stopwords = [sw.strip().replace('\n','') for sw in stopwords_n]
final = []
for chi in chi_token:
    if chi not in stopwords:
            final.append(chi)
print(final)

输出的结果:

2

猜你喜欢

转载自blog.csdn.net/weixin_43216017/article/details/88324093