在自然语言处理中,尽管文本清理受所做的任务影响比较大,但是有一些通用的清理流程标准是通用的,比如是否有必要替换URLS,时间,货币,姓名,地名,数字等。
我们以英文文本为例,大致将文本处理流程分为以下几个步骤:
- Normalization
- Tokenization
- Stop words
- Part-of-speech Tagging
- Named Entity Recognition
- Stemming and Lemmatization
下面是各个流程的具体介绍
Normalization
得到纯文本后,第一步通常要做就是Normalization。在英文中,所有句子第一个单词的首字母一般是大写,有的单词也会全部字母都大写用于表示强调和区分风格,这样更易于人类理解表达的意思,但是从计算机的角度来说是没法区别’Car’、‘car’、'CAR’是否是一个意思的,因此我们一般把文本中所有字母都转换为小写或大写(通常意义上是小写),没歌词用一个唯一的词来表示。
例如在下面的代码中,字符串文本调用lower()函数就可以将所有字母转换为小写形式。
pre_str = 'I Love My Family'
after_str = pre_str.lower()
print(after_str)
输出结果为:
i love my family
你可能还想清楚文本中的句号、问号、感叹号等特殊字符,并且保留字母表中的字母和数字。文档分类和聚类等应用中若要将所有文本文档作为一个整体,那么正则表达式这个方法特别有效。用正则匹配小写’a’到’z’以及大写’A’到’Z’以及数字’0’到’9’的范围之外的所有字符并用空格代替。这个方法无需指定所有标点符号。当然,也可以采用其他正则表达式。
在下面的代码中,使用re模块的sub正则匹配所有非a-z,A-Z,0-9的字母,并将其替换为空格。
import re
text = 'the first time you see the second renaissance it may look boring.look at it at least and definitely watch part 2.it will??'
text = re.sub(r'[^a-zA-Z0-9]', " ", text)
print(text)
输出结果:
the first time you see the second renaissance it may look boring look at it at least and definitely watchpart 2 it will
小写转换和标点移除是两个最常见的文