Языковая политика

Общие обсуждения => Компьютеры и интернет => Topic started by: cetsalcoatle on 25 June 2024, 22:57:12

Title: Как применять к конкретной букве в слое toUpperCase() и toLowerCase()
Post by: cetsalcoatle on 25 June 2024, 22:57:12
Вот допустим мне хочется сделать так, чтобы в поле ввода можно было вводить любую дичь, например, вОТ нЕчто ТАКое, а на выходе что бы возвращался нормальный текст, где в каждом предложении только первая буква является заглавной. Я думал вначале запихнуть текст в массив и через индексы привести рандомный текст в порядок, но потом подумал ещё, что-то какая-то дичь получается.  :what?

Title: Re: Как применять к конкретной букве в слое toUpperCase() и toLowerCase()
Post by: Bhudh on 26 June 2024, 00:59:14
К сожалению, в String.prototype нет метода вроде title(), который приводил бы строку к требуемому виду, поэтому единственное решение это
Code: (JavaScript) [Select]
'вОТ нЕчто ТАКое'.toLowerCase().split(' ').map(s => s[0].toUpperCase()+s.slice(1)).join(' ');
Можно оформить в виде отдельной функции или таки даже метода title в String.prototype, что строго не рекомендуется (по прототипам нативных объектов лазить; некоторые нынешние браузеры вообще такое зопресчают).
Title: Re: Как применять к конкретной букве в слое toUpperCase() и toLowerCase()
Post by: Bhudh on 26 June 2024, 01:24:01
На Python, надо сказать, тоже не сильно короче, там разве что метод str.capitalize помогает, который можно передавать в качестве коллбэка, но он на всю строку работает, так что приходится всё равно сплитить.
Code: (Python) [Select]
' '.join(map(str.capitalize, 'вОТ нЕчто ТАКое'.split()))
Кстати, работает с кириллицей.
Title: Re: Как применять к конкретной букве в слое toUpperCase() и toLowerCase()
Post by: Квас on 26 June 2024, 14:16:49
Quote
где в каждом предложении только первая буква является заглавной

Для естественного языка писать алгоритмы сложно.

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

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

А если нужно сильно ограничить ввод, может быть, попытаться юзать селекты? Или, скажем, превращать ввод в заглавные буквы? (Как когда вручную заполняют в квадратах заглавными буквами.)
Title: Re: Как применять к конкретной букве в слое toUpperCase() и toLowerCase()
Post by: Квас on 26 June 2024, 14:25:33
Кстати, в техническом английском дичь является нормой: OpenSSL, IoT и т. п.
Title: Re: Как применять к конкретной букве в слое toUpperCase() и toLowerCase()
Post by: Bhudh on 26 June 2024, 15:28:29
С другой стороны, если пользователь вводит дичь - может быть, для него это имеет смысл?
Адреса файлов при загрузке в puu.sh, кстати, регистрозависимы. Не знаю, как это делается, обычно URI пофиг, в каком регистре написано, что lingvopolitics.org (http://lingvopolitics.org), что LINGVoPOLITICS.oRg (http://LINGVoPOLITICS.oRg).

P. S. А вот форумному парсеру УРЛов, как выяснилось, не пофиг, каким регистром название протокола в тэге [url][/url] написано, поэтому [url]https://lingvopolitics.org[/url] и [url]hTTps://lingvopolitics.org[/url] для него означают разные вещи.
Это явный баг, который стоит поправить.