python中unicode(python 对unicode字符进行normalized)
参考:https://blog.csdn.net/weixin_42401159/article/details/112187778
https://cloud.tencent.com/developer/article/1406445
在处理一些自然语言文字的过程中 ,会遇到一些表面很奇怪的现象 。 比如两个单词 人肉眼看着一模一样 ,但是在计算机中读取出来却表示两者不相等 。当查看它们的的编码字符的时候 ,发现两者确实也不一样 。
例如:
事实上 ,在Unicode的编码中 ,经常会有一些特殊字符被编码成多种 Unicode 形式 。例如: 字符 U+00C7 (LATIN CAPITAL LETTER C WITH CEDILLA) 也可以被表示为下面列个字符的组合: U+0043 (LATIN CAPITAL LETTER C) 和 字符U+0327 (COMBINING CEDILLA).
这种情况下多发于那些需要包含音调的字符体系中(例如印地语 、德语 、西班牙语等) ,如以下字符"Ç" 。Unicode体系中 ,即可以用Compose(组合)的形式U+00C7来表示这个字符 。 也可以使用Decompose(分离)分别存储字符(U+0043)本身和音调(U+0327)本身 。
在上面的印地语中 ,出现问题的主要是因为字符"ज़" ,该字符下有一个小点 ,表示印地语中的一些音调问题(具体参考 Nuqta) 。该字符就拥有 Compose 和 Decompose 两种Unicode表示方法 , 因此才会出现上文中字符不等的例子 。
在Python中 ,我们可以利用 unicodedata.normalize 函数对字符进行标准化 。标准化分为两个方式:
unicodedata.normalize("NFKC", text): Normal form Composition: 将所有的文本标准化为 Compose 形式 。
unicodedata.normalize("NFKD", text): Normal form Decomposition: 将所有的文本标准化为 Decompose 形式 。更标准的写法,应该为
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!