帆软 正则 不能有空格_Python | 一文掌握数据清洗中常用的正则表达

a737e09b5be6dd93cc57a078f66876b2.png

点击蓝字关注我

f12fdc77bdc6ed71ec7b5e45487dc51a.png

小编最近在处理一份语音转写文字的英文数据集。由于是语音转写得到的文本数据,毕竟没有人工撰写的数据干净✨,存在大量穿插混乱的token。人眼可以很容易发现,但简单的正则却无法解决。在这次处理过程中,使用到了一些很宝藏的正则表达式,这里记录下来,希望对大家有帮助。

4a535e621390af4ac8a810fa1efa7275.png

️一、原数据出现重复token,出现”口吃“现象

去除多余空格

utt = "I 'm   codebrid ,     I love    NLP ."

# strip extra white space

utt = re.sub(' +', ' ', utt)  

处理得到 "I 'm codebrid , I love NLP ."

去除连续的重复“一元”单词

utt = "I 'm I 'm codebrid , I I think I love NLP ."
# replace consecutive unigrams with a single instance
utt = re.sub('b(w+)s+1b', '1', utt)
处理得到 "I 'm I 'm codebrid , I think I love NLP ."

去除连续的重复“多元”单词(包括一元)

utt = "I 'm I 'm codebrid , I think I think I I love NLP ."
# same for bigrams
utt = re.sub('(b.+?b)1b', '1', utt)
处理得到 "I 'm codebrid , I think I love NLP ."

此处要注意,以上表达式匹配的是重复两次的单词,对于重复三次以上的会出现如下问题:

utt = "I 'm I 'm I 'm codebrid , I think I think I I I I love NLP ."
# (这人说话是得有多么口吃啊 )
utt = re.sub('(b.+?b)1b', '1', utt)
处理得到 "I 'm I 'm codebrid , I think I I love NLP ."

去除重复多次的“多元”单词(包括一元)

utt = "I 'm I 'm I 'm codebrid , I think I think I I I I love NLP ."
# (口吃不怕,brid有办法 )
utt = re.sub('(b.+?b)(1b)+', '1', utt)
处理得到 "I 'm codebrid , I think I love NLP ."
# (完美解决问题 )

️二、出现多语言混杂情况

去除中文token

utt = "我 是 那个 可爱 的 布雷德 I 'm codebrid , I think I love NLP ."
utt = re.sub("[u4e00-u9fa5]+", '', utt)
处理得到 "      I 'm codebrid , I think I love NLP ."
# (此处要注意,中文token之间的空格并不能随着一起消除 )

只保留中文token

utt = "我 是 那个 可爱 的 布雷德 I 'm codebrid , I think I love NLP ."
# (此处呈现了两种sub使用方法 )
utt = re.sub("[^u4e00-u9fa5]+", '', utt)
utt = re.compile("[^u4e00-u9fa5]+").sub('', utt)
​
# (如果是unicode编码,可以在表达式前加 “u”,如下 )
utt = re.sub(u"[^u4e00-u9fa5]+", '', utt)
utt = re.compile(u"[^u4e00-u9fa5]+").sub('', utt)
处理得到 "我是那个可爱的布雷德"

️三、一些简单的匹配情况

去除指定通配符中的内容

utt = "I 'm codebrid ( just kidding ) , I think I love NLP { Natural Language Processing } ."
​
# (现在想要去除 花括号{}里的没有意义的token )
utt = re.sub(r'{.*?}', '', utt)
utt = re.compile(r'{.*?}').sub('', utt)
处理得到 "I 'm codebrid ( just kidding ) , I think I love NLP  ."
​
# (现在想要去除 小括号()里的没有意义的token )
utt = re.sub(r'(.*?)', '', utt)
utt = re.compile(r'(.*?)').sub('', utt)
处理得到 "I 'm codebrid  , I think I love NLP { Natural Language Processing } ."
​
# (考虑到括号左右的空格 ,可以在表达式左或右加一个空格)
utt = re.compile(r'(.*?) ').sub('', utt)
处理得到 "I 'm codebrid , I think I love NLP { Natural Language Processing } ."

去除首尾空格

utt = " I 'm codebrid , I love NLP . "
​
# (去除 首或尾 的空格 ,在本例子中,首部有空格,就不会再去除尾部空格)
# (此处呈现了两种sub使用方法 )
utt = re.sub('(^s*)|(s*$)', '', utt)
utt = re.compile(r'(^s*)|(s*$)').sub('', utt)
处理得到 "I 'm codebrid , I love NLP . "
# ^表示首部 ,$表示尾部 
​
# (单独去除尾部空格 )
utt = " I 'm codebrid , I love NLP . "
utt = re.sub('(s*$)', '', utt)
utt = re.compile(r'(s*$)').sub('', utt)
处理得到 " I 'm codebrid , I love NLP ."

️四、一些常用正则表达式

https://m.jb51.net/article/17355.htm

匹配email地址
^[w-]+(.[w-]+)*@[w-]+(.[w-]+)+$
​
匹配url
^[a-zA-z]+://匹配(w+(-w+)*)(.(w+(-w+)*))*(?S*)?$
​
匹配html tag
<s*(S+)(s[^>]*)?>(.*?)<s*/1s*>

https://m.jb51.net/article/17355.htm

匹配非负整数(正整数 + 0)
^d+$
匹配正整数
^[0-9]*[1-9][0-9]*$
匹配非正整数(负整数 + 0)
^((-d+)|(0+))$
匹配负整数
^-[0-9]*[1-9][0-9]*$
匹配整数
^-?d+$
匹配非负浮点数(正浮点数 + 0)
^d+(.d+)?$
匹配正浮点数
^(([0-9]+.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*.[0-9]+)|([0-9]*[1-9][0-9]*))$
匹配非正浮点数(负浮点数 + 0)
^((-d+(.d+)?)|(0+(.0+)?))$
匹配负浮点数
^(-(([0-9]+.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*.[0-9]+)|([0-9]*[1-9][0-9]*)))$
匹配浮点数
^(-?d+)(.d+)?$
匹配由26个英文字母组成的字符串
^[A-Za-z]+$
匹配由26个英文字母的大写组成的字符串
^[A-Z]+$
匹配由26个英文字母的小写组成的字符串
^[a-z]+$
匹配由数字和26个英文字母组成的字符串
^[A-Za-z0-9]+$
匹配由数字、26个英文字母或者下划线组成的字符串
^w+$

参考链接:

常用正则表达式:https://m.jb51.net/article/17355.htm

正则基础:ttps://http://www.runoob.com/regexp/regexp-syntax.html

正则函数及修饰符:https://www.cnblogs.com/angle6-liu/p/10437671.html

f12fdc77bdc6ed71ec7b5e45487dc51a.png

啾?还不关注?

推荐阅读:

资源合集,走过路过不要错过

Pytorch | 多GPU并行 DataParallel

NLP开源工具 | Open-NMT

文章来自【NLP_笔记屋】

作者:codebrid

编辑:codebrid

一只刚刚刚刚成为职场小白的算法工程狮 ️,希望在这里可以与大家共同学习&进步

日常分享 机器学习/ 深度学习/ NLP/ 算法/ 数学基础 的学习笔记

9d592a101837c289e7545795adfa4ef1.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值