LINUX.ORG.RU

sort и буква ё

 


0

1

Доброго времени суток.
Есть файл с русскими словами (с присутствием буквы ё).

костёр
мама
абрикос
ёжик
коричневый
пламя
ездить
кость

Надо отсортировать слова в алфавитном порядке. В данном случае sort делает следующее:
абрикос
ездить
коричневый
кость
костёр
мама
пламя
ёжик

Хотя слово «кость» должно быть после слова «костёр», а слово «ёжик» должно быть перед словом «коричневый».

Чем можно отсортировать в правильном порядке русского алфавита?

Ответ на: комментарий от TeopeTuK

Проблема в том, что это продукт костыльного заимствования техники, пошедшее ещё с печатных машинок и даже раньше, ибо ё была менее приоритетна чем впихать другие, более полиграфически востребованные. Плюс была тема с абсурдной формой кириллофильства, из-за которого были темы по пересечению алфавитов кириллических алфавитов народов Европы… правда по сути почти односторонне, прогибался только один алфавит.

AKonia ★★★
()
Ответ на: комментарий от Parthen

Распостраненное приветствие, вполне уместное для сети. Чем не понравилось?

Это бессмысленная дичь, как и не менее распространённое «приветствую».

vvn_black ★★★★★
()
Ответ на: комментарий от AKonia

Мне представляется, что эти «проблемы» ты сам придумал (или рационализировал). В свете опциональности буквы Ё принятый порядок сортировки является удобным. Полагаю на этом закончить дискуссию.

TeopeTuK ★★★★★
()
Ответ на: комментарий от TeopeTuK

Стоит, ссылку на постановление или приказ, сам прочитай

Goury ★★★★★
()
Ответ на: комментарий от novus

Я заглянул в орфографический словарь Ушакова

Вылезай из криокамеры. Этому словарю на днях будет сто лет. Возьми что-нибудь посовременнее. Ожегова, например.

akk ★★★★★
()
Ответ на: комментарий от Silerus

мы редко пишем […] й

Особенно всякие войны с астеройда на мозайке в Тайланде. Что-там выйгрывают.

akk ★★★★★
()
Ответ на: комментарий от TeopeTuK

А в чём удобство ? Они и так по порядку идут. Более того как раз совмещение - бред, ибо у вас слова с ё и слова с е будут перемешиваться. Совмещение - просто костыль, навеянный изначально хотелками реформаторов языка избавится от ё, только это не было поддержано официально в виду того, что ухудшило бы письмо для слов с ё? ибо нейо, йожик и прочие хуже и в наборе и в письме. В очередной раз это вспылыло при импорте технологий.

AKonia ★★★
()
Ответ на: комментарий от AKonia

В каком бы виде ты не обнаружил слово с буквой Ё (в оригинальном или с опущенными точками), в словаре ты его ищешь в одном фиксированном месте, не прыгая по группам Е и Ё.

Про костыль и реформаторов сам придумал?

TeopeTuK ★★★★★
()
Ответ на: комментарий от TeopeTuK

В разных словарях по разному. Бывает, что слова с первой ё отдельно выделяют, а внутри слов не различают. Но в данном случае это просто очередной юникодный костыль, и не имеет смысла к нему базу на основе каких-то правил языка пытаться подводить.

zent
()
Последнее исправление: zent (всего исправлений: 1)
Ответ на: комментарий от zent

Если нетрудно, уточни, что ты имеешь в виду под словами «юникодный костыль» и при чем здесь юникод вообще. И интересно было бы увидеть словарь с отдельной группой для буквы Ё, который какой-то редактор выпустил в печать.

TeopeTuK ★★★★★
()
Последнее исправление: TeopeTuK (всего исправлений: 1)
Ответ на: комментарий от MKuznetsov

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

В общем случае он и не нужен. А нужно чтобы слова были в таком порядке

ёж
ежа
ежу
ель
ёлка
ем

а не

ежа
ежу
ель
ем
ёж
ёлка

Улавливаешь?

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 2)
Ответ на: комментарий от perl5_guy

