14

Unicode では、アクセント付きの文字は 2 つの方法で表すことができます。アクセント付きの文字自体と、そのままの文字とアクセントの組み合わせです。たとえば、é (+U00E9) と e´ (+U0065 +U0301) は通常同じように表示されます。

R は以下をレンダリングします (バージョン 3.0.2、Mac OS 10.7.5 )。

> "\u00e9"
[1] "é"
> "\u0065\u0301"
[1] "é"

ただし、もちろん:

> "\u00e9" == "\u0065\u0301"
[1] FALSE

2つのユニコード文字を1文字の形式に変換するRの関数はありますか? 特に、ここでは に折りたたま"\u0065\u0301""\u00e9"ます。

これは、大量の文字列を処理するのに非常に便利です。iconvさらに、1 文字の形式は、少なくとも通常の Latin1 文字については、他のエンコーディングに簡単に変換でき、 plot.

よろしくお願いします。

4

1 に答える 1

14

R の文字列操作ツールボックスを拡張および簡素化するパッケージが開発されたようです (ついに!)。それはstringiと呼ばれ、非常に有望に見えます。そのドキュメントは非常によく書かれており、特にエンコーディングロケールに関するページは、主題に関する標準の R ドキュメントのいくつかよりもはるかに啓発的です。

私が探していたように、Unicode正規化関数があります(ここではフォームC):

> stri_trans_nfc('\u00e9') == stri_trans_nfc('\u0065\u0301')
[1] TRUE

また、これらの正規化の質問を統合し、それらについて考える手間を軽減するスマートな比較機能も含まれています。

> stri_compare('\u00e9', '\u0065\u0301')
[1] 0
# i.e. equal ;
# otherwise it returns 1 or -1, i.e. greater or lesser, in the alphabetic order.

開発者の Marek Gągolewski と Bartek Tartanus、そして情報を提供してくれた Kurt Hornik に感謝します。

于 2013-12-19T14:53:55.537 に答える