【python cookbook】【字符串与文本】9.将Unicode文本统一表示为规范形式
问题:确保所有的Unicode字符串都拥有相同的底层
解决方案:为解决同一个文本拥有多种不同的表示形式问题,应该先将文本统一表示为规范形式,这可以通过unicodedata模块来完成,
unicodedata.normalize(字符串规定采用的规范,字符串)。
在Unicode中,有些特定的字符可以被表示成多种合法的代码点序列。
NFC:表示全组成的字符(即,如果可能的话就使用单个代码点);
NFD:表示组合字符,每个字符应该能完全分解开;
s1 = 'Spicy Jalape\u00f1o' #Spicy Jalapeño使用的是字符“ñ” 的全组成形式(U+00F1)
s2 = 'Spicy Jalapen\u0303o' #Spicy Jalapeño使用的是拉丁字母“n”紧跟着一个“~”组合而成的字符(U+0303) # (a) Print them out (usually looks identical)
print(s1)
print(s2) # (b) Examine equality and length
print('s1 == s2 ?', s1 == s2)
print('len(s1)=',len(s1), 'len(s1)=',len(s2))
print ('---------------------------')
# (c) Normalize and try the same experiment
import unicodedata n_s1 = unicodedata.normalize('NFC', s1)
n_s2 = unicodedata.normalize('NFC', s2) print('n_s1 == n_s2 ?', n_s1 == n_s2)
print('len(n_s1)=',len(n_s1), 'len(n_s2)',len(n_s2))
print ('*****************************')
# (d) Example of normalizing to a decomposed form and stripping accents
t1 = unicodedata.normalize('NFD', s1)
t2 = unicodedata.normalize('NFD', s2)
print ('t1 == t2 ?',t1==t2)
print ('len(t1)=',len(t1),'len(t2)=',len(t2))
print(''.join(c for c in t1 if not unicodedata.combining(c)))
>>> ================================ RESTART ================================
>>>
Spicy Jalapeño
Spicy Jalapeño
s1 == s2 ? False
len(s1)= 14 len(s1)= 15
---------------------------
n_s1 == n_s2 ? True
len(n_s1)= 14 len(n_s2) 14
*****************************
t1 == t2 ? True
len(t1)= 15 len(t2)= 15
Spicy Jalapeno
>>>
补充:
在对文本进行过滤和净化时,规范化同样也占据了重要的部分。假设想从某些文本中去除所有的音符标记(可能为了搜索或匹配):
t1 = unicodedata.normalize('NFD', s1)
print(''.join(c for c in t1 if not unicodedata.combining(c)))
unicodedata.combining()对字符做检查,判断它是否文一个组合型字符
这个例子展示了unicodedata模块的另一个重要功能:用来判断字符是否属于某个字符类型;
【python cookbook】【字符串与文本】9.将Unicode文本统一表示为规范形式的更多相关文章
- python cookbook 字符串和文本
使用多个界定符分隔字符串 import re line = 'asdf fjdk; afed, fjek,asdf, foo' print(re.split(r'[;,\s]\s*', line)) ...
- python书籍推荐:Python Cookbook第三版中文
所属网站分类: 资源下载 > python电子书 作者:熊猫烧香 链接:http://www.pythonheidong.com/blog/article/44/ 来源:python黑洞网 内容 ...
- python基础——字符串
Python的核心数据类型--字符串 常见字符串常量和表达式 操作 解释 s = '' 空字符串 s = "dodo's" 双引号和单引号 s = 'd\no\p\td\x00o' ...
- Python Cookbook(第3版)中文版:15.14 传递Unicode字符串给C函数库
15.14 传递Unicode字符串给C函数库¶ 问题¶ 你要写一个扩展模块,需要将一个Python字符串传递给C的某个库函数,但是这个函数不知道该怎么处理Unicode. 解决方案¶ 这里我们需要考 ...
- 【python cookbook】【字符串与文本】6.以不区分大小写的方式对文本做查找和替换
问题:以不区分大小写的方式对文本做查找和替换 解决方法:使用re模块,并对各种操作都添加上re.IGNORECASE标记 text='UPPER PYTHON,lower python,Mixed P ...
- Python:字符串
一.序列的概念 序列是容器类型,顾名思义,可以想象,“成员”们站成了有序的队列,我们从0开始进行对每个成员进行标记,0,1,2,3,...,这样,便可以通过下标访问序列的一个或几个成员,就像C语言中的 ...
- python cookbook学习1
python cookbook学习笔记 第一章 文本(1) 1.1每次处理一个字符(即每次处理一个字符的方式处理字符串) print list('theString') #方法一,转列表 结果:['t ...
- python基础——字符串和编码
python基础——字符串和编码 字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题. 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用 ...
- Python 的字符串
Python 的字符串 在最新的 Python 3 版本中,字符串是以 Unicode 编码的,也就是说,Python 的字符串支持多语言,例如: print('包含中文的 str') 对于单个字符的 ...
随机推荐
- TTL和CMOS
reprint from:http://blog.csdn.net/hemeinvyiqiluoben/article/details/9253249 TTL和COMS电平匹配以及电平转换的方法 一. ...
- iOS单例模式
单例模式用于当一个类只能有一个实例的时候, 通常情况下这个“单例”代表的是某一个物理设备比如打印机,或是某种不可以有多个实例同时存在的虚拟资源或是系统属性比如一个程序的某个引擎或是数据.用单例模式加以 ...
- js访sleep方法
function sleep(n) { var start = new Date().getTime(); while (true) if (new Date().getTime() - start ...
- [转]那些年我还不懂:IList,ICollection,IEnumerable,IEnumerator,IQueryable
1.首先看一个简单的例子 int[] myArray = { 1, 32, 43, 343 }; IEnumerator myie = myArray.GetEnumerator(); myie.Re ...
- git客户端
https://git-for-windows.github.io/ http://blog.csdn.net/shulianghan/article/details/18812279 自己的gith ...
- js - ajax中的get和post说明
转自:http://www.cnblogs.com/hateyoucode/archive/2009/12/09/1620050.html 一.谈Ajax的Get和Post的区别 Get方式: 用 ...
- PHYLIP linux安装
PHYLIP的安装: http://download.chinaunix.net/download.php?id=29483&ResourceID=8135下载 gunzip phylip-3 ...
- oracle和sql server的区别(1)
A.instance和database 1.从oracle的角度来说,每个instance对应一个database.有时候多个instance对应一个database(比如rac环境).有自己的Sys ...
- Lintcode: Segment Tree Query
For an integer array (index from 0 to n-1, where n is the size of this array), in the corresponding ...
- 20145207 《Java程序设计》第10周学习总结
前言: 最后一篇java博客好激动啊..不过猜猜我在干什么?没错,安虚拟机,唉!紧接着又是一大波信安系统的博客,真开心~好啦边敲博客,边装虚拟机. 教材知识汇总 13.1 网络概述 13.1.1计 ...