如果你经常要处理非英文的拉丁语系语言,或者做搜索相关项目,这真是个好用到哭的python内置库。我深有感触。
- 形如
café
这种带着重音符号的拉丁文词组,想要当成英文处理,可以用unicodedata库的unicodedata.normalize('NFKD', 'café')
,将重音符号挑出来,然后再去掉特殊符号,从而变成ASCII范围内的英文。 unicodedata.normalize
第一个参数有4个可选项NFC/NFD/NFKC/NFKD
,NFC会把重音符合合并到字母上,NFD相反,会拆分出来,NFKC和NFKD同上,但是会做兼容处理。比如符号’μ’会转成希腊字母’μ’,还有二分之一那个符号(\u00bd),会被转成1/2。这对于提升搜索体验很有意义。-
unicodedata.name(uchar)
可以显示特殊字符的名称,也可以用unicodedata.lookup(name)
根据名称找到对应的字符。比如1 2
>>> name(u'\u00bd') 'VULGAR FRACTION ONE HALF'
-
unicodedata.numeric(uchar)
会将内容直接转成对应的数字,比如,这个函数也能将罗马数字、中文数字、中文繁体数字、特殊符号数字都转成标准float类型,如下:1 2 3 4 5 6 7 8
>>> numeric(u'\u00bd') 0.5 >>> numeric(u'①') 1.0 >>> numeric(u'貮') 2.0 >>> numeric(u'三') 3.0
-
unicodedata.category(uchar)
可以区分字符的类型,有以下几种:1 2 3 4 5 6
Lu(letter,uppercase):大写字母。 Ll(letter,lowercase):小写字母。 Lt(letter,titlecase):词首字母大写的字母。 Lm(letter,modifier):修饰符字母字符,它是独立式的间距字符,指示前面字母的修改。 Lo(letter,other):不属于大写字母、小写字母、词首字母大写或修饰符字母的字母。 Nd(number,decimal digit):十进制数字字符,即范围 0 到 9 内的字符。