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字符串方法的简单使用
Jul 18 Python
python学生信息管理系统
Mar 13 Python
tensorflow 1.0用CNN进行图像分类
Apr 15 Python
Python XlsxWriter模块Chart类用法实例分析
Mar 11 Python
使用celery执行Django串行异步任务的方法步骤
Jun 06 Python
pytorch torch.expand和torch.repeat的区别详解
Nov 05 Python
Python生态圈图像格式转换问题(推荐)
Dec 02 Python
python+selenium 脚本实现每天自动登记的思路详解
Mar 11 Python
Python 如何对文件目录操作
Jul 10 Python
如何更换python默认编辑器的背景色
Aug 10 Python
Python基础之字符串格式化详解
Apr 21 Python
Python如何快速找到多个字典中的公共键(key)
Apr 29 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 数组排序方法总结 推荐收藏
2010/06/30 PHP
php第一次无法获取cookie问题处理
2014/12/15 PHP
php定时执行任务设置详解
2015/02/06 PHP
PHP简单实现断点续传下载的方法
2015/09/25 PHP
jQuery使用prepend()方法在元素前添加内容用法实例
2015/03/26 Javascript
基于Node.js实现nodemailer邮件发送
2016/01/26 Javascript
javascript获取select标签选中的值
2016/06/04 Javascript
jQuery ajaxSubmit 实现ajax提交表单局部刷新
2016/07/04 Javascript
纯JavaScript手写图片轮播代码
2016/10/20 Javascript
AngularJS指令用法详解
2016/11/02 Javascript
简单谈谈原生js的math对象
2017/06/27 Javascript
一篇文章让你彻底弄懂JS的事件冒泡和事件捕获
2017/08/14 Javascript
vue项目中导入swiper插件的方法
2018/01/30 Javascript
JS加密插件CryptoJS实现的Base64加密示例
2020/08/16 Javascript
vue实现路由不变的情况下,刷新页面操作示例
2020/02/02 Javascript
vue使用原生swiper代码实例
2020/02/05 Javascript
element el-tree组件的动态加载、新增、更新节点的实现
2020/02/27 Javascript
[04:45]上海特级锦标赛主赛事第三日TOP10
2016/03/05 DOTA
优化Python代码使其加快作用域内的查找
2015/03/30 Python
python初学之用户登录的实现过程(实例讲解)
2017/12/23 Python
python 使用re.search()筛选后 选取部分结果的方法
2018/11/28 Python
解决Python运行文件出现out of memory框的问题
2018/12/03 Python
钉钉群自定义机器人消息Python封装的实例
2019/02/20 Python
python中PS 图像调整算法原理之亮度调整
2019/06/28 Python
python实现大文本文件分割
2019/07/22 Python
关于jupyter打开之后不能直接跳转到浏览器的解决方式
2020/04/13 Python
利用Python发送邮件或发带附件的邮件
2020/11/12 Python
我的applet原先好好的, 一放到web server就会有问题,为什么?
2016/05/10 面试题
计算机专业毕业生自荐信范文
2014/03/06 职场文书
表决心的诗句大全
2014/03/11 职场文书
2014院党委领导班子对照检查材料思想汇报
2014/09/24 职场文书
三好学生竞选稿范文
2019/08/21 职场文书
python爬取豆瓣电影TOP250数据
2021/05/23 Python
使用tensorflow 实现反向传播求导
2021/05/26 Python
SQL实现LeetCode(180.连续的数字)
2021/08/04 MySQL
Python sklearn分类决策树方法详解
2022/09/23 Python