如何在Python中处理孟加拉语同形字符/字符串的相等比较?
在Python中判定视觉相同的孟加拉语同形字符串相等的方法
你遇到的是Unicode里的等价字符序列问题:两个字符串视觉完全一致,但底层由不同的Unicode码点组合而成。比如你给出的例子中,s1里的ড়ি是由独立的ড(U+09A1)和ি(U+09BC)拼接而成,而s2里的ড়ি是单个预组合码点U+09DC,二者属于Unicode标准定义的等价字符组合。
解决这个问题的核心是对字符串做Unicode规范化,把不同的等价编码序列统一成相同的范式。Python的unicodedata模块提供了现成的工具:
import unicodedata s1 = 'ফটিকছড়ি' s2 = 'ফটিকছড়ি' # 将两个字符串统一转换为NFC范式(预组合形式) normalized_s1 = unicodedata.normalize('NFC', s1) normalized_s2 = unicodedata.normalize('NFC', s2) # 此时直接比较即可得到正确结果 print(normalized_s1 == normalized_s2) # 输出:True
补充说明
- Unicode规范化有四种常用范式,这里用
NFC(Normalization Form C,预组合形式)即可,它会把分解的字符序列合并成单个预组合码点; - 也可以用
NFD(Normalization Form D,分解形式),它会把预组合码点拆成基础字符+附加标记的序列,只要对两个字符串用同一种范式处理,就能实现等价字符串的相等判定; - 这种方法适用于所有符合Unicode标准的复杂脚本语言,不止局限于孟加拉语。
内容的提问来源于stack exchange,提问作者Rafiqul Islam
相关产品推荐
相关产品推荐

