NLP数据清洗:文本预处理

  在NLP中,文本有时候会包含很多空格或者是其他一些无用的符号,如果保留这些符号,在分词的时候这些符号也会被分出来,就会导致分词的结果不好。因此对文本的数据清洗是必要的。

一、去除无用的符号

  使用正则匹配re去除文本中的无用符号:

def clean_txt(sentence):
    remove_chars = '[·’!"\#$%&\'()#!()*+,-./:;<=>?\@,:?¥★、….>【】[]《》?“”‘’\[\\]^_`{|}~]+'
    string = re.sub(remove_chars, "", sentence)
    return string

def test():
    test_txt = '#【郭美美申请低保,居然获准通过!】郭美美对记者说,她其实就是一个失业人员,并不是大家想象的那样。她还说:她已经向政府申请了低保,目前已经获批。'
    test_txt_clean = clean_txt(test_txt)
    print('原文本:',test_txt)
    print('处理后文本:',test_txt_clean)

原文本: #【郭美美申请低保,居然获准通过!】郭美美对记者说,她其实就是一个失业人员,并不是大家想象的那样。她还说:她已经向政府申请了低保,目前已经获批。
处理后文本: 郭美美申请低保居然获准通过郭美美对记者说她其实就是一个失业人员并不是大家想象的那样。她还说她已经向政府申请了低保目前已经获批。

  还有一种方法是使用replace()这个方法也可以去掉所有不需要的符号或者把文本中的某些字符串替换:

contents = ' 【郭美  美申请低保,居然获准 通过!  】   !'
print('原文本:'+contents)
# 删除所有空格 
def clean_txt(txt):     #定义函数
    result= txt.replace(' ','')   # 去掉文本中的空格
    return result
result = clean_txt(contents)
print('处理后文本:',result)

原文本:【郭美 美申请低保,居然获准 通过! 】 !
处理后文本:【郭美美申请低保,居然获准通过!】!

contents = '郭美美申请低保,居然获准通过...'
print('原文本:'+contents)
# 替换指定字符串,把省略号转为句号
def clean_txt(txt):     
    result= txt.replace('...','。')    # 去掉文本中的空格
    return result
result = clean_txt(contents)
print('处理后文本:',result)

原文本:郭美美申请低保,居然获准通过…
处理后文本:郭美美申请低保,居然获准通过。

二、去除表情符号

  我们的文本数据中经常会带有很多表情,这些表情不仅仅会降低我们对文本处理的质量,它们有时是无法utf-8编码的,可以使用正则匹配删除这些表情符号。

def clean(desstr,restr=''):  
    #过滤表情   
    try:  
        co = re.compile(u'['u'\U0001F300-\U0001F64F' u'\U0001F680-\U0001F6FF'u'\u2600-\u2B55]+')  
    except re.error:  
        co = re.compile(u'('u'\ud83c[\udf00-\udfff]|'u'\ud83d[\udc00-\ude4f\ude80-\udeff]|'u'[\u2600-\u2B55])+')  
    return co.sub(restr, desstr)
 
print(clean('郭美美申请低保,居然获准通过!🙌🏻💗🚩'))

原文本:郭美美申请低保,居然获准通过!🙌🏻💗🚩
处理后文本:郭美美申请低保,居然获准通过!

  代码中的正则编码解释如下:

<U+1F300> - <U+1F5FF> # 符号和象形字
<U+1F600> - <U+1F64F> # 表情符号
<U+1F680> - <U+1F6FF> # 交通符号和地图符号
<U+2600> - <U+2B55> # 其它符号

三、文本只保留汉字

  我们在处理文本时通常只针对文字,而符号、数字等是没有意义的,所以想只留下汉字时:

def is_chinese(uchar):
    if uchar >= u'\u4e00' and uchar <= u'\u9fa5':  # 判断一个uchar是否是汉字
        return True
    else:
        return False
 
def allcontents(contents):
    content = ''
    for i in contents:
        if is_chinese(i):
            content = content+i
    return 
 
centent = '#【郭美美申请低保,居然获准通过!】郭美美对记者说,她其实就是一个失业人员,并不是大家想象的那样。'
result = allcontents(contents)
print('原文本:',centent)
print('处理后文本:',result)

原文本:#【郭美美申请低保,居然获准通过!】郭美美对记者说,她其实就是一个失业人员,并不是大家想象的那样。
处理后文本:郭美美申请低保居然获准通过郭美美对记者说她其实就是一个失业人员并不是大家想象的那样

四、中文繁体、简体转换

  如果文本中既有繁体也有简体,那处理起来有些不方便,需要进行繁体中文与简体中文的转换。首先安装OpenccPy,OpenccPy是一款 python 中文繁简体转换工具:

pip install openccpy 
from opencc import OpenCC
 
sentence = '這裡是繁體'
print('原文本',sentence)
 
def Simplified(sentence):
    new_sentence = Converter('zh-hans').convert(sentence)   # 繁体转为简体
    print('处理后文本:',new_sentence) 
 
def Traditional(sentence):
    new_sentence = Converter('zh-hant').convert(sentence)   # 简体转为繁体
    print('处理后文本:',new_sentence) 
Simplified(sentence)

原句子为:這裡是繁體
处理后文本:这里是简体
处理后文本:這裡是繁體

  • 14
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一本糊涂张~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值