Какой смысл имеет независимая от регистра сортировка в лексикографическом порядке определенного языка? Если в русском языке принято, что строчные буквы предшествуют прописным, зачем менять этот порядок? Я еще понимаю причины появления скажем функции _stricmp в C, которая в случае английского языка является неким подобием функции strcoll, но зачем кому-то понадобилась _stricoll?
Здравствуйте, igna, Вы писали:
I>Какой смысл имеет независимая от регистра сортировка в лексикографическом порядке определенного языка? Если в русском языке принято, что строчные буквы предшествуют прописным, зачем менять этот порядок?
Совершенно непонятно, что где принято, и почему это должно влиять на библиотечные функции. Помимо case sensitivity есть еще и accent sensitivity. Вопросы применения зависят исключительно от приложения.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Sinclair, Вы писали:
S>Совершенно непонятно, что где принято, и почему это должно влиять на библиотечные функции. Помимо case sensitivity есть еще и accent sensitivity. Вопросы применения зависят исключительно от приложения.
Принято это например в словарях. Для некоторых языков существуют несколько способов сортировки, так соотвественно и locale существует для каждого из способов сортировки свой. Про accent sensitivity говорят обычно имея ввиду, что в одном языке она есть, в другом нет. Если вдруг обнаружится язык, где приняты два способа сортировки, accent sensitive и accent insensitive, значит нужны соответственно два locales, что тут непонятного?
Здравствуйте, igna, Вы писали: I>Принято это например в словарях.
Что именно "это"? I>Для некоторых языков существуют несколько способов сортировки, так соотвественно и locale существует для каждого из способов сортировки свой.
Только не locale, а collation. I>Про accent sensitivity говорят обычно имея ввиду, что в одном языке она есть, в другом нет.
Про нее обычно говорят, что в одном приложении она есть, а в другом — нет. I>Если вдруг обнаружится язык, где приняты два способа сортировки, accent sensitive и accent insensitive, значит нужны соответственно два locales, что тут непонятного?
Два collation. Locale ничего не говорит про сравнение строк.
В большинстве языков нет четких правил сравнения строк. Считать ли "ёлка" и "Елка" равными — личное дело проектировщика приложения.
Я вообще твою претензию не понимаю. Я бы понял, если бы чего-то не было, что тебе нужно. А зачем требовать, чтобы что-то убрали ?
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Sinclair, Вы писали:
S>Что именно "это"?
Что строчные буквы предшествуют прописным, тут всего-то три сосны. S>В большинстве языков нет четких правил сравнения строк. Считать ли "ёлка" и "Елка" равными — личное дело проектировщика приложения.
Не передергивай, речь не о сравнении на равенство, а о сортировке. И если в приложении "Елка" в отсортированном списке идет после "ёлка", то это не по-человечески.
Здравствуйте, igna, Вы писали:
S>>В большинстве языков нет четких правил сравнения строк. Считать ли "ёлка" и "Елка" равными — личное дело проектировщика приложения. I>Не передергивай, речь не о сравнении на равенство, а о сортировке. И если в приложении "Елка" в отсортированном списке идет после "ёлка", то это не по-человечески.
Берем "елка, ёлка,епископ", сортируем:
Стандартное сравнение: "елка, епископ, ёлка"
е и ё -- одна буква: "елка, ёлка, епископ" или "ёлка, елка, епископ" // не важно какой вариант, так как е и ё совпадают
Какой вариант "правильный"?
Правильные варианты ответа:
1) первый
2) второй
3) ни один из них //например для компарера определяющего близость слова к данному (он используется при проверке орфографии для предсказания замены неправильно написанного слова)
4) оба // не уверен, что есть такие задачи, но компарер придумать можно
Здравствуйте, igna, Вы писали:
I>Здравствуйте, Sinclair, Вы писали:
S>>Что именно "это"? I>Что строчные буквы предшествуют прописным, тут всего-то три сосны. S>>В большинстве языков нет четких правил сравнения строк. Считать ли "ёлка" и "Елка" равными — личное дело проектировщика приложения. I>Не передергивай, речь не о сравнении на равенство, а о сортировке.
Сравнение на равенство — это намного проще чем сортировка. Читать здесь(желательно все) — Unicode Collation Algorithm.
Здравствуйте, igna, Вы писали:
I>Первый.
С чего ты взял?
I>Собственно мой изначальный вопрос был о том, в каком-таком случае кого-то этот вариант может не устроить.
Вернемся к тому же самому примеру про "компарера определяющего близость слова к данному (он используется при проверке орфографии для предсказания замены неправильно написанного слова".
Ты написал "елкр", программа проверки орфографии подсветила слово, нажимаешь правой кнопкой и видишь...
Что ты видишь? Ты видишь десяток слов которые возможно ты имел ввиду.
Как составить этот десяток? Почему именно эти слова попали в этот десяток а не другие? Этот десяток чем-то лучше чем остальные 10 тыс слов в словаре. Значит нужно отсортировать словарь используя критерий "лучшести" для данного конкретного случая.
Если формализовать этот критерий, каков он будет? Слово будет "лучше" если количество изменений которые преобразуют это слово в "елкр" будет "меньше".
Как это влияет на нашу ситуацию? "елка" имеет "вес" 1, "ёлка" -- 2, "епископ" -- 6.
Отсортировать по возрастания 1, 2 и 6 не составляет труда.
P.S. Я отвечал на старое сообщение, на него и отвечу.
Здравствуйте, igna, Вы писали:
I>Какой смысл имеет независимая от регистра сортировка в лексикографическом порядке определенного языка?
Задача:
Есть список пользователей. Ники они себе заводили "как попало": Aikin, aIkIn, AIKIN, aikIN.
Ты примерно помнишь ник, но совершенно не помнишь регистр его написания.
Решение:
Сортировка без учета регистра.
Здравствуйте, Aikin, Вы писали:
A>Если формализовать этот критерий, каков он будет? Слово будет "лучше" если количество изменений которые преобразуют это слово в "елкр" будет "меньше". A>Как это влияет на нашу ситуацию? "елка" имеет "вес" 1, "ёлка" -- 2, "епископ" -- 6. A>Отсортировать по возрастания 1, 2 и 6 не составляет труда.
Здравствуйте, Юрий Жмеренецкий, Вы писали:
I>>Здравствуйте, Sinclair, Вы писали:
S>>>Что именно "это"? I>>Что строчные буквы предшествуют прописным, тут всего-то три сосны. S>>>В большинстве языков нет четких правил сравнения строк. Считать ли "ёлка" и "Елка" равными — личное дело проектировщика приложения. I>>Не передергивай, речь не о сравнении на равенство, а о сортировке.
ЮЖ>Сравнение на равенство — это намного проще чем сортировка.
Знаю, это Sinclair зачем-то равенство за уши притянул.
Здравствуйте, Aikin, Вы писали:
A>Есть список пользователей. Ники они себе заводили "как попало": Aikin, aIkIn, AIKIN, aikIN. A>Ты примерно помнишь ник, но совершенно не помнишь регистр его написания. A>Решение: A>Сортировка без учета регистра.
Здравствуйте, igna, Вы писали:
I>Какое отношение все это имеет к collation?
Не передергивай, речь не о сравнении на равенство, а о сортировке. И если в приложении "Елка" в отсортированном списке идет после "ёлка", то это не по-человечески.
1) Именно на эту цитату я отвечал
2) Если ты имел ввиду "отсортированном по алфавиту списке", то а) так бы и писал, б) для некоторых задач е и ё могут быть одной и той же буквой.
Здравствуйте, igna, Вы писали:
I>Здравствуйте, Aikin, Вы писали:
A>>Есть список пользователей. Ники они себе заводили "как попало": Aikin, aIkIn, AIKIN, aikIN. A>>Ты примерно помнишь ник, но совершенно не помнишь регистр его написания. A>>Решение: A>>Сортировка без учета регистра.
I>strcoll: aikIN, aIkIn, Aikin, AIKIN I>stricoll: Aikin, aIkIn, AIKIN, aikIN
I>И каким же образом поиск в втором списке для твоей задачи подходит лучше?
Для списка в 4 элемента сортировка не нужна вообще!
A>Не передергивай, речь не о сравнении на равенство, а о сортировке. И если в приложении "Елка" в отсортированном списке идет после "ёлка", то это не по-человечески.
A>1) Именно на эту цитату я отвечал
-Мальчик, как тебя зовут?
(молчит)
-Мальчик, ты что, тормоз?
-Меня Вася зовут...
-А где ты живешь?
-Я не тормоз...
Здравствуйте, Aikin, Вы писали:
I>>strcoll: aikIN, aIkIn, Aikin, AIKIN I>>stricoll: Aikin, aIkIn, AIKIN, aikIN
I>>И каким же образом поиск в втором списке для твоей задачи подходит лучше? A>Для списка в 4 элемента сортировка не нужна вообще!
Ну понятно, что до и после этих четырех еще немерянные тыщи, и что? Каким образом поиск в втором списке для твоей задачи подходит лучше?
Здравствуйте, igna, Вы писали:
I>Здравствуйте, Aikin, Вы писали:
I>
A>>Не передергивай, речь не о сравнении на равенство, а о сортировке. И если в приложении "Елка" в отсортированном списке идет после "ёлка", то это не по-человечески.
После чего ты спросил "В каком-таком случае этот вариант кого-то может не устроить, а вариант "елка, ёлка, епископ" устроить?".
Я привел пример.
Ты сослался на то, что имел ввиду совсем другое.
Я ответил что обсуждение идет в контексте поста Re[4]: Смысл of case insensitive collation
Здравствуйте, igna, Вы писали:
I>Здравствуйте, Aikin, Вы писали:
I>>>strcoll: aikIN, aIkIn, Aikin, AIKIN I>>>stricoll: Aikin, aIkIn, AIKIN, aikIN
I>>>И каким же образом поиск в втором списке для твоей задачи подходит лучше? A>>Для списка в 4 элемента сортировка не нужна вообще!
I>Ну понятно, что до и после этих четырех еще немерянные тыщи, и что? Каким образом поиск в втором списке для твоей задачи подходит лучше?
Ты случаем не издеваешься?
Здравствуйте, Aikin, Вы писали:
A>Что тебя не устраивает?
Твой пример имеет отношение к сортировке, но к collation — вряд ли. Все-таки согласись, странно постоянно и в каждом предложении напоминать о том, что речь идет о сортировке в смысле collation, когда collation эта появилась в названии темы с самого начала и не девается оттуда никуда.
A>P.S. Переход на личности не засчитан
Здравствуйте, igna, Вы писали:
I>Твой пример имеет отношение к сортировке, но к collation — вряд ли. Все-таки согласись, странно постоянно и в каждом предложении напоминать о том, что речь идет о сортировке в смысле collation, когда collation эта появилась в названии темы с самого начала и не девается оттуда никуда.
Я если честно, знать не знал что такое "collation" (кроме его перевода который указывает на сортировку, но не на ее вид) пока не заглянул в вики после твоего вопроса
Поэтому считал, что ты не уверен зачем нужно вообще сортировать слова не в алфавитном, а каком-то другом порядке.
По поводу равенства букв ё и Е в сообщении Синклера и фразы: "Не передергивай, речь не о сравнении на равенство, а о сортировке."
Сравнение на равенство имеет непосредственное отношение к сравнению на больше/меньше/равно (частичный порядок), так как равные элементы имеют одинаковые "веса" и идут вместе (как в примере "елка, ёлка, епископ").
По поводу изначального сообщения пример задачи (да отталкиваться нужно именно от задачи) приведен здесь
Здравствуйте, Aikin, Вы писали:
I>>strcoll: aikIN, aIkIn, Aikin, AIKIN, igna, ignA, Igna, IGNA I>>stricoll: Aikin, aIkIn, AIKIN, aikIN, igna, Igna, IGNA, ignA A>Хмм, интересно... Нужно почитать про этот strcoll. Почему именно так...
Вот, верно. У меня, пока я про strcoll не читал, тоже вопросов не возникало. Просто думал, что раз есть strcmp, _stricmp и strcoll, то почему бы не быть и _stricoll-у.
Здравствуйте, Sinclair, Вы писали:
S>Только не locale, а collation.
Согласен, просто в C и C++ collation является частью locale, но конечно точнее говорить collation.
S>Я вообще твою претензию не понимаю. Я бы понял, если бы чего-то не было, что тебе нужно. А зачем требовать, чтобы что-то убрали ?
Чтобы это что-то не использовали сами не понимая зачем, и мне не приходилось его потом отрывать и выбрасывать со скрежетом.
Здравствуйте, igna, Вы писали:
I>Какой смысл имеет независимая от регистра сортировка в лексикографическом порядке определенного языка? Если в русском языке принято, что строчные буквы предшествуют прописным, зачем менять этот порядок? Я еще понимаю причины появления скажем функции _stricmp в C, которая в случае английского языка является неким подобием функции strcoll, но зачем кому-то понадобилась _stricoll?
There has historically been some variation in the application of these rules. For instance, the prefixes Mc and M' in Irish and Scottish surnames were taken to be abbreviations for Mac, and alphabetized as if they were spelled out as Mac in full. Thus one might find in a catalog the sequence:
McKinley
Mackintosh
with McKinley preceding Mackintosh, as if it had been spelled "MacKinley". Since the advent of computer-sorted lists, this type of alphabetization is less frequently encountered, though it is still used in British phone books.
И еще пример про пробелы:
A variation in alphabetical principles applies to names consisting of two words. In some cases, names with identical first words are all alphabetized together under the first word, e.g., grouping together all names beginning with San, all those beginning with Santa, and those beginning with Santo:
San
San Cristobal
San Juan
San Teodoro
San Tomas
Santa Barbara
Santa Clara
Santa Cruz
Santo Domingo
But in another system, the names are alphabetized as if they had no spaces, e.g. as follows:
San
San Cristobal
San Juan
Santa Barbara
Santa Clara
Santa Cruz
San Teodoro
Santo Domingo
San Tomas
Вот так вот
В общем рекомендую ознакомиться со статьей в Вики.
A>with McKinley preceding Mackintosh, as if it had been spelled "MacKinley". Since the advent of computer-sorted lists, this type of alphabetization is less frequently encountered, though it is still used in British phone books.
Какое отношение это имеет к case insensitive collation?
A>В общем рекомендую ознакомиться со статьей в Вики.
Слушай, ... кхм ..., это не ты ли два дня тому назад впервые про то, как strcoll сортирует, узнал?: здесь
A>>with McKinley preceding Mackintosh, as if it had been spelled "MacKinley". Since the advent of computer-sorted lists, this type of alphabetization is less frequently encountered, though it is still used in British phone books.
I>Какое отношение это имеет к case insensitive collation?
К case insensitive collation никак, а вот к collation очень даже.
Я запостил интересный (на мой взгляд) факт про исключения в сортировке по алфавиту (в частности отвечая на твой вопрос: "И если в приложении "Елка" в отсортированном списке идет после "ёлка", то это не по-человечески").
Не хочешь -- не читай. А тем более не отвечай.
I>Слушай, ... кхм ..., это не ты ли два дня тому назад впервые про то, как strcoll сортирует, узнал?: здесь
Да это я. И ты прекрасно это знаешь. strcoll -- какая-то (одна из тысяч-миллионов) функций С++ который меня никогда не интересовал. Меня же интересуют общие знания, не привязанные ни к какой конкретной платформе.
Статья в википедии это все что мне хотелось бы знать про collation. Так что твой strcoll идут в сад.
На будущее: захочешь так же ответить -- лучше промолчи
Здравствуйте, Aikin, Вы писали:
A>Статья в википедии это все что мне хотелось бы знать про collation.
Основываясь только на почерпнутых из статьи знаниях попробуй предсказать, каким будет результат case sensitive упорядочения последовательности abx, aBy, abz, aBx, aby, aBz. А case insensitive?
A>>Статья в википедии это все что мне хотелось бы знать про collation.
I>Основываясь только на почерпнутых из статьи знаниях попробуй предсказать, каким будет результат case sensitive упорядочения последовательности abx, aBy, abz, aBx, aby, aBz. А case insensitive?
— The letters A-Z can be sorted in a different order than in English. For example, in Lithuanian, "y" is sorted between "i" and "k".
— Combinations of letters can be treated as if they were one letter. For example, in traditional Spanish "ch" is treated as a single letter, and sorted between "c" and "d".
...
— Even in the same language, different applications might require different sorting orders. For example, in German dictionaries, "öf" would come before "of". In phone books the situation is the exact opposite.