概述
一、问题背景
由于最近做nlp相关的项目,在进行数据预处理的时候,需要对文本进行分词、去停用词、词性标注、标点去除等预处理方法。
由于标点符号会影响我们分词的效果,这里我着重了解学习了标点去除的方法,总结了有以下几种,欢迎大家补充????
二、解决方案
以下描述了4种方法:
import re
import string
sentence = "+今天=是!2021! 年/8月?1,7日★.---《七夕节@》:让我*们出门(#@)去“感受”夏天的荷尔蒙!"
sentenceClean = []
# method 1
remove_chars = '[·’!"#$%&'()#!()*+,-./:;<=>?@,:?¥★、….>【】[]《》?“”‘’[\]^_`{|}~]+'
string1 = re.sub(remove_chars, "", sentence)
sentenceClean.append(string1)
# method 2
punct = str.maketrans({key:"" for key in string.punctuation})
# 这里的string中包含的标点符号不是很全
# string.punctuation = !"#$%&'()*+,-./:;<=>?@[]^_`{|}~ 都是英文字符下的标点
string2 = sentence.translate(punct)
sentenceClean.append(string2)
# method 3
string3 = "".join(re.findall(r'bw+b',sentence))
# 正则表达式中b可以简单理解为单词的边界(指的是字母数字和非字母数字的边界),w表示字母数字下划线,
#'bw+b'在这道题中就能做到匹配一个单词,re.findall是将全部的单词找出来
sentenceClean.append(string3)
# method 4
string4 = re.sub('W*', '', sentence) # 把非单词字符全部替换为空,恰好与w相反
sentenceClean.append(string4)
print(sentence)
print(sentenceClean)
'''
以下的结果有一些细微的差别,可以自行对比查找下原因。
result:
+今天=是!2021! 年/8月?1,7日★.---《七夕节@》:让我*们出门(#@)去“感受”夏天的荷尔蒙!
['今天是2021 年8月17日七夕节让我们出门去感受夏天的荷尔蒙',
'今天是!2021 年8月17日★《七夕节》:让我们出门()去“感受”夏天的荷尔蒙!',
'今天是2021年8月17日七夕节让我们出门去感受夏天的荷尔蒙',
'今天是2021年8月17日七夕节让我们出门去感受夏天的荷尔蒙']
'''
如果只是简单的个别标点的替换,可以使用replace
的内置函数进行替换,例如s.replace(’,’, “”)
。
以上的几种方法主要是分成了三种类型
- string库函数;
- 正则查找;
- replace内置函数。
有兴趣的同学可以对比一下三类方法的效率,在大量文本数据需要处理的时候,这是必须考虑的一个问题。
最后
以上就是高挑秀发为你收集整理的【Python】去除字符串中标点符号的多种方法的全部内容,希望文章能够帮你解决【Python】去除字符串中标点符号的多种方法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复