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入门教程
Feb 08 Python
Python备份Mysql脚本
Aug 11 Python
Python使用当前时间、随机数产生一个唯一数字的方法
Sep 18 Python
python 获取键盘输入,同时有超时的功能示例
Nov 13 Python
pandas 把数据写入txt文件每行固定写入一定数量的值方法
Dec 28 Python
使用python socket分发大文件的实现方法
Jul 08 Python
python Django中models进行模糊查询的示例
Jul 18 Python
Python3标准库之threading进程中管理并发操作方法
Mar 30 Python
通过Python实现Payload分离免杀过程详解
Jul 13 Python
Pycharm中如何关掉python console
Oct 27 Python
python 对象真假值的实例(哪些视为False)
Dec 11 Python
解决Python中的modf()函数取小数部分不准确问题
May 28 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
不用数据库的多用户文件自由上传投票系统(2)
2006/10/09 PHP
php代码审计比较有意思的例子
2014/05/07 PHP
php获取远程文件大小
2015/10/20 PHP
总结PHP内存释放以及垃圾回收
2018/03/29 PHP
js 获取中文拼音,Select自动匹配字母获取值的代码
2009/09/23 Javascript
js的2种继承方式详解
2014/03/04 Javascript
javascript字符串函数汇总
2015/12/06 Javascript
JS去除重复并统计数量的实现方法
2016/12/15 Javascript
Node.js中流(stream)的使用方法示例
2017/07/16 Javascript
ReactNative实现Toast的示例
2017/12/31 Javascript
vue子传父关于.sync与$emit的实现
2019/11/05 Javascript
js实现简单的无缝轮播效果
2020/09/05 Javascript
[03:34]2014DOTA2西雅图国际邀请赛 淘汰赛7月15日TOPPLAY
2014/07/15 DOTA
多线程爬虫批量下载pcgame图片url 保存为xml的实现代码
2013/01/17 Python
python实现在sqlite动态创建表的方法
2015/05/08 Python
Python中的左斜杠、右斜杠(正斜杠和反斜杠)
2016/08/30 Python
Python求出0~100以内的所有素数
2018/01/23 Python
python3实现raspberry pi(树莓派)4驱小车控制程序
2020/02/12 Python
Python获取浏览器窗口句柄过程解析
2020/07/25 Python
CSS3之2D与3D变换的实现方法
2019/01/28 HTML / CSS
Mio Skincare中文官网:肌肤和身体护理
2016/10/26 全球购物
澳大利亚家具和家居用品在线:BROSA
2017/11/02 全球购物
英国在线花园中心:You Garden
2018/06/03 全球购物
Doyoueven官网:澳大利亚健身服饰和配饰品牌
2019/03/24 全球购物
高中生自我鉴定范文
2013/10/30 职场文书
厨房工作人员岗位职责
2013/11/15 职场文书
党校培训思想汇报
2014/01/03 职场文书
拾金不昧的表扬信
2014/01/16 职场文书
学术会议主持词
2014/03/17 职场文书
成立公司计划书
2014/05/07 职场文书
公司承诺书格式
2014/05/21 职场文书
2014年巴西世界杯口号
2014/06/05 职场文书
夫妻双方自愿离婚协议书
2014/10/24 职场文书
MySQL数据库10秒内插入百万条数据的实现
2021/11/01 MySQL
Java使用JMeter进行高并发测试
2021/11/23 Java/Android
Linux、ubuntu系统下查看显卡型号、显卡信息详解
2022/04/07 Servers