zoukankan      html  css  js  c++  java
  • 【python cookbook】【字符串与文本】12.文本过滤和清理

     问题:例如清除在web页面表单中填入了pýtĥöñ is这样的文本

    解决方法:str.translate()方法

    s = 'pxfdtu0125xf6xf1x0cis	awesome
    '
    print(s)
    
    # (a) Remapping whitespace  先建立一个小型的转换表,然后使用translate()方法
    remap = {
        ord('	') : ' ',
        ord('f') : ' ',
        ord('
    ') : None      # Deleted
    }
    
    a = s.translate(remap)
    print('whitespace remapped:', a)
    print ('------------------------------')

    可以看到,类似 和f这样的空格符已经被重新映射成一个单独的空格。回车符 已经完全被删除掉了。

    利用重新映射的思想进一步构建出更加庞大的转换表,例如,我们把所有的Unicode组合字符都去掉;

    s = 'pxfdtu0125xf6xf1x0cis	awesome
    '
    print(s)
    
    # (a) Remapping whitespace
    remap = {
        ord('	') : ' ',  #ord(c):返回单字符c在ASCII中对应的整数,例如ord('a')->97
        ord('f') : ' ',
        ord('
    ') : None      # Deleted
    }
    
    a = s.translate(remap)
    
    # (b) Remove all combining characters/marks
    import unicodedata
    import sys
    cmb_chrs = dict.fromkeys(c for c in range(sys.maxunicode)
                             if unicodedata.combining(chr(c))) #dict.fromkeys()方法构建了一个将每个Unicode组合字符都映射为None的字典。
    
    b = unicodedata.normalize('NFD', a)  #原始输入被转换为分离的形式
    c = b.translate(cmb_chrs)    #删除所有的重音符号
    print('accents removed:', c)  
    >>> ================================ RESTART ================================
    >>> 
    pýtĥöñis    awesome
    
    
    accents removed: python is awesome
    
    >>> 
    另一种用来清理文本的技术涉及I/O解码和编码函数。
    大致思路:首先对文本做初步的清理,然后通过结合encode()和decode()操作来修改或清理文本。
    s = 'pxfdtu0125xf6xf1x0cis	awesome
    '
    print(s)
    
    # (a) Remapping whitespace
    remap = {
        ord('	') : ' ',
        ord('f') : ' ',
        ord('
    ') : None      # Deleted
    }
    
    a = s.translate(remap)
    
    # (b) Remove all combining characters/marks
    import unicodedata
    import sys
    cmb_chrs = dict.fromkeys(c for c in range(sys.maxunicode)
                             if unicodedata.combining(chr(c)))
    
    b = unicodedata.normalize('NFD', a)
    
    # (c) Accent removal using I/O decoding
    d = b.encode('ascii','ignore').decode('ascii')
    print('accents removed via I/O:', d)
    >>> ================================ RESTART ================================
    >>> 
    pýtĥöñis    awesome
    
    
    accents removed via I/O: python is awesome
    
    >>> 

    很显然,这种方法只有当我们的最终目标就是ASCII形式的文本时才有用。

    补充:

    文本清理和过滤的一个主要问题是运行时的性能问题,对于简单的操作,str.replace()通常是最快的方式,即使必须多次调用它也是如此。比如要清理掉空格符,可以编写如下的代码:

    def clean_spaces(s):
        s=s.replace('
    ','')
        s=s.replace('	',' ')
        s=s.replace('f',' ')
        return s

    如果需要做高级操作,比如字符到字符的重映射或删除,那么translate()方法还是比较快的。

  • 相关阅读:
    链接数据库
    Ajax 密码验证
    for循环 打印菱形 空 和 实
    for 循环 正方形
    面向对象
    用正则表达式 匹配手机号码
    正则表达式
    js 中 == 和=== 有什么区别?
    js 删除
    封装函数增删改查
  • 原文地址:https://www.cnblogs.com/apple2016/p/5793248.html
Copyright © 2011-2022 走看看