Совсем другое дело! (Заодно с удивлением обнаружил, что и в локали en_US.UTF-8 collation Ё->Е работает.)

TeopeTuK ★★★★★
()
Ответ на: комментарий от Goury

Более подробную регламентацию даёт новая редакция этих правил (опубликована в 2006 году, одобрена Орфографической комиссией РАН), § 5[44]:

Примечание 3. В словарях слова с буквой ё размещаются в общем алфавите слов с буквой е, напр.: еле, елейный, ёлка, еловый, елозить, ёлочка, ёлочный, ель; веселеть, веселить(ся), весёлость, весёлый, веселье.

А есть ссылка на другие правила? В

постановлением правительства от 23 ноября 2006 г. N 714

пусто же.

x3al ★★★★★
()
Ответ на: комментарий от perl5_guy

String comparisons in 🐪 using eq, ne, lc, cmp, sort, &c&cc are always wrong. So instead of @a = sort @b, you need @a = Unicode::Collate->new->sort(@b). Might as well add that to your export PERL5OPTS=-MUnicode::Collate. You can cache the key for binary comparisons.

https://stackoverflow.com/a/6163129/2815355

x3al ★★★★★
()
Последнее исправление: x3al (всего исправлений: 1)
Ответ на: комментарий от no-such-file

Улавливаешь?

не улавливаю…алгоритм «все слова на букву Ё» из сортированного по алфавиту списка должен работать быстро и элементарно просто.

ДЛЯ ЛЮБОЙ БУКВЫ АЛФАВИТА

Для этого sort и существует.

Если sort не различает E/Ё то алгоритм выборки работает медленнее и зависит от «свойств буквы», от полного перебора слабо отличается

MKuznetsov ★★★★★
()
Ответ на: комментарий от MKuznetsov

алгоритм «все слова на букву Ё» из сортированного по алфавиту списка должен работать быстро и элементарно просто

Тогда он должен быть сортирован не по алфавиту, а по номеру буквы (0410 - А, 0401 - Ё, 0451 - ё). Так как иначе сравнение при поиске будет очень нетривиальное.

monk ★★★★★
()
Ответ на: комментарий от x3al

В perldoc -f sort написано что я молодец. Ты это пытаешься мне сказать? Я знаю сам :3

perl5_guy ★★★★★
()
Ответ на: комментарий от MKuznetsov

Для этого sort и существует

sort существует совсем не для этого.

алгоритм выборки

При чём тут выборка вообще? Тебе русским языком объясняют, что для целей каталогизации в «алфавитном порядке» в русском языке принято карточки c е/ё класть в один ящик. Потому что эти буквы могут переходить друг в друга в зависимости от формы слова.

no-such-file ★★★★★
()
Ответ на: комментарий от TeopeTuK

И интересно было бы увидеть словарь с отдельной группой для буквы Ё, который какой-то редактор выпустил в печать.

Ожегов, Шведова, 4е издание от 1997 года. Слова типа ёж, ёлка, ёмкость там отдельно идут под буквой ё.

zent
()
Ответ на: комментарий от TeopeTuK

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

Какой-то ультра бред только из-за того что буква просто нарисована похожим образом как другая буква.
Хотя это отдельная буква алфавита со своим номером.
Но горе-упрощателям этого не объяснить, они бы весь алфавит до трёхбуквенного мычания упростили.

Exmor_RS ★★★
()
Ответ на: комментарий от next-anonymous

Есть такие «фичи» для алфавитов на основе латиницы?

Рискну предположить, что подобное может быть в турецком с его парами Iı и İi.

static_lab ★★★★★
()
Ответ на: комментарий от no-such-file

sort существует совсем не для этого.

вечер офигительных историй ? или введение в дзен-буддизм

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

MKuznetsov ★★★★★
()
Последнее исправление: MKuznetsov (всего исправлений: 1)
Ответ на: комментарий от Silerus

Буква «ё» в юникоде (точно знаю) стоит вообще вне алфавита (смысл порядка следования тот же, что и в ASCII), поэтому её приходится при сортировке учитывать отдельным условием. Скорее всего, и для других, нестандартных, с точки зрения хз кого, букв, тоже есть условия. А в совокупности это всё и пораждает баги. Да, я убеждён что это баг.

