【Python】去除字符串中标点符号的多种⽅法
⼀、问题背景
  由于最近做nlp相关的项⽬,在进⾏数据预处理的时候,需要对⽂本进⾏分词、去停⽤词、词性标注、标点去除等预处理⽅法。  由于标点符号会影响我们分词的效果,这⾥我着重了解学习了标点去除的⽅法,总结了有以下⼏种,欢迎⼤家补充
⼆、解决⽅案
以下描述了4种⽅法:
import re
import string
sentence ="+今天=是!2021!  年/8⽉?1,7⽇★.---《七⼣节@》:让我*们出门(#@)去“感受”夏天的荷尔蒙!"
sentenceClean =[]
字符串replace函数
# 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 = anslate(punct)
sentenceClean.append(string2)
# method 3
string3 ="".join(re.findall(r'\b\w+\b',sentence))
# 正则表达式中\b可以简单理解为单词的边界(指的是字母数字和⾮字母数字的边界),\w表⽰字母数字下划线,
#'\b\w+\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(’,’, “”)。
以上的⼏种⽅法主要是分成了三种类型
1. string库函数;
2. 正则查;
3. replace内置函数。
  有兴趣的同学可以对⽐⼀下三类⽅法的效率,在⼤量⽂本数据需要处理的时候,这是必须考虑的⼀个问题。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。