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 27 Python
Eclipse中Python开发环境搭建简单教程
Mar 23 Python
Python数据结构之双向链表的定义与使用方法示例
Jan 16 Python
django加载本地html的方法
May 27 Python
Python爬虫小技巧之伪造随机的User-Agent
Sep 13 Python
Python用字典构建多级菜单功能
Jul 11 Python
Python符号计算之实现函数极限的方法
Jul 15 Python
django使用admin站点上传图片的实例
Jul 28 Python
Python爬取豆瓣视频信息代码实例
Nov 16 Python
python单例设计模式实现解析
Jan 07 Python
Python逐行读取文件内容的方法总结
Feb 14 Python
Python面向对象特殊属性及方法解析
Sep 16 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
Ajax+PHP 边学边练 之二 实例
2009/11/24 PHP
PHP基于php_imagick_st-Q8.dll实现JPG合成GIF图片的方法
2014/07/11 PHP
PHP使用PHPexcel导入导出数据的方法
2015/11/14 PHP
基于PHP生成简单的验证码
2016/06/01 PHP
PHP实现上一篇下一篇的方法实例总结
2016/09/22 PHP
PHP环形链表实现方法示例
2017/09/15 PHP
在一个js文件里远程调用jquery.js会在ie8下的一个奇怪问题
2010/11/28 Javascript
js获取html参数及向swf传递参数应用介绍
2013/02/18 Javascript
关于js中for in的缺陷浅析
2013/12/02 Javascript
jQuery文件上传插件Uploadify使用指南
2014/06/05 Javascript
JavaScript的面向对象编程基础
2015/08/13 Javascript
JS如何判断是否为ie浏览器的方法(包括IE10、IE11在内)
2015/12/13 Javascript
jquery.form.js异步提交表单详解
2017/04/25 jQuery
详解JS获取HTML DOM元素的8种方法
2017/06/17 Javascript
激动人心的 Angular HttpClient的源码解析
2017/07/10 Javascript
在vue中获取dom元素内容的方法
2017/07/10 Javascript
微信小程序获取手机网络状态的方法【附源码下载】
2017/12/08 Javascript
JS实现去除数组中重复json的方法示例
2017/12/21 Javascript
微信小程序实现折叠展开效果
2018/07/19 Javascript
JS实现audio音频剪裁剪切复制播放与上传(步骤详解)
2020/07/28 Javascript
[59:44]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 paiN vs iG
2018/03/31 DOTA
python异步任务队列示例
2014/04/01 Python
Python不规范的日期字符串处理类
2014/06/10 Python
python中如何使用朴素贝叶斯算法
2017/04/06 Python
详谈python http长连接客户端
2017/06/12 Python
解决python3爬虫无法显示中文的问题
2018/04/12 Python
Python将文本去空格并保存到txt文件中的实例
2018/07/24 Python
实例讲解Python中整数的最大值输出
2019/03/17 Python
Python线程协作threading.Condition实现过程解析
2020/03/12 Python
python脚本定时发送邮件
2020/12/22 Python
马来西亚时装购物网站:ZALORA马来西亚
2017/03/14 全球购物
党员个人思想汇报
2013/12/28 职场文书
揭牌仪式策划方案
2014/05/28 职场文书
2015年教研组工作总结
2015/05/04 职场文书
2015年社区宣传工作总结
2015/05/20 职场文书
ztree+ajax实现文件树下载功能
2021/05/18 Javascript