1

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

4

1 回答 1

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 ɨ
于 2014-12-06T08:41:39.160 回答