14

在 Unicode 中,带重音的字母可以用两种方式表示:重音字母本身,以及裸字母加重音的组合。例如,é (+U00E9) 和 e´ (+U0065 +U0301) 通常以相同的方式显示。

R 呈现以下内容(版本 3.0.2,Mac OS 10.7.5):

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

但是,当然:

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

R 中是否有一个函数可以将两个 unicode 字符字母转换为它们的一个字符形式?特别是,在这里它会崩溃"\u0065\u0301""\u00e9".

这对于处理大量字符串非常方便。此外,单字符形式可以很容易地通过iconv- 至少对于通常的 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 回答