Python文本处理——中文标点符号处理
中文文本中可能出现的标点符号来源比较复杂,通过匹配等手段对他们处理的时候需要格外小心,防止遗漏。以下为在下处理中文标点的时候采用的两种方法,如有更好的工具,请推荐补充。
- 中文标点集合
比较常见标点有这些:
!?。"#$%&'()*+,-/:;<=>@[\]^_`{|}~⦅⦆「」、、〃》「」『』【】〔〕〖〗〘〙〚〛〜〝〞〟〰〾〿–—‘’‛“”„‟…‧﹏.
调用zhon包的zhon.hanzi.punctuation
函数即可得到这些中文标点。
如果想用英文的标点,则可调用string包的string.punctuation
函数可得到:!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~
因此,比如需要将所有标点符号去除,可以进行以下操作:
>>> import re
>>> from zhon.hanzo import punctuation
>>> line = "测试。。去除标点。。"
>>> print re.sub(ur"[%s]+" %punctuation, "", line.decode("utf-8")) # 需要将str转换为unicode
测试去除标点
>>> print re.sub(ur"[%s]+" %punctuation, "", line) #将不会发生替换
测试。。去除标点。。
当然,如果想去除重复的符号而只保留一个,那么可以用\1
指明:比如
>>> re.sub(ur"([%s])+" %punctuation, r"\1", line.decode("utf-8"))
如果不是用的zhon包提供的已经是unicode码的标点集,而是自己定义,那么请不要忘了转换成unicode码:
punc = "!?。"#$%&'()*+,-/:;<=>@[\]^_`{|}~⦅⦆「」、、〃》「」『』【】〔〕〖〗〘〙〚〛〜〝〞〟〰〾〿–—‘’‛“”„‟…‧﹏."
punc = punc.decode("utf-8")
- 直接指明标点的unicode码范围
所有字符的unicode编码可以参考这里。
大部分标点分布在以下几个范围:
Basic Latin: u'\u0020' - u'\007f'
general punctuation: u'\u2000' - u'\u206f'
CJK Symbols and Punctuation: u'\u3000' - u'\u303f'
halfwidth and fulllwidth forms: u'\uff00' - u'\uffef'
在用u'\u0020-\u007f\u2000-\u206f\u3000-\u303f\uff00-uffef'
替换punctuation
就能实现上述操作。
PS:中文常用字符的范围是u'\u4e00' - u'\u9fff'
。匹配所以中文可以这样:
re.findall(ur"\u4e00-\u9fff", line)
小结:
- 基本标点符号的处理和上中文的文本处理一样需要转换成unicode码,而且需要注意的是中文的格式比较多,每种格式对应的unicode码都是不同的,比如半角和全角的符号就是不同的unicode码。
- 由于标点符号在断句以及情感语气判断时比较重要,尤其是在网络短文本上尤其如此。在断句的时候可以在固定的full stop符号(!?。)基础上自己添加诸如~和,等获得自己想要的分句;而在情感分析的时候获取诸如!?...等符号的连续出现的长度可用于判断当前的语气强度。
参考:
- http://stackoverflow.com/questions/2718196/find-all-chinese-text-in-a-string-using-python-and-regex
- http://stackoverflow.com/questions/1366068/whats-the-complete-range-for-chinese-characters-in-unicode
- http://zhon.readthedocs.io/en/latest/#
Python文本处理——中文标点符号处理的更多相关文章
- 巧用css text-indent减小中文标点符号的占位大小
由于设计需要,我们的页面中经常会有如下效果: 可是我们实现出来的效果确实这样的: 看起来两行文本没有对齐嘛,仔细检查后原来是[字符的原因,因为是中文标点符号占半个字的位置.不信?选中下汉字标点符号看一 ...
- 转:python的nltk中文使用和学习资料汇总帮你入门提高
python的nltk中文使用和学习资料汇总帮你入门提高 转:http://blog.csdn.net/huyoo/article/details/12188573 nltk的安装 nltk初步使用入 ...
- 算是休息了这么长时间吧!准备学习下python文本处理了,哪位大大有好书推荐的说下!
算是休息了这么长时间吧!准备学习下python文本处理了,哪位大大有好书推荐的说下!
- PhpStorm 2016.3 For Mac 重大里程碑更新 -- 终于解决了不能输入中文标点符号的重大bug
PhpStorm 2016.3 For Mac 重大里程碑更新 1.[终于解决了]不能输入中文标点符号的重大bug,如 逗号“,”.“.”: 2.可以在一个窗体中,同时打开多个项目: 3.其他... ...
- php 过滤英文标点符号 过滤中文标点符号
php 过滤英文标点符号 过滤中文标点符号 代码 function filter_mark($text){ if(trim($text)=='')return ''; $text=preg_repla ...
- Java 中文字符判断 中文标点符号判断
Java Character 实现Unicode字符集介绍 CJK中文字符和中文标点判断 主要内容: 1. Java Character类介绍: 2. Unicode 简介及 UnicodeBloc ...
- Python中使用中文
python的中文问题一直是困扰新手的头疼问题,这篇文章将给你详细地讲解一下这方面的知识.当然,几乎可以确定的是,在将来的版本中,python会彻底解决此问题,不用我们这么麻烦了. 先来看看pytho ...
- Python 文本解析器
Python 文本解析器 一.课程介绍 本课程讲解一个使用 Python 来解析纯文本生成一个 HTML 页面的小程序. 二.相关技术 Python:一种面向对象.解释型计算机程序设计语言,用它可以做 ...
- 2019-02-18 扩展Python控制台实现中文反馈信息之二-正则替换
"中文编程"知乎专栏原文地址 续前文扩展Python控制台实现中文反馈信息, 实现了如下效果: >>> 学 Traceback (most recent call ...
随机推荐
- logstash 添加nginx日志
选择需求分类废话少说直接上图 第一张图: 2.此图搭配的日志格式是: log_format main '$remote_addr - $remote_user [$time_local] $http_ ...
- C++ 中堆栈学习
- RaphaelJS实践--猫和老鼠矢量图展示
(目前发现一些文章被盗用的情况,我们将在每篇文章前面添加原文地址,本文源地址:http://www.cnblogs.com/idealer3d/p/tomAndJerryRaphaelVectorGr ...
- sublime text 2 ubuntu安装及插件管理
参考 dudumao 1.下载Sublime Text2官网下载地址:http://www.sublimetext.com 2.安装Sublime Text2解压即可使用 $ sudo tar -jx ...
- ABAP 生产订单的创建与修改函数
ABAP 生产订单的创建与修改函数转自http://www.cnblogs.com/aBaoRong/archive/2012/04/11/2441946.html 如果生产订单过多,可以批量创建 ...
- 1.Counting DNA Nucleotides
Problem A string is simply an ordered collection of symbols selected from some alphabet and formed i ...
- Option
在scala中Option是一个有可能包含值的容器 Option对应的特质如下 trait Option[T] { def isDefined: Boolean def get: T def getO ...
- Surprise团队第三周项目总结
Surprise团队第二周项目总结 项目进展 这周我们小组的项目在上周的基础上进行了补充,主要注重在注册登录界面的实现,以及关于数据库的一些学习. 在设计注册登录界面时,每一块的地方控件都不一样,比如 ...
- 基于注解的SpringMVC简单介绍
SpringMVC是一个基于DispatcherServlet的MVC框架,每一个请求最先访问的都是DispatcherServlet,DispatcherServlet负责转发每一个Request请 ...
- java异常知识点整理
异常处理机制:捕获异常(try-catch-finally)和声明抛弃异常(throw); 所有的异常类都直接或者间接地继承于Throwable类: java异常分为可查异常和不可查异常两种.可查异常 ...