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 相关文章推荐
tornado捕获和处理404错误的方法
Feb 26 Python
python通过百度地图API获取某地址的经纬度详解
Jan 28 Python
python 实现在Excel末尾增加新行
May 02 Python
python-tkinter之按钮的使用,开关方法
Jun 11 Python
django多个APP的urls设置方法(views重复问题解决)
Jul 19 Python
利用python list完成最简单的DB连接池方法
Aug 09 Python
Python 经典算法100及解析(小结)
Sep 13 Python
结合OpenCV与TensorFlow进行人脸识别的实现
Oct 10 Python
python turtle 绘制太极图的实例
Dec 18 Python
python操作docx写入内容,并控制文本的字体颜色
Feb 13 Python
python实现扫雷小游戏
Apr 24 Python
Python实现对齐打印 format函数的用法
Apr 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
PHP设计模式之迭代器模式的深入解析
2013/06/13 PHP
php顺序查找和二分查找示例
2014/03/27 PHP
php 多继承的几种常见实现方法示例
2019/11/18 PHP
JavaScript的parseInt 进制问题
2009/05/07 Javascript
使用javascipt---实现二分查找法
2013/04/10 Javascript
javascript删除元素节点removeChild()用法实例
2015/05/26 Javascript
js性能优化技巧
2015/11/29 Javascript
Vue2.0生命周期的理解
2018/08/20 Javascript
详解JavaScript中操作符和表达式
2018/09/12 Javascript
基于html+css+js实现简易计算器代码实例
2020/02/28 Javascript
vue中echarts图表大小适应窗口大小且不需要刷新案例
2020/07/19 Javascript
在vue中created、mounted等方法使用小结
2020/07/21 Javascript
vue 添加和编辑用同一个表单,el-form表单提交后清空表单数据操作
2020/08/03 Javascript
vue实现广告栏上下滚动效果
2020/11/26 Vue.js
[02:23]2018DOTA2亚洲邀请赛趣味视频——反应测试
2018/04/04 DOTA
Python MD5文件生成码
2009/01/12 Python
python使用nntp读取新闻组内容的方法
2015/05/08 Python
python通过函数属性实现全局变量的方法
2015/05/16 Python
在Python中用split()方法分割字符串的使用介绍
2015/05/20 Python
python实现实时监控文件的方法
2016/08/26 Python
浅谈Python爬取网页的编码处理
2016/11/04 Python
Python实现k-means算法
2018/02/23 Python
基于Pandas读取csv文件Error的总结
2018/06/15 Python
解决Pycharm界面的子窗口不见了的问题
2019/01/17 Python
pycharm实现在虚拟环境中引入别人的项目
2020/03/09 Python
新版Pycharm中Matplotlib不会弹出独立的显示窗口的问题
2020/06/02 Python
HTML5拖拽文件到浏览器并实现文件上传下载功能代码
2013/06/06 HTML / CSS
Janie and Jack美国官网:GAP旗下的高档童装品牌
2019/09/09 全球购物
三星法国官方网站:Samsung法国
2019/10/31 全球购物
介绍一下Mysql的存储引擎
2015/02/12 面试题
优秀毕业生求职信范文
2014/01/02 职场文书
小班秋游活动方案
2014/02/22 职场文书
统招统分证明
2015/06/23 职场文书
windows安装python超详细图文教程
2021/05/21 Python
MySQL连接查询你真的学会了吗?
2021/06/02 MySQL
分享提高 Python 代码的可读性的技巧
2022/03/03 Python