LINUX.ORG.RU

sort и буква ё

 


0

1

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

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

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

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

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

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

на каком языке?

Мне кажется, что утилита sort может быть написана на c.

sin_a ★★★★★
()

Ничем, если у тебя локаль не настроена или настроена неправильно. Покажи выхлоп

  set | grep -E '^(LC_.*|LANG)'

ABW ★★★★★
()
Ответ на: комментарий от sspphheerraa
user@debian:/home/user$ cat text 
костёр
мама
абрикос
ёжик
коричневый
пламя
ездить
user@debian:/home/user$ sort text 
абрикос
ёжик
ездить
коричневый
костёр
кость
мама
пламя
root@debian:/home/user$ set | grep -E '^(LC_.*|LANG)'
LANG=ru_RU.UTF-8
next-anonymous
()
Ответ на: комментарий от next-anonymous

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

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

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

cat t2
а
в
п
ё
ёеж
еёз
н
sort t2
а
в
ё
ёеж
еёз
н
п

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

как я понял если нет прочих условий ё и й учитывается - иначе они приравниваются к «е» и «и», - не баг, а фича, хотя для нас конечно это неправильное поведение.

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

Есть такие «фичи» для алфавитов на основе латиницы? Я сомневаюсь // просто пользователям «пофиг», иначе бы «фичу» привели в порядок

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

Ну так и чего же ты хочешь?
Сортировка задаётся LC_COLLATE, но её обычно отдельно не выставляют, а выставляют что-нибудь вроде LC_ALL=ru_RU.UTF-8, только соответствующая локаль должна быть сгенерирована.
Кстати, если у тебя есть какие-то причины не выставлять русскую локаль на всю систему, например, нежелательна русификация запросов пароля или сообщений об ошибках, можешь сделать приблизительно так:

  printf 'ы\nе\nй\nё\n' | LC_ALL= LANG= LC_COLLATE=ru_RU.UTF-8 sort
(локаль в любом случае должна существовать).

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

И это, и вот выше

Абстрактно говоря, довольно странная аргументация (я не лингвист) для случая текста, для устной речи (возможно) логично их не различать.

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

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

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

Вопрос же не в правописании, а сортировке написанного, которая основана на лексографическом порядке (так это называется?) алфавита. Порядок букв в алфавите строго задан (или уже нет?).

лингвисты и филологи

Кстати… Лингвисты в моём представлении изучают устную речь, а филологи письменную. Но почему-то, обратились к первым, а не вторым. (мысли дилетанта вслух)

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

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

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

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

Silerus ★★★★
()

Чем можно

Чем можно научить тебя писать приветствие правильно по-русски я не эту дичь?

Доброго времени суток.

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

Так в том и дело, что все равно меняется, если «ё» встречается.

Ребят, мне в целом без разницы.

Но буква есть всё ещё встречается и влияет на порядок сортировки. И как показали опыты, результаты неоднозначные.

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

С сортировкой эта идея не выглядит удачной.

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

Откуда ты сделал вывод, что меняется? И для полноты добавлю, что и и й не склеиваются никогда. Эти буквы всегда разные. Ну и для примера сортировки посмотри в любой словарь (старый добрый бумажный).

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

наш диалог - это измышления и не более

согласен.

Я так понимаю, алгоритм сделан так, что бы не надо было обращаться к словарю.

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

Про словарь… Если речь пойдёт о каких-то фамилиях, городах, буквенных кодах (хотя там-то должны бы выбросить все эти «Ё», «Й»…) всё станет печально.

next-anonymous
()
Ответ на: комментарий от TeopeTuK
user@debian:/home/user$ cat t3
е
а
в
п
её
ёе
н
ё
еёз
ёеж
user@debian:/home/user$ LC_ALL= LANG= LC_COLLATE=ru_RU.UTF-8 sort t3
а
в
е
ё
её
ёе
ёеж
еёз
н
п

На мой вкус нелогично.

е
ё

её
ёе

ёеж
еёз

Я выразил своё восприятие результата работы команды. И всё.

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

Ну вот если ты заменишь все буквы ё на е, то сортированный массив не изменится при сортировке, принятой в русском языке.

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

Кстати… Лингвисты в моём представлении изучают устную речь, а филологи письменную. Но почему-то, обратились к первым, а не вторым. (мысли дилетанта вслух)

Разные слои абстракции. Лингвисты - язык, в том числе язык произведений и его особенности (и особенности авторов в том числе), филологи - литературу, т.е. содержание произведений. Но, как всё всегда и везде - пересекаются, и калька с библейского иврита в средневековой латыни заинтересует и одних, и других.

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

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

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

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

@token_polyak Спасибо за пояснение.

@Shushundr

Ты можешь что угодно говорить, пока нет ссылки на багтрекер - это не баг

