Python:使所有非组合的unicode字符组合

Python: make all non-combining unicode characters combining

我有带重音符号和变音符号的字符串,由非组合字符表示:

vyˇcíslitelnost (nerozhodnutelnost, v ˇety o neúplnosti),um ˇelá inteligence (automatické odvozování, rezoluce), univerzální nástroje: SAT a SMT ˇrešiˇce

我想把它们变成组合字符。例如上面的字符串看起来像:

vyčíslitelnost (nerozhodnutelnost, věty o neúplnosti),umělá inteligence (automatické odvozování, rezoluce), univerzální nástroje: SAT a SMT řešiče

我怎样才能做到这一点?我已经尝试过 unicodedata.normalize 但它对非组合字符没有影响。

感谢您的帮助

这是我的老派(反 pythonic)方法:

import unicodedata

lettersWithCaron = 'ČčĎďĚ켾ŇňŘřŠšŤťŽžDžǍǎǏǐǑǒǓǔǦǧǨǩǰȞȟ' # from Unicode database
caron            = '\u02C7'

astring = 'vyˇcíslitelnost (nerozhodnutelnost, v ˇety o neúplnosti),um ˇelá inteligence (automatické odvozování, rezoluce), univerzální nástroje: SAT a SMT ˇrešiˇce'
for lett in lettersWithCaron:
    astring = astring.replace(
        (caron + unicodedata.normalize( 'NFD',lett)).replace('\u030C',''), lett)
    
print( astring)

Output 表明在你的字符串中的一些卡龙 (v ˇety, um ˇelá) 之前有一个额外的 space (不像 ˇrešiˇce)…

.\SO647976.py

vyčíslitelnost (nerozhodnutelnost, v ěty o neúplnosti),um ělá inteligence (automatické odvozování, rezoluce), univerzální nástroje: SAT a SMT řešiče