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 相关文章推荐
多线程爬虫批量下载pcgame图片url 保存为xml的实现代码
Jan 17 Python
Python实现PS图像抽象画风效果的方法
Jan 23 Python
Python中函数参数调用方式分析
Aug 09 Python
DataFrame:通过SparkSql将scala类转为DataFrame的方法
Jan 29 Python
Python 2/3下处理cjk编码的zip文件的方法
Apr 26 Python
numpy中的ndarray方法和属性详解
May 27 Python
pyqt5 删除layout中的所有widget方法
Jun 25 Python
python 多进程共享全局变量之Manager()详解
Aug 15 Python
Python3将数据保存为txt文件的方法
Sep 12 Python
Python3.7安装keras和TensorFlow的教程图解
Jun 18 Python
使用tensorflow显示pb模型的所有网络结点方式
Jan 23 Python
python怎么提高计算速度
Jun 11 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
在IIS7.0下面配置PHP 5.3.2运行环境的方法
2010/04/13 PHP
Zend Studio (eclipse)使用速度优化方法
2011/03/23 PHP
php中自定义函数dump查看数组信息类似var_dump
2014/01/27 PHP
php输出xml属性的方法
2015/03/19 PHP
jQuery ui1.7 dialog只能弹出一次问题
2009/08/27 Javascript
用js解决数字不能换行问题
2010/08/10 Javascript
boxy基于jquery的弹出层对话框插件扩展应用 弹出层选择器
2010/11/21 Javascript
JS文本框不能输入空格验证方法
2013/03/19 Javascript
eclipse如何忽略js文件报错(附图)
2013/10/30 Javascript
JavaScript实现动态删除列表框值的方法
2015/08/12 Javascript
快速学习jQuery插件 Cookie插件使用方法
2015/12/01 Javascript
JavaScript 不支持 indexof 该如何解决
2016/03/30 Javascript
requirejs + vue 项目搭建详解
2017/06/16 Javascript
5分钟快速掌握JS中var、let和const的异同
2018/09/19 Javascript
JavaScript中关于base64的一些事
2019/05/06 Javascript
小程序新版订阅消息模板消息
2019/12/31 Javascript
webpack 如何同时输出压缩和未压缩的文件的实现步骤
2020/06/05 Javascript
python 中的列表解析和生成表达式
2011/03/10 Python
Python解释执行原理分析
2014/08/22 Python
Python实现从url中提取域名的几种方法
2014/09/26 Python
Python内置函数—vars的具体使用方法
2017/12/04 Python
TensorFlow神经网络优化策略学习
2018/03/09 Python
Python实现基于POS算法的区块链
2018/08/07 Python
python得到一个excel的全部sheet标签值方法
2018/12/10 Python
Python实现计算字符串中出现次数最多的字符示例
2019/01/21 Python
Python基于BeautifulSoup和requests实现的爬虫功能示例
2019/08/02 Python
Python模块/包/库安装的六种方法及区别
2020/02/24 Python
Pyspark获取并处理RDD数据代码实例
2020/03/27 Python
西部世纪面试题
2014/12/05 面试题
银行职员思想汇报
2013/12/31 职场文书
股份合作协议书范本
2014/04/14 职场文书
大学新生军训自我鉴定
2014/09/18 职场文书
早读课迟到检讨书
2014/09/25 职场文书
刑事附带民事代理词
2015/05/25 职场文书
田径运动会广播稿
2015/08/19 职场文书
关于办理居住证的介绍信模板
2019/11/27 职场文书