NLP预处理——编码、繁转简、停用词、表情、标签

preface:随着经历的积累,觉得预处理问题愈发重要,需要整理整理。

环境:mac,anaconda2

目录

一、文本编码转换

二、繁转简

三、停用词

四、表情异常符号

五、html/json/xml标签处理

六、分词&切割

七、全角&半角转换


一、文本编码转换

  1. python2 VS python3
    1. python2读取文件:默认asciii,类型为str
      1. 转为utf-8 demo:
        1. $ ipython
          # 改变默认编码格式为utf-8
          import sys
          reload(sys)
          sys.setdefaultencoding('utf-8')
          
          s = '今天上海的天气也蛮不错的'
          
          us = unicode(s)
          print type(s),  len(s), s
          print type(us), len(us), us
          s 
          us
          '''
          # 结果
          <type 'str'> 36 今天上海的天气也蛮不错的
          <type 'unicode'> 12 今天上海的天气也蛮不错的
          '\xe4\xbb\x8a\xe5\xa4\xa9\xe4\xb8\x8a\xe6\xb5\xb7\xe7\x9a\x84\xe5\xa4\xa9\xe6\xb0\x94\xe4\xb9\x9f\xe8\x9b\xae\xe4\xb8\x8d\xe9\x94\x99\xe7\x9a\x84'
          u'\u4eca\u5929\u4e0a\u6d77\u7684\u5929\u6c14\u4e5f\u86ee\u4e0d\u9519\u7684'
          '''

           

    2. python3:
      1. 中文字符串转为unicode:Chinesename.encode('unicode_escape').参考:https://blog.csdn.net/xyq046463/article/details/58606657
      2. 默认utf-8格式,并且显示为str类型,不必转换格式,这一块比较好
      3. unicode转为byte格式:s.encode()
      4. byte格式转为unicode:s.decode()
      5. 使用例子1:在做tensorflow的tfrecord时,需要将输入文本转为Byte格式,传入BytesList
        1. # python3环境下准备tfrecord时
          values = [sentence.encode("utf-8") for sentence in doc]
          record =  {'text_feature_keys':tf.train.Feature(bytes_list=tf.train.BytesList(value=values)),}

           

      6. 例子:
        1. $ /anaconda3/bin/ipython
          s = '今天上海的天气也蛮不错的'
          bs = s.endcode()
          print('{},{},{}'.format(type(s),len(s),s))
          print('{},{},{}'.format(type(bs),len(bs),bs))
          
          '''
          # 结果
          <class 'str'>,12,今天上海的天气也蛮不错的
          <class 'bytes'>,36,b'\xe4\xbb\x8a\xe5\xa4\xa9\xe4\xb8\x8a\xe6\xb5\xb7\xe7\x9a\x84\xe5\xa4\xa9\xe6\xb0\x94\xe4\xb9\x9f\xe8\x9b\xae\xe4\xb8\x8d\xe9\x94\x99\xe7\x9a\x84'
          '''
          

           

  2. python2中需要注意的坑:详见以前的博客,python函数——编码问题——str与Unicode的区别
  3. 编码这块还是建议大家用python3,python2在2020年后就不支持了,python2中的编码实在太多坑了。

二、繁转简

  1. 背景:无论微博文本、点评评论文本、豆瓣影评文本,都有繁体的存在,繁体占比比较少但又不可不考虑,这样就导致训练时繁体的语义不能用上汉字的语义了,毕竟繁体字在计算机中也单独被认为一个汉字,如若不预处理的话。
  2. 坑:存在坑爹的栗子。(长度会改变,并且差了很多)
    1. 泡麵——>方便面
    2. 雪糕——>冰淇淋
  3. 繁转简方法1(慢)
    1. 下载到本地的备用文件:zh_wiki.pylangconv.py
    2. 使用:
      1. from langconv import *
        keyword = '飛機飛向藍天'
        keyword = Converter("zh-hans").convert(keyword.decode("utf-8")).encode("utf-8") #繁体转简体
        keyword = Converter("zh-hant").convert(keyword.decode("utf-8")).encode("utf-8") #简体转繁体

         

    3. 参考:python实现中文字符繁体和简体中文转换
    4. 缺点:较慢,针对每个词,都要过一遍繁体字典,卤煮处理上百万条评论时,加了一个繁转简,预处理时间瞬间拉长了好几分钟。
  4. 繁转简方法2(
    1. 使用snownlp包自带的繁转简,demo:
      1. $ pip install SnowNLP
        $ ipython
        from snownlp import  SnowNLP
        s = SnowNLP(u'「繁體字」「繁體中文」的叫法在臺灣亦很常見。')
        print s.h
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值