Python正则表达式清洗微博⽂本特殊符号(⽹址,@,表情符等)
在做⽂本分类的实验时,到⼀个,但是其中保留了很多微博中的特殊符号,对于算法的训练来说不太有利。
从上⾯的图中可以看到,微博⾥主要有⼏种特殊格式:
1. ⽹页
2. @⽤户名(包括转发路径上的其他⽤户名)
3. 表情符号(⽤[]包围)
4. 话题(⽤#包围)
作为机器学习的预处理步骤,我希望能够处理掉前3个格式,原因是:
1、2不包含有意义的内容(不过我去除转发⽤户名的时候保留了其内容)
3 实际上泄露了很多标签的信息(⽐如看的[哈哈]表情符就知道是正向了)。我初步尝试时保留了这些表情符,模型的准确率可达到超
过97%,但模型只是看表情符,却没有对⽂本的理解。去除表情符后相同模型重新训练的准确率掉到了74.5%
⽽保留4,是因为它们常常是构成句⼦完整性不可或缺的成分,⽐如上图中的最后⼀句话
下⾯是代码:
import re
python正则表达式不包含def clean(text):
text = re.sub(r"(回复)?(//)?\s*@\S*?\s*(:| |$)"," ", text)# 去除正⽂中的@和回复/转发中的⽤户名
text = re.sub(r"\[\S+\]","", text)# 去除表情符号
# text = re.sub(r"#\S+#", "", text) # 保留话题内容
URL_REGEX = repile(
r'(?i)\b((?:https?://|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:\'".,< >?«»“”‘’]))',
re.IGNORECASE)
text = re.sub(URL_REGEX,"", text)# 去除⽹址
text = place("转发微博","")# 去除⽆意义的词语
text = re.sub(r"\s+"," ", text)# 合并正⽂中过多的空格
return text.strip()
使⽤效果:
In[3]: clean("太过分了@Rexzhenghao //@Janie_Zhang:招⾏最近负⾯新闻越来越多呀...")
Out[3]: '太过分了招⾏最近负⾯新闻越来越多呀...'
In[4]: clean("希望你?得好?我本"?肥⾎?史"[晕][哈哈]@Pete三姑⽗")
Out[4]: '希望你?得好?我本"?肥⾎?史"'
In[5]: clean("回复@钱旭明QXM:[嘻嘻][嘻嘻] //@钱旭明QXM:杨⼤哥[good][good]")
Out[5]: '杨⼤哥'
In[6]: clean("【#赵薇#:正筹备下⼀部电影但不是青春⽚....t/8FLopdQ")
Out[6]: '【#赵薇#:正筹备下⼀部电影但不是青春⽚....'
In[7]: clean("[酷]//@芊如_GZ:[哈哈]// @布丁clout : 哈哈 // @audrey-panda :试了我家那位,说我属于"放⼼的没法看的"[晕] // @芊如_GZ :[晕]")
Out[7]: '哈哈试了我家那位,说我属于"放⼼的没法看的"'
需要清洗数据的场景,除了微博以外,还有HTML代码,URL,Email等,所以我将⼀批常⽤的数据清洗操作整合进了我开发的HarvestText库()中,还有精细分句,指定实体分词等功能,简化⼤家的数据分析流程,欢迎试⽤~
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论