在Perl中排序捷克语

时间:2015-01-06 02:24:11

标签: perl sorting unicode multilingual

我有以下perl程序

use 5.014_001;
use utf8;
use Unicode::Collate::Locale;


require 'Unicode/Collate/Locale/cs.pl';

binmode STDOUT, ':encoding(UTF-8)';

my @old_list = (
        "cash",
        "Cash",
        "cat",
        "Cat",
        "čash",
        "dash",
        "Dash",
        "Ďash",
        "database",
        "Database",
        );


my $col= Unicode::Collate::Locale->new(
    level => 3,                    
    locale => 'cs',
    normalization => 'NFD',
);


my @list = $col->sort(@old_list);

foreach my $item (@list){

    print $item, "\n";

}

该程序打印输出:

现金 现金 猫 猫 现金 短跑 短跑 短跑 数据库 数据库

我相信一个细心的观察者必须在捷克得出结论

  1. č是一流的信件,而Ď则不是。
  2. 对Perl中的捷克语的Unicode :: Collat​​e :: Locale排序不正确
  3. 我想相信(1),以下是我的理由:

    http://en.wiktionary.org/wiki/Index_talk:Czech

    它说:

    让我们尽可能按照现有的捷克公约对条目进行排序。也就是说,只有以下字符具有任何排序意义:

    a bcčde f g h ch i j k l m n o p q rřst u v w x yzž

    但是我很困惑,因为我认为“D with a v over it”(并且它是小写的等价物),是捷克字母的一流字母。

    当我需要他的时候@tchrist在哪儿?

    我对此有任何见解表示感谢。

2 个答案:

答案 0 :(得分:0)

如果默认排序不适合你,这个常见的解决方法是一个简单的自己动手:

通过转换字符串来制作排序数组:如果aá应该相同,则转换为a;如果á应该遵循a,请将其转换为a[,例如z之后的任何字符都应该没问题。如果我理解正确的话,将ch转换为h[,因为它会追踪h。然后将原始数组与sort-array一起排序。

答案 1 :(得分:0)

尽管捷克语是我的母语,但我并不完全了解捷克语。但肯定的是,对于带有变音符号的ď,ť,和维基,变音符号的含义低于其他捷克语符如č。

为什么呢?这与发音有关。除非同化和非原生语言,所有辅音,但d,t和n都有清晰的发音,无论其背景如何。 (“Ch”被认为是一个单独的字母。)当它们后面跟着“i”,“í”或“ě”时,这三个字母(D,T和N)可以“软化”。在那些情况下,他们被发音,就像他们有一个caron(háček)。结果,他们的变音符号不那么重要了。