赞
踩
新闻文本数据中不仅包括了中文字符,还包括了数字、英文字符、标点等非常规字符,这些都是无意义,并且需要处理的数据,清洗的方法使用的是正则表达式。
方法一:借助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()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。