2015-01-06 3 views
3

У меня есть следующий перл программаСортировка чешски в 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"; 

} 

Эта программа выводит на выход:

наличными Cash кошка Cat ДЕНЕЖНЫХ тире тире Dash базы данных базы данных

Я считаю, что ac areful наблюдатель должен сделать вывод, что в Чехии либо

  1. č является первым классом письмо, а ð нет.
  2. ЮНИКОДу :: Разобрать :: Locale сортировкой Чехии в Perl не является правильным

Я хотел бы верить (1), а также следующие подкрепляет мой случай:

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

, где указано:

Позвольте нам сортировать записи по существующим чешским соглашениям, насколько это практически возможно. То есть, только следующие символы имеют какое-либо сортировки значения:

а č defgh ч ijklmnopqr ř s š tuvwxyz ž

Но я смущен, потому что я думал, что «D с ау над ним» (и это в нижнем регистр эквивалент), является первоклассной буквой чешского алфавита.

Где @tchrist, когда он мне нужен?

Буду признателен за понимание.

+0

Я знаю почти ничего о чешском языке, но если CLDR не укажет, что на чешском языке * ď * является его собственной буквой, сгруппированной после * d *, так как * č * является собственной буквой, сгруппированной после * c *, тогда это объясняет, что вы видите. Можно ввести пошив в коллаторе, если вам нужно, чтобы он вел себя иначе, чем с по умолчанию '--locale =>" cs ", используя тщательно обработанный аргумент' --entry' для конструктора с переопределяющим DUCET элементы точно определены. Я не получил ваш пинг, потому что вы не прокомментировали мое сообщение или добавили комментарий в одну из моих цепочек комментариев. – tchrist

ответ

0

Если сортировать по умолчанию не работает для вас, это общий обходной путь легкий сделай сам:

Сделайте сортировку массива, превращая ваши строки: если a и á должны быть эквивалентны, преобразование и до a; если á должен следовать a, преобразуйте его в a[, например (любой символ после z должен быть в порядке). Преобразовать ch в h[, как это происходит после h, если я правильно понял. Затем отсортируйте исходный массив вместе с массивом sort-array.

+0

Я надеюсь, что либо (1) кто-то проверяет, что мои результаты верны (2) Есть кое-что из «исправления» этого, используя что-то вроде пошива, которое я действительно не понимаю. – egilchri

Смежные вопросы