我正在尝试将空格插入到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.nfc
,UnicodeUtils.nfd
),但无济于事。我不知道为什么each_grapheme
方法对这个特殊的变音符号有问题,但我注意到在gedit中,短语也被视为一个单独的字符,而不是波浪号,重音等等。所以我的问题如下:是否有一种直接的归一化方法,即将Latin Small Letter A
和Combining Inverted Breve
的组合转换为Latin Small Letter A With Inverted Breve
?
答案 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 ɨ