⾃然语⾔处理(NLP):⽂本预处理(⽂本准备)
1. ⽂本预处理概述
和机器学习任务⼀样,⾃然语⾔处理任务的第⼀步⼯作也是⽂本(数据)准备或叫⽂本(数据)预处理。⽂本预处理的流程如下图所⽰:
⽂本预处理⼯作以分词步骤为界,之前的⽂本标准化和⽂本清洗是语料级(篇章级)颗粒度⽂本处理,之后词的清洗、标准化和⽂本表⽰是单词级颗粒度⽂本处理。
语料级⽂本处理的作⽤对象是数据集中的每⼀篇语料,它⽐单词级⽂本处理效率更⾼,并且可以提前去除影响分词效果的障碍(如:英⽂中按空格分词,但与单词直接相邻的逗号等标点会产⽣⾮标准单词的分词结果(‘word,’ 标准形式应该是’word’))。
单词级⽂本处理执⾏在语料分词之后,它的处理对象是每篇语料中的每⼀个单词,主要执⾏单词的过滤、单词写法的标准化(如⼤写数字与阿拉伯数字书写形式的统⼀、统⼀英⽂单词不同时态、语态书写形式的统⼀等)、拼写纠错和⽂本表⽰四⼤步⼯作。
2. ⽂本标准化
2.1 字符编码标准化(全⾓英⽂字符转半⾓)
在计算机中,所有中⽂字符都是全⾓字符,⽽英⽂字母、阿拉伯数字及符号有全⾓和半⾓两种unicode编码⽅式。它们的全⾓字符unicode 编码从65281~65374 (⼗六进制 0xFF01 ~ 0xFF5E),半⾓字符unicode编码从33~126 (⼗六进制 0x21~ 0x7E);⽽空格符⽐较特殊,全⾓unicode编码为12288 (0x3000),半⾓为32 (0x20)。
可见除空格符外,每个全⾓字符的unicode编码等于其半⾓字符的unicode编码加65248,因此字符unicode编码标准化实现代码如下:#全⾓转半⾓
def full_to_half(text:str):#输⼊为⼀个句⼦
_text =""
for char in text:
中文字符unicode查询
inside_code =ord(char)#以⼀个字符(长度为1的字符串)作为参数,返回对应的 ASCII 数值
if inside_code ==12288:#全⾓空格直接转换
inside_code =32
elif65281<= inside_code <=65374:#全⾓字符(除空格)根据关系转化
inside_code -=65248
_text +=chr(inside_code)
return _text
2.2 英⽂⼤⼩写字母统⼀化
英⽂字母⼤⼩写的统⼀化可直接借助python内置字符串⽅法实现,具体代码如下:
#⼤写字母转为⼩写字母
def upper2lower(text:str):
return text.lower()
2.3 中⽂繁简字统⼀化
中⽂繁体字与简体字的统⼀化借助opencc包的OpenCC类实现,该类通过不同的转换功能代码实现不同的⽂字转化功能,转换功能代码表如下所⽰:
转换代码功能说明
t2s繁体中⽂转简体
转换代码功能说明
s2t简体中⽂转繁体
s2twp简体中⽂转繁体中⽂(带短语)
t2hk繁体中⽂转繁体(⾹港标准)
hk2s繁体中⽂(⾹港标准)转简体中⽂
s2hk简体中⽂转繁体中⽂(⾹港标准)
t2tw繁体中⽂转繁体(台湾标准)
tw2s繁体中⽂(台湾标准)转简体中⽂
tw2sp繁体中⽂(台湾标准)转简体中⽂(带短语)
s2tw简体中⽂转换成繁体中⽂(台湾标准)
繁简体统⼀化实现代码如下:
from opencc import OpenCC
#⼤写字母转为⼩写字母
def chinese_standard(text:str, conversion='t2s'):
cc = OpenCC(conversion)
vert(text)
3. ⽂本清洗
⽂本清洗中,常通过Unicode码过滤来去除⾮⽂本内容。Unicode码表中,中⽇韩统⼀表意⽂字字符区间为 4E00~9FA5,半⾓英⽂字
[4E00,9FA5]∪[0x21,0x7E]
母、阿拉伯数字及符号的字符区间为 0x21~0x7E,所以标准⽂本字符范围为 。
⾮⽂本内容过滤与标点符号过滤⼀同借助正则表达式实现,具体代码如下:
import re
def clear_character(text):
#只取合法字符
pattern =[
"[^\u4e00-\u9fa5^a-z^A-Z^0-9^\u0020^\u0027^\u002e]",# save_standing_character
"\.$"# remove_full_stop
]
return re.sub('|'.join(pattern),'', text)
4. 分词
敬请详见作者⽂章: .
5. 词的清洗
敬请详见作者⽂章: .
6. 词的标准化
敬请详见作者⽂章: .
7. 拼写纠错
敬请详见作者⽂章: .

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。