当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R icuSetCollate 按 ICU 设置整理


R语言 icuSetCollate 位于 base 包(package)。

说明

控制 ICU 完成整理的方式(ICU 的可选部分)R建造)。

用法

icuSetCollate(...)

icuGetCollate(type = c("actual", "valid"))

参数

...

命名参数,请参阅“详细信息”。

type

字符串:可以缩写。用于排序规则的实际区域设置或有效的最具体区域设置。

细节

可选地,R可以通过 ICU 构建来整理字符串(https://icu.unicode.org/)。对于这样的系统,icuSetCollate可用于调整整理的方式。在其他版本上,调用此函数不会执行任何操作,并会发出警告。

可能的参数是

locale

字符串,例如 "da_DK",给出要使用其排序规则的语言和国家/地区。如果存在,这应该是第一个参数。

case_first

"upper""lower""default" ,要求首先对大写或小写字符进行排序。默认值通常是小写开头,但并非在所有语言中(例如,在丹麦语的默认设置下)。

alternate_handling

控制‘variable’字符(主要是标点符号)的处理。可能的值为"non_ignorable"(初级强度)和"shifted"(四级强度)。

strength

应该使用哪些组件?可能的值 "primary""secondary""tertiary" (默认)、 "quaternary""identical"

french_collation

在法语语言环境中,重音影响排序规则的方式是从右到左,而在大多数其他语言环境中是从左到右。可能的值 "on""off""default"

normalization

字符串应该标准化吗?可能的值为"on""off"(默认值)。这会影响复合字符的排序规则。

case_level

二级和三级之间的附加级别,用于区分大小日语假名字符。可能的值"on""off"(默认)。

hiragana_quaternary

可能的值 "on" (首先在四进制级别对平假名进行排序)和 "off"

除了那些对整理和专门要求有详细了解的人之外,只有前三个可能会感兴趣。

locale 接受一些特殊值:

"none"

ICU 不用于排序:而是使用操作系统的排序服务。

"ASCII"

ICU 不用于排序:而是使用 C 函数 strcmp,该函数应按(无符号)数字顺序逐字节排序。

"default"

从操作系统获取区域设置,就像在会话开始时所做的那样(Windows 上除外)。如果环境变量R_ICU_LOCALE设置为非空值,则使用其值而不是咨询操作系统,除非环境变量LC_ALL设置为'C'(或未设置但LC_COLLATE设置为'C')。

"""root"

‘root’ 排序规则:参见https://www.unicode.org/reports/tr35/tr35-collation.html#Root_Collation.

有关 ‘real’ ICU 语言环境的规范,请参阅https://unicode-org.github.io/icu/userguide/locale/。请注意,ICU 不会报告不支持某个区域设置,而是退回到其“最适合”的想法(这可能相当不同,并且由icuGetCollate("actual"), 经常"root")。大多数英语语言环境都回落到"root"虽然例如"en_GB"是一个有效的区域设置(至少在某些平台上),它不包含特殊的排序规则。注意"C"不是受支持的 ICU 区域设置,因此R_ICU_LOCALE永远不应该设置为"C".

一些示例是 case_level = "on", strength = "primary" 忽略重音差异,alternate_handling = "shifted" 忽略空格和标点字符。

如果操作系统设置为使用 ICU,则最初 ICU 将不会用于整理C用于排序的区域设置和R_ICU_LOCALE未设置。一旦这个函数被调用并带有一个值locale, ICU 将被使用,直到再次调用locale = "none"。 ICU一次不会使用Sys.setlocale被称为"C"LC_ALL或者LC_COLLATE, 即使R_ICU_LOCALE已设置。 ICU将再次使用R_ICU_LOCALE一次Sys.setlocale被调用来设置不同的排序规则。环境变量LC_ALL(或者LC_COLLATE) 优先于R_ICU_LOCALE当且仅当它们设置为'C'。由于与其他设置整理顺序的方式相互作用,R_ICU_LOCALE应谨慎使用,并且仅在需要时使用。

如果指定了 locale,则所有自定义项都将重置为区域设置的默认值:如果 Sys.setlocale 更改了操作系统排序规则定位类别,则重置排序引擎。

对于 icuGetCollate ,说明正在使用的 ICU 区域设置的字符串(可能报告为 "ICU not in use" )。 ‘actual’ 语言环境可能比请求的语言环境更简单:例如 "da" 而不是 "da_DK" :英语语言环境可能会报告 "root"

注意

除 Windows 外,只要可用,默认情况下都会使用 ICU。由于它在内部以 UTF-8 工作,因此在 UTF-8 语言环境中效率最高。

在 Windows 上,R通常构建包括 ICU,但只有在环境变量存在时才会使用R_ICU_LOCALE已设置,当R开始或之后icuSetCollate调用来选择区域设置(因为 ICU 和 Windows 对区域设置名称的理解不同)。注意icuSetCollate(locale = "default")应该工作得相当好,但发现系统默认忽略环境变量,例如LC_COLLATE.

例子


## These examples depend on having ICU available, and on the locale.
## As we don't know the current settings, we can only reset to the default.
if(capabilities("ICU")) withAutoprint({
    icuGetCollate()
    icuGetCollate("valid")
    x <- c("Aarhus", "aarhus", "safe", "test", "Zoo")
    sort(x)
    icuSetCollate(case_first = "upper"); sort(x)
    icuSetCollate(case_first = "lower"); sort(x)

    ## Danish collates upper-case-first and with 'aa' as a single letter
    icuSetCollate(locale = "da_DK", case_first = "default"); sort(x) 
    ## Estonian collates Z between S and T
    icuSetCollate(locale = "et_EE"); sort(x)
    icuSetCollate(locale = "default"); icuGetCollate("valid")
})

也可以看看

Comparisonsort

capabilities 是否有ICU可用; extSoftVersion 其版本。

ICU 用户指南中有关整理的章节 (https://unicode-org.github.io/icu/userguide/collation/)。

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Setup Collation by ICU。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。