По факту текущая «ситуация» ) Лично мне не требуется её менять. Более того, обратил внимание на особенность сортировки не я. Скажу больше

Буквальную сортировку придется самому реализовать.

(абсолютно согласен)

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

буква ё обычно необязательна

Да-да, а потом не отличают совершенное от совершённого.

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

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

Твои уточнения не противоречат тому, что буква ё обычно необязательная.

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

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

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

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

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

Получим А*,Б*,В*,Г*,Д*,{Е,Ё в разнобой}+,Ж*… ; мягко говоря не самый удобный порядок для дальнейшей работы (конвейеров, если говорим про sort)

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

В русском языке не выделяют отдельную группу для буквы Ё. Кроме того, для какой именно дальнейшей работы такой порядок тебе неудобен? Для тех, которые мне приходят в голову (сортировка слов в словаре, фамилий в библиографии, слов в предметном указателе и т.п.) он как раз очень удобен.

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

У меня нет учебника, где это можно прочитать. Держи ссылку на страницу орфографического словаря на сайте института русского языка: https://orfo.ruslang.ru/abc/part/e?start=40480&end=40780 В нём применяется каноническая сортировка.

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

В нём применяется каноническая сортировка.

«Каноническая» как и в sort. Сайт - что забор на улице.
См. печатные словари, бумажные книги. И алфавит, конечно.

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

Правила грамматики русского языка уполномочено устанавливать только Министерство образования и науки Российской Федерации (постановлением правительства от 23 ноября 2006 г. N 714), а не какие-то левые рога и копыта просто потому что они застолбили понтовое название.
Иначе можно было бы открыть ООО Русский Язык и вернуть яти, но нельзя.
Хотя попытки предпринимаются регулярно и давно.
И этот топик — тому подтверждение, равно как и тому что думать головой и искать правду в кучах мусора из интернета люди разучились.

По поводу букв, в русском языке нет никаких диактрических символов.
Буквы Ё и Й — это отдельные буквы со своими правилами и применениями.
Единственное правило есть про допустимость не писать точки над буквой Ё во всех ситуациях кроме учебной литературы и имён собственных и когда возможно ошибочное разночтение.

На всякий случай, вот список словарей утверждённых правильным министерством:

  • Орфографический словарь русского языка. Букчина Б.З., Сазонова И.К., Чельцова Л.К. — М.: «АСТ-ПРЕСС», 2008. — 1288 с.
  • Грамматический словарь русского языка: Словоизменение. Зализняк А.А. — М.: «АСТ-ПРЕСС», 2008. — 794 с.
  • Словарь ударений русского языка. Резниченко И.Л. — М.: «АСТ-ПРЕСС», 2008. — 943 с.
  • Большой фразеологический словарь русского языка. Значение. Употребление. Культурологический комментарий. Телия В.Н. — М.: «АСТ-ПРЕСС», 2008. — 782 с.

Приказом Министерства образования
и науки Российской Федерации
от 8 июня 2009 г. N 195

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

А сайт в интернете и у меня есть.
И у макскома тоже есть, что не мешает ему писать ослинух.

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

Не печатные словари, а словари утверждённые уполномоченным органом.
См выше.

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

Я должен признать неправоту по части словарей. Некоторых, что я сейчас посмотрел.
Филологи дело упростили. Но это не соответствует порядку в алфавите.

Считаю, нужно быть осторожным в употреблении слова «правильный».
Правильный там, где правило.
Прецеденты, тем более с целью упрощения сути дела для малограмотных, - это неправильно, это «костыль».

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

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

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

Это другой вопрос. Я заглянул в орфографический словарь Ушакова для учащихся средней школы. Учащиеся средней школы по определению малограмотны.

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

Не следует огульно называть сетевой ресурс рогами и копытами просто потому, что он электронный. Это ресурс института русского языка имени Виноградова, который и занимается фиксацией всех изменений в языке, его словари и содержат текущие нормативы. Подробности про орфографический словарь: https://orfo.ruslang.ru/

Или у тебя есть подозрение, что кто-то посторонний опубликовал фейковую версию словаря для каких-нибудь своих низменных целей?

Ну и на всякий случай переспрошу: как в приведенных тобой словарях сортируются слова с Е и Ё?

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

А будет ли для тебя сюрпризом, что во всех орфографических словарях такая сортировка? У меня из бумажных есть старенький словарь (1992 года) под редакцией Лопатина (бывший словарь Ожегова, будущий Букчина и др.). В нем точно такой же порядок (Е и Ё объединены). Сюрприз?

TeopeTuK ★★★★★
()

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

Но иногда и испанский стыд накрывает.

token_polyak ★★★★★
()

Вообще если сортировать в порядке unicode, то ё действительно находится снаружи кириллицы. Поэтому простор для ошибок сортировки тут достаточный, ибо сортировка под нашу локаль должна содержать альтернативный порядок для алфавита.

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