最近開始學機器學習,學習分析垃圾郵件,其中有一部分是要求去除一段字符中的標點符號,查了一下,網上的大多很複雜例如這樣python
import re temp = "想作/ 兼_職/學生_/ 的 、加,我Q: 1 5. 8 0. !!?? 8 6 。0. 2。 3 有,驚,喜,哦" temp = temp.decode("utf8") string = re.sub("[\s+\.\!\/_,$%^*(+\"\']+|[+——!,。?、~@#¥%……&*()]+".decode("utf8"), "".decode("utf8"),temp) print string
或者是這樣的app
'''引入string模塊''' import string '''使用標點符號常量''' string.punctuation text = "*/@》--【】--12()測試*()" '''去除字符串中全部的字符,可增長自定義字符''' def strclear(text,newsign=''): import string # 引入string模塊 signtext = string.punctuation + newsign # 引入英文符號常量,可附加自定義字符,默認爲空 signrepl = '@'*len(signtext) # 引入符號列表長度的替換字符 signtable = str.maketrans(signtext,signrepl) # 生成替換字符表 return text.translate(signtable).replace('@','') # 最後將替換字符替換爲空便可 strclear(text,'》【】')
我一開始用的後面的這個,着實是有點暴力,因而找了查了一下原文檔,發現python3中徹底有更好的方法去實現這樣的功能(彷佛是新更新的?不太清楚,個人是python最新版本3.6.6)機器學習
和上面的方法同樣是利用的是str的translate()和maketrans()學習
translate()天然不用說這裏的重點是maketrans(),先放上官方的文檔測試
static str.maketrans(x[, y[, z]]) This static method returns a translation table usable for str.translate(). If there is only one argument,
it must be a dictionary mapping Unicode ordinals (integers) or characters (strings of length 1) to Unicode ordinals,
strings (of arbitrary lengths) or None. Character keys will then be converted to ordinals. If there are two arguments,
they must be strings of equal length,
and in the resulting dictionary,
each character in x will be mapped to the character at the same position in y.
If there is a third argument, it must be a string, whose characters will be mapped to None in the result.
能夠看出maketrans是能夠放三個參數的(之前一直覺得只有兩個....)spa
前兩個參數是須要一一對應進行替換,須要字符串長度相同code
第三個參數是直接替換爲Noneblog
這裏就直接上代碼了文檔
import string i = 'Hello, how are you!' i.translate(str.maketrans('', '', string.punctuation))
>>>'Hello how are you'
i = 'hello world i am li'
i.translate(str.maketrans('','','l'))字符串
>>>'heo word i am i'
這裏的string.punctuation 是python內置的標點符號的合集
既然看到了就總結下