文本数据清洗

      新闻文本数据中不仅包括了中文字符,还包括了数字、英文字符、标点等非常规字符,这些都是无意义,并且需要处理的数据,清洗的方法使用的是正则表达式。

方法一:借助Unicode编码,16进制筛出中文字符

匹配规则为:[\u4e00-\u9fa5],\un匹配n,其中n是一个用四个十六进制数字表示的Unicode字符,而4e00-9fa5之间的Unicode编码表示的是20000多个中文字符。具体编码如下:

#匹配[^\u4e00-\9fa5]
def find_chinese(text):
    pattern=re.compile(r'[^\u4e00=\u9fa5]')
    chinese_txt=re.sub(pattern,'',text)
    return chinese_txt

解释:[\u4e00-\u9fa5]表示匹配汉字,[^\u4e00-\u9fa5]表示匹配除汉字以外的所有字符。

方法二:

去除标点符号

为方便之后分词工作,此处没有直接删掉特殊符号,而是以特殊符号用空格替换

#创建用于匹配特殊字符的正则表达式对象
pattern2=re.compile(r'[^\w]')
#将特殊符号用空格替换
text=re.split(pattern2,text)
print(text)

 (背诵)文本中的英文,将其去除,防止后续中文词嵌入的过程中,英文、数字被误认为英文嵌入(有这种可能吗?)

import re
#生成正则表达式对象,用于匹配以'('开始并以')'结束的内容
pattern=re.compile(r'\(.*?\)')
#去除符合上述正则表达式的内容
text=re.sub(pattern,'',text)
text

方法三:基于简单化正则表达式

去除空格,并将省略号更换为句号 

print('处理前文本:'+text)
def process(our_data):
    contents=our_data.replace(' ','')
    print('处理后文本'+contents)
process(text)

去除标点和数字

print('xxx:'+text)
def process(data):
    content1=data.replace(' ','')
    content2=content1.replace('...',',')
    print('xxx'+context2)
process(text)

或者

只保留数字、汉字、英文、标点,而去除其他的东西(比如表情)

def is_chinese(uchar):
    if uchar>=u'\u4e00\ and uchar<='\u9fa5':  #判断一个uchar是不是汉字
        return True
    else:
        return False

def allcontents(contents):
    content=''
    for i in content:
        if is_chinese(i):
            content=content+i
    print('\nxxxxx\n'+content)

centents='xxxx'
print('原句子为:\n'+centents)
allcontents(centens)

Q1:.compile()函数

Q2:里边的正则r是如何处理的

Q3:xx.sub()是如何处理的

文本数据清洗

 Q2.1:xx.findall()的用处,.compile()是用于匹配的

文本数据清洗

 Q3:读懂内部正则表达式的方式

文本数据清洗

 Q4:做好区分,split(),compile(),findall(),replace()

文本数据清洗

上一篇:js常用的正则表达式


下一篇:关于ES查询问题跟进,定时任务分词优化