1

IPA 文字列にスペースを挿入しようとしています。たとえばɔ̃wɔ̃tɨɔ̃ w ɔ̃ t ɨ. 分割/結合を使用することが私の最初の考えでした:

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

結果を調べて分かったのは、分音記号付きの文字は実際には 2 文字としてエンコードされていることです。いくつかの調査の後、UnicodeUtils モジュールを見つけ、each_grapheme メソッドを使用しました。

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

逆ブレーブマークを除いて、これはうまくいきました。コードは に変わり̑aます̑ aUnicodeUtils.nfc正規化 ( 、 )を試みUnicodeUtils.nfdましたが、役に立ちませんでした。メソッドがこの特定の分音記号で問題を抱えている理由はわかりませんがeach_grapheme、gedit では、チルダやアクセントなどとは対照的に、breve も別の文字として扱われていることに気付きました。私の質問は次のとおりです。正規化の簡単な方法があります。つまり、 と のLatin Small Letter A組み合わせCombining Inverted BreveLatin 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 に答える