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基于twisted实现简单的web服务器
Sep 29 Python
python检测远程服务器tcp端口的方法
Mar 14 Python
python实现批量图片格式转换
Jun 16 Python
python pandas 对series和dataframe的重置索引reindex方法
Jun 07 Python
python中datetime模块中strftime/strptime函数的使用
Jul 03 Python
Python实现多级目录压缩与解压文件的方法
Sep 01 Python
python格式化输出保留2位小数的实现方法
Jul 02 Python
Python远程开发环境部署与调试过程图解
Dec 09 Python
python面向对象之类属性和类方法案例分析
Dec 30 Python
python数据预处理方式 :数据降维
Feb 24 Python
用Python爬取LOL所有的英雄信息以及英雄皮肤的示例代码
Jul 13 Python
Python 用户输入和while循环的操作
May 23 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/02/16 PHP
ThinkPHP CURD方法之where方法详解
2014/06/18 PHP
PHP学习笔记(三):数据类型转换与常量介绍
2015/04/17 PHP
PHP CURL中传递cookie的方法步骤
2019/05/09 PHP
javascript下操作css的float属性的特殊写法
2007/08/22 Javascript
javascript 有趣而诡异的数组
2009/04/06 Javascript
js 鼠标拖动对象 可让任何div实现拖动效果
2009/11/09 Javascript
基于JavaScript实现继承机制之原型链(prototype chaining)的详解
2013/05/07 Javascript
js function定义函数的几种不错方法
2014/02/27 Javascript
JS应用正则表达式转换大小写示例
2014/09/18 Javascript
node.js中的fs.fchownSync方法使用说明
2014/12/16 Javascript
浅析JavaScriptSerializer类的序列化与反序列化
2016/11/22 Javascript
js oncontextmenu事件使用详解
2017/03/25 Javascript
微信小程序开发之麦克风动画 帧动画 放大 淡出
2017/04/18 Javascript
详解从vue-loader源码分析CSS Scoped的实现
2019/09/23 Javascript
vue excel上传预览和table内容下载到excel文件中
2019/12/10 Javascript
对vue生命周期的深入理解
2020/12/03 Vue.js
[01:38]【DOTA2亚洲邀请赛】Sumail——梦开始的地方
2017/03/03 DOTA
Python类方法__init__和__del__构造、析构过程分析
2015/03/06 Python
利用Python批量压缩png方法实例(支持过滤个别文件与文件夹)
2017/07/30 Python
python遍历文件夹找出文件夹后缀为py的文件方法
2018/10/21 Python
python利用Tesseract识别验证码的方法示例
2019/01/21 Python
Python求一批字符串的最长公共前缀算法示例
2019/03/02 Python
python实现文件助手中查看微信撤回消息
2019/04/29 Python
使用Pandas对数据进行筛选和排序的实现
2019/07/29 Python
python实现异常信息堆栈输出到日志文件
2019/12/26 Python
pandas 对group进行聚合的例子
2019/12/27 Python
python爬虫scrapy图书分类实例讲解
2020/11/23 Python
印度领先的在线时尚商店:Koovs
2016/08/28 全球购物
使用索引(Index)有哪些需要考虑的因素
2016/10/19 面试题
巧克力蛋糕店创业计划书
2014/01/14 职场文书
普通党员对照检查材料
2014/08/28 职场文书
劳动纠纷调解协议书格式
2014/11/30 职场文书
php+laravel 扫码二维码签到功能
2021/05/15 PHP
解决Laravel使用验证时跳转到首页的问题
2021/11/17 PHP
Netty客户端接入流程NioSocketChannel创建解析
2022/03/25 Java/Android