如何处理将变音标记与UnicodeUtils结合使用?

时间:2014-05-26 15:51:15

标签: ruby unicode diacritics unicode-normalization phonetics

我正在尝试将空格插入到IPA字符串中,例如将ɔ̃wɔ̃tɨ变为ɔ̃ w ɔ̃ t ɨ。使用split / join是我的第一个想法:

s = ɔ̃w̃ɔtɨ
s.split('').join(' ') #=> ̃ ɔ w ̃ ɔ p t ɨ

正如我通过检查结果所发现的那样,带有变音符号的字母实际上被编码为两个字符。经过一些研究,我找到了UnicodeUtils模块,并使用了each_grapheme方法:

UnicodeUtils.each_grapheme(s) {|g| g + ' '} #=> ɔ ̃w ̃ɔ p t ɨ

这种方法很好,除了倒置标记外。代码会将̑a更改为̑ a。我尝试了规范化(UnicodeUtils.nfcUnicodeUtils.nfd),但无济于事。我不知道为什么each_grapheme方法对这个特殊的变音符号有问题,但我注意到在gedit中,短语也被视为一个单独的字符,而不是波浪号,重音等等。所以我的问题如下:是否有一种直接的归一化方法,即将Latin Small Letter ACombining Inverted Breve的组合转换为Latin Small Letter A With Inverted Breve

1 个答案:

答案 0 :(得分:0)

我理解你的问题涉及Ruby,但我认为问题与Python相同。一个简单的解决方案是明确地测试组合变音符号:

import unicodedata
liste=[]
s = u"ɔ̃w̃ɔtɨ"
comb=False
prec=u""
for char in s:
    if unicodedata.combining(char):
        liste.append(prec+char)
        prec=""
    else:
        liste.append(prec)
        prec=char
liste.append(prec)
print " ".join(liste)
>>>>  ɔ̃  w̃  ɔ t ɨ