deep-purple ★★★★★
()
Ответ на: комментарий от deep-purple

в юникоде (точно знаю)

https://unicode.org/charts/collation/chart_Cyrillic.html

Может, ты имеешь в виду UTF, а не юникод?

Да, я убеждён что это баг.

Вики (как минимум русская и англоязычная) убеждена что е и ё сортируются как одна буква в словарях с референсом на

новая редакция этих правил (опубликована в 2006 году, одобрена Орфографической комиссией РАН), § 5[44]:

x3al ★★★★★
()
Ответ на: комментарий от x3al

Может, ты имеешь в виду UTF, а не юникод?

А «U» в UTF это что?

Буква «ё» должна идти после «е», алфавит был утверждён гораздо раньше, чем вот эти все редакции. И, как комиссиям плевать на это, так и мне плевать на комиссии.

deep-purple ★★★★★
()
Ответ на: комментарий от deep-purple

Буква «ё» должна идти после «е»

Она идёт после Е в киргизской локали потому, что там специально стоит оверрайд: https://github.com/unicode-org/cldr/blob/release-30/common/collation/ky.xml#L22 . В русской его нет. Это фича.

А «U» в UTF это что?

В юникоде нет «порядка следования» с тем же смыслом, что в ASCII. Любой умеющий в юникод софт использует unicode collation algorithm, попытка сортировать по кодпойнтам и вообще зависеть от порядка букв в UTF = потенциальный баг.

Естественно, этот collation algorithm локалезависим.

алфавит был утверждён гораздо раньше, чем вот эти все редакции

Это значит что нужно писать на оригинальной кириллице 900 года выпуска?

x3al ★★★★★
()
Последнее исправление: x3al (всего исправлений: 1)
Ответ на: комментарий от x3al

Это фича

Это баг. Вспомни порядок следования букв в алфавите, которому тебя в первом классе учили. И баг не в таблице юникода, а в самом алгоритме сортировки.

нет «порядка следования» с тем же смыслом

Каким смыслом? Вот некая буква, имеет некое значение, а вот идущая далее имеет значение большее, чем у предыдущей. Кириллица там идет блоком и в правильном алфавитном порядке, кроме, как минимум «ё». И алгоритм её даже определяет, но... багует с «е».

Это значит что нужно писать на оригинальной кириллице 900 года

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

deep-purple ★★★★★
()
Ответ на: комментарий от deep-purple

Вспомни порядок следования букв в алфавите, которому тебя в первом классе учили

Извини, но я не ушёл из школы после первого класса.

Есть мнение, что ё не должна сортироваться как отдельная буква в русском. Оно достаточно популярно и в итоге ё считается чем-то вроде умлаута над е. В конце концов, в немецком Ö — буква, но в сортировке ведёт себя точно так же.

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

Не надо ставить имплементацию выше техзадания.

Сложившаяся практика: «ё» часто пишется как «е». Предложишь в словарях каждый раз сначала под «е», а потом под «ё» проверять для незнакомых слов? И для фамилий при сортировке? Это будет жутко неудобно. Поэтому сделали правило «е сортируется вместе с ё» и поэтому это заимплементили именно таким образом в юникоде. Точно так же, как и в европейских языках с диакритикой.

Если есть претензии — уговори всех носителей русского всегда писать ё для начала.

x3al ★★★★★
()
Ответ на: комментарий от deep-purple

И баг не в таблице юникода, а в самом алгоритме сортировки.

Нет. Стандарт юникода говорит, что нет сортировки без Unicode Collation Algorithm, что логично: у многих букв есть разные варианты записи даже без учёта декомпозиции на куски. Там же сказано что для сортировки обращайтесь к таблицам конкретных алфавитов, локалям плюс фоллбэк с глобальным порядком алфавитов. Получается, что ё как «е с диакритикой» вместо базовой буквы — именно в таблице кириллицы в юникоде. Только это не баг.

x3al ★★★★★
()
Ответ на: комментарий от MKuznetsov

если не для дальнейшей выборки/группировки данных из результата

У тебя питон головного мозга что-ли? Выборка/группировка делается в один проход по предикату, никакой sort тут не нужен.

no-such-file ★★★★★
()
Ответ на: комментарий от x3al

уговори всех носителей русского всегда писать ё для начала

Тут дело даже не в уговорах. Я уже тут говорил, что е/ё переходят друг в друга в разных формах одного и того же слова, или разных словах одного корня. Обычно желательно чтобы они тем не менее были вместе, а не в разных частях каталога.

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 1)

Например, в испанском языке существовала буква ll, которая шла после l. Соответственно, слова llama и lorca шли по алфавиту угадайте как.

Потом в Испании, кажется, это отменили, но в страна Нового Света решили, что испанский король им не указ, так что оставили, как было.

Может, я и вру сейчас, лень проверить, что там в локалях написано. es_ES и es_US должно быть по-разному.

anarquista ★★★★★
()
Ответ на: комментарий от no-such-file

Так себе соображение. Это не единственное чередование. А есть ещё и буквы, которые выпадают, что с ними?

anarquista ★★★★★
()
Ответ на: комментарий от static_lab

Ты меня заставил! ( :) )

user@debian:/home/user$ cat tr.txt
ilhg
ılhd
ıj
ij
frı
fri
user@debian:/home/user$ sort tr.txt
fri
frı
ij
ilhg
ıj
ılhd
user@debian:/home/user$ LC_ALL= LANG= LC_COLLATE=tr_TR.UTF-8 sort tr.txt 
fri
frı
ij
ilhg
ıj
ılhd

«А-а-а! Турецкий язык дискриминируют!!! Опять все плюшки этим русским!!! А-а-а!!!» (просьба к модераторам: отнеситесь с юмором)

Если серьёзно, то другой картины я не ожидал. Ну сложно иностранным разработчикам в русский – если носители языка сами не могут определиться…

next-anonymous
()
Ответ на: комментарий от anarquista

есть ещё и буквы, которые выпадают, что с ними

Ничего с ними. Как это влияет на е/ё? Это эмпирическое правило, не надо тут искать какой-то универсум.

no-such-file ★★★★★
()
Ответ на: комментарий от next-anonymous

Кстати глянул в их алфавит — а там ı идёт перед i, но sort делает наоборот. Не очень понятно, как на самом деле должно быть.

static_lab ★★★★★
()
Ответ на: комментарий от x3al

То бишь всем желающим сортировки с отдельной буквой ё нужно ставить киргизскую локаль. Иронично.

vbr ★★★★
()
Ответ на: комментарий от i-rinat

Если этот контекст достаточный для понимания.
Если взять «жить в мире», то непонятно, в каком.
А преступление может быть совершенным, а может быть просто совершённым.

novus ★★
()
Последнее исправление: novus (всего исправлений: 3)
Ответ на: комментарий от no-such-file

Это нужно стандарты для библиотек/архивов смотреть.

Единых стандартов нет, поэтому можно нарваться на странные вещи вроде «ё > е в начале слова, ё = е в остальных случаях».

x3al ★★★★★
()
Ответ на: комментарий от no-such-file

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

А, извини, это я тебя с белым бараном перепутал. Стиль рисовки аватарок одинаковый.

Shushundr ★★★★
()
Последнее исправление: Shushundr (всего исправлений: 2)
Ответ на: комментарий от Shushundr

А с какого перепугу должны быть какие-то особенные правила для сортировки?
Сортировка вообще не является частью языка или языковых правил.
Если сортировку называют алфавитной — она, очевидно, должна соответствовать алфавиту.
В алфавите буква ё идёт после е и перед ж.
И, как бы ни хотелось безграмотным и инагентам, буква ё — это отдельная буква, а не модификация буквы е.
Именно по этому в немецком алфавите буквы ü нет, а есть только u.
А в русском есть буквы е и ё отдельно.
Если при сортировке эти буквы учитываются как-то иначе чем две отдельные и совершенно разные буквы — значит сортировка не алфавитная и нехер её так называть.

Goury ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.