Intl.Collator сортировка по японскому языку - почему программа сортировки не определяет приоритеты японских символов в первую очередь? - PullRequest
0 голосов
/ 06 февраля 2019

Работая с другом, мы погрузились в сортировку, и мы хотели использовать лучшие практики Intl.Collator compare для сортировки на основе локали.

Для всех локалей:это работает, как и ожидалось, когда символы или текст языка имеют приоритет над другими, но японский язык кажется другим.

function letterSort(lang, letters) {
  letters.sort(new Intl.Collator(lang).compare);
  return letters;
}

console.log('EN sort:');
console.log(letterSort('en', ['a', '手に', '大人', 'b', '学校', '#', '金魚', 'きんぎょ', 'キンギョ']));

// =>["#", "a", "b", "きんぎょ", "キンギョ", "大人", "学校", "手に", "金魚"]

console.log('ZH sort:');
console.log(letterSort('zh', ['a', '手に', '大人', 'b', '学校', '#', '金魚', 'きんぎょ', 'キンギョ']));

// => ["#", "大人", "金魚", "手に", "学校", "a", "b", "きんぎょ", "キンギョ"]

console.log('JP sort:');
console.log(letterSort('ja', ['a', '手に', '大人', 'b', '学校', '#', '金魚', 'きんぎょ', 'キンギョ']));

// => ["#", "a", "b", "きんぎょ", "キンギョ", "大人", "学校", "手に", "金魚"]

В приведенном выше фрагменте вы заметите, что для английского и китайского языков оба будут располагать по приоритетам свой собственный текст.Японский, однако, нет.

После некоторых раскопок я смог обнаружить, что есть демонстрационный проект ICU , и похоже, что аналогичное упорядочение выполнено и применяется ICU.Также кажется, что заказ на японском языке является сложной проблемой .

enter image description here

Мой коллега опубликовал это как вынос и статью IЧувствую, что это немного трогает

Хорошо, я думаю, что понимаю проблему лучше, в основном, в японском языке есть четыре допустимых набора символов, один из которых - римские символы, поэтому сортировка по японскому будет сортировать каждый набор символов внутри себя, а не средидруг с другом.И римские иероглифы идут первыми из четырех наборов (вызывают Unicode).

^ Это объяснение правильно?Или есть более подходящий способ упорядочить японский язык, где японские иероглифы ставятся в первую очередь (звучит так, что это плохая практика, но я удивлен, что японцы согласны иметь свой собственный язык в конце сортов).В статье также подробно рассказывается о проблеме, но я не уверен, есть ли новые найденные способы заказа японского

1 Ответ

0 голосов
/ 06 февраля 2019

Поскольку существует четыре допустимых набора символов для японского языка как языка, сортировка происходит только в каждом из наборов, и затем каждый набор упорядочивается относительно друг друга заранее определенным образом:

  1. Рамадзи
  2. Катакана
  3. Хирагана
  4. Кандзи

Примечание: ромадзи, это просто римский набор символов.

Вы можете попробовать сами:

function letterSort(lang, letters) {
  letters.sort(new Intl.Collator(lang).compare);
  return letters;
}

const kanji = ['南', '北', '打'];
const hiragana = ['ぬ', 'ち', 'よ'];
const katakana = ['シ', 'イ', 'ホ'];
const romaji = ['a', 'c', 'b'];

console.log(letterSort('ja', [...kanji, ...hiragana, ...katakana, ...romaji]))

Мы видим, что результат соответствует тому, что мы ожидали: наборы символов сначала сортируются относительно друг друга, в то время как происходит более детальная сортировкав каждом наборе символов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...