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模拟登陆类
Mar 29 Python
Python复制文件操作实例详解
Nov 10 Python
centos6.7安装python2.7.11的具体方法
Jan 16 Python
Python模拟脉冲星伪信号频率实例代码
Jan 03 Python
python使用正则表达式来获取文件名的前缀方法
Oct 21 Python
Django 对象关系映射(ORM)源码详解
Aug 06 Python
python爬虫 基于requests模块发起ajax的get请求实现解析
Aug 20 Python
python 数据提取及拆分的实现代码
Aug 26 Python
浅谈PyQt5中异步刷新UI和Python多线程总结
Dec 13 Python
浅谈Python访问MySQL的正确姿势
Jan 07 Python
Python Django view 两种return的实现方式
Mar 16 Python
解决Pytorch半精度浮点型网络训练的问题
May 24 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
Zerg剧情介绍
2020/03/14 星际争霸
虫族 ZERG 概述
2020/03/14 星际争霸
YB217、YB235、YB400浅听
2021/03/02 无线电
php自动获取关键字的方法
2015/01/06 PHP
php生成curl命令行的方法
2015/12/14 PHP
Zend Framework入门教程之Zend_View组件用法示例
2016/12/09 PHP
php中加密解密DES类的简单使用方法示例
2020/03/26 PHP
JavaScript版代码高亮
2006/06/26 Javascript
利用进制转换压缩数字函数分享
2014/01/02 Javascript
JavaScript避免代码的重复执行经验技巧分享
2014/04/17 Javascript
JS 实现列表与多选框选择附预览动画
2014/10/29 Javascript
jQuery对于显示和隐藏等常用状态的判断方法
2014/12/13 Javascript
详解JavaScript对W3C DOM模版的支持情况
2015/06/16 Javascript
Angular项目从新建、打包到nginx部署全过程记录
2017/12/09 Javascript
js实现左右两侧浮动广告
2018/07/09 Javascript
一百行JS代码实现一个校验工具
2019/04/30 Javascript
vue路由拦截器和请求拦截器知识点总结
2019/11/08 Javascript
JavaScript HTML DOM 元素 (节点)新增,编辑,删除操作实例分析
2020/03/02 Javascript
JavaScript组合设计模式--改进引入案例分析
2020/05/23 Javascript
在vue中实现禁止回退上一步,路由不存历史记录
2020/07/22 Javascript
[01:38]【DOTA2亚洲邀请赛】Sumail——梦开始的地方
2017/03/03 DOTA
python读取注册表中值的方法
2013/04/08 Python
python3实现TCP协议的简单服务器和客户端案例(分享)
2017/06/14 Python
Python将字符串常量转化为变量方法总结
2019/03/17 Python
Python解释器以及PyCharm的安装教程图文详解
2020/02/26 Python
Django之腾讯云短信的实现
2020/06/12 Python
将不规则的Python多维数组拉平到一维的方法实现
2021/01/11 Python
美国知名的旅游网站:OneTravel
2018/10/09 全球购物
俄罗斯三星品牌商店:Samsungstore
2020/04/05 全球购物
武汉东之林科技有限公司机试
2013/09/17 面试题
班级德育工作实施方案
2014/02/21 职场文书
中国梦主题教育活动总结
2014/05/05 职场文书
维护民族团结演讲稿
2014/08/27 职场文书
南京导游词
2015/02/03 职场文书
社区服务活动报告
2015/02/05 职场文书
在容器中使用nginx搭建上传下载服务器
2022/05/11 Servers