Python处理中文标点符号大集合


Posted in Python onMay 14, 2018

中文文本中可能出现的标点符号来源比较复杂,通过匹配等手段对他们处理的时候需要格外小心,防止遗漏。以下为在下处理中文标点的时候采用的两种方法:

中文标点集合

比较常见标点有这些:

!?。"#$%&'()*+,-/:;<=>@[\]^_`{|}~⦅⦆「」、、〃》「」『』【】〔〕〖〗〘〙〚〛〜??〟〰〾〿?—‘'‛“”„‟…‧?.

调用zhon包的zhon.hanzi.punctuation函数即可得到这些中文标点。

如果想用英文的标点,则可调用string包的string.punctuation函数可得到:

!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~

因此,比如需要将所有标点符号去除,可以进行以下操作:

>>> import re
>>> from zhon.hanzo import punctuation
>>> line = "测试。。去除标点。。"
>>> print re.sub("[{}]+".format(punctuation), "", line.decode("utf-8")) # 需要将str转换为unicode

当然,如果想去除重复的符号而只保留一个,那么可以用\1指明:比如

>>> re.sub(ur"([{}])+".format(punctuation), "\1", line.decode("utf-8"))

你也可以手工指定这些标点符号

punctuation = """!?。"#$%&'()*+-/:;<=>@[\]^_`{|}~⦅⦆「」、、〃》「」『』【】〔〕〖〗〘〙〚〛〜??〟〰〾〿?—‘'‛“”„‟…‧?"""
re_punctuation = "[{}]+".format(punctuation)
line = re.sub(re_punctuation, "", line)

可以通过直接指定unicode码范围的办法来strip,比如:

去除所有半角全角符号,只留字母、数字、中文

def remove_punctuation(line):
  rule = re.compile(ur"[^a-zA-Z0-9\u4e00-\u9fa5]")
  line = rule.sub('',line)
  return line

汉字的范围为”\u4e00-\u9fa5“,这个是用Unicode表示的,所以前面必须要加”u“;字符”r“的意思是表示忽略后面的转义字符,这样简化了后面正则表达式里每遇到一个转义字符还得挨个转义的麻烦

最后可以组合成为一个函数

def remove_punctuation(line, strip_all=True):
  if strip_all:
    rule = re.compile(ur"[^a-zA-Z0-9\u4e00-\u9fa5]")
    line = rule.sub('',line)
  else:
    punctuation = """!?。"#$%&'()*+-/:;<=>@[\]^_`{|}~⦅⦆「」、、〃》「」『』【】〔〕〖〗〘〙〚〛〜??〟〰〾〿?—‘'‛“”„‟…‧?"""
    re_punctuation = "[{}]+".format(punctuation)
    line = re.sub(re_punctuation, "", line)
  return line.strip()

清洗完毕后,有时候我们希望按照多个标点符号来分割

比如只要遇到中文或英文的逗号和句号等符号就分割,可以直接用translate把这些符号翻译为统一的分隔符,再split:

strip_chars = '?"。.,,《》[]〖〗“”'
single_line = single_line.translate(str.maketrans(dict.fromkeys(strip_chars, '#')))
single_line = single_line.split('#')

总结

以上所述是小编给大家介绍的Python处理中文标点符号大集合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
详解Python中的循环语句的用法
Apr 09 Python
基于python yield机制的异步操作同步化编程模型
Mar 18 Python
微信 用脚本查看是否被微信好友删除
Oct 28 Python
Python 装饰器深入理解
Mar 16 Python
Python中你应该知道的一些内置函数
Mar 31 Python
python中defaultdict的用法详解
Jun 07 Python
opencv python 2D直方图的示例代码
Jul 20 Python
python 二维矩阵转三维矩阵示例
Nov 30 Python
python ubplot使用方法解析
Jan 10 Python
基于Pytorch SSD模型分析
Feb 18 Python
tensorflow实现残差网络方式(mnist数据集)
May 26 Python
Python 中如何写注释
Aug 28 Python
python numpy格式化打印的实例
May 14 #Python
Python常见字典内建函数用法示例
May 14 #Python
python:print格式化输出到文件的实例
May 14 #Python
查看django版本的方法分享
May 14 #Python
django 修改server端口号的方法
May 14 #Python
python字符串string的内置方法实例详解
May 14 #Python
python获取文件真实链接的方法,针对于302返回码
May 14 #Python
You might like
建立动态的WML站点(三)
2006/10/09 PHP
PHP中执行MYSQL事务解决数据写入不完整等情况
2014/01/07 PHP
defer属性导致引用JQuery的页面报“浏览器无法打开网站xxx,操作被中止”错误的解决方法
2010/04/27 Javascript
div模拟选择框示例代码
2013/11/03 Javascript
JavaScript 语言基础知识点总结(思维导图)
2013/11/10 Javascript
jQuery插件bgStretcher.js实现全屏背景特效
2015/06/05 Javascript
JS+CSS实现简单的二级下拉导航菜单效果
2015/09/21 Javascript
JavaScript jquery及AJAX小结
2016/01/24 Javascript
简单分析javascript中的函数
2016/09/10 Javascript
jquery pagination分页插件使用详解(后台struts2)
2017/01/22 Javascript
使用rollup打包JS的方法步骤
2018/12/05 Javascript
Vue中keep-alive组件作用详解
2020/02/04 Javascript
vue-router为激活的路由设置样式操作
2020/07/18 Javascript
解决echarts数据二次渲染不成功的问题
2020/07/20 Javascript
推荐下python/ironpython:从入门到精通
2007/10/02 Python
Python实现Linux下守护进程的编写方法
2014/08/22 Python
Python cookbook(数据结构与算法)字典相关计算问题示例
2018/02/18 Python
Python Numpy计算各类距离的方法
2019/07/05 Python
python3用urllib抓取贴吧邮箱和QQ实例
2020/03/10 Python
Python中的整除和取模实例
2020/06/03 Python
解析python 中/ 和 % 和 //(地板除)
2020/06/28 Python
Python Selenium模块安装使用教程详解
2020/07/09 Python
localStorage、sessionStorage使用总结
2017/11/17 HTML / CSS
会计专业毕业生自我评价
2013/09/25 职场文书
毕业生精彩的自我评价分享
2013/10/06 职场文书
《我爱祖国》演讲稿1000字
2014/09/26 职场文书
个人合伙协议书范本
2014/10/14 职场文书
颐和园英文导游词
2015/01/30 职场文书
英文邀请函
2015/02/02 职场文书
2015年教师见习期工作总结
2015/05/20 职场文书
暑期社会实践新闻稿
2015/07/17 职场文书
2016先进集体事迹材料范文
2016/02/25 职场文书
《没有任何借口》读后感:完美的执行能力
2020/01/07 职场文书
关于JavaScript回调函数的深入理解
2021/06/27 Javascript
世界各国短波电台对东亚播送时间频率表(SW)
2021/06/28 无线电
Java时间工具类Date的常用处理方法
2022/05/25 Java/Android