新闻文本数据中不仅包括了中文字符,还包括了数字、英文字符、标点等非常规字符,这些都是无意义,并且需要处理的数据,清洗的方法使用的是正则表达式。
方法一:借助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()