russian
russian copied to clipboard
a few improvements to the "russian" gem
- a translation scheme fix (translit("схема") should give "skhema" and not "shema")
- simple detransliteration (maybe someone will need it...)
each change is accompanied with corresponding tests.
PS. The last commit removes all trailing space I found in ruby files. Unsure if you need it..
Детранслит хороший. А почему 1. считается фиксом, на основании какого правила?
Не совсем понял вопрос.
Раньше "схема", "сходить" и подобные им слова транслитерировались как "shema", "shodit", которые читаются как "шема", "шодит", что не очень удобно. С добавлением правила "сх => skh" они транслитерируются в skhema и skhodit, что читается правильно (и позволяет выполнить обратную транслитерацию).
Пускай будет не фикс, а дополнение :)
Ну, я имею в виду что транслитерация делается по определенным правилам (указанным где-то), точно так же как и дата-время делается по ГОСТу. Просто я могу вспомнить один или два патча на тему транслитерации где слова выглядели, скажем, «лучше», но неясно, почему именно этот вариант транслитерации считался правильным.
Просто какой-то ссылки на спецификацию/стандарт будет достаточно, иначе после применения транслитерация может, наоборот, не понравиться кому-то еще.
Надеюсь, объяснил и не показался при этом унылым формалистом.
Рассмотрим 2 утверждения:
- Правила транслитерации имеют дело с написанием букв. Как получившаяся строка потом читается человеком им, как правило, дела нету.
- ГОСТ Р 52535.1-2006 Приложение А Предлагает транслитерировать русскую Х как KH http://protect.gost.ru/v.aspx?control=8&baseC=-1&page=0&month=-1&year=-1&search=&RegNum=1&DocOnPageCount=15&id=120830&pageK=FEBC4724-215A-4FD6-BEA9-8F7E37C5F7E1
Однако когда в тексте везде используется kh, это не удобно читать (хотя, наверное, дело привычки). Сравните:
Teplokhod khodit khuzhe v khrenovoi bukhte. и Teplohod hodit huzhe v hrenovoi buhte.
Второй вариант гораздо легче для восприятия (или мне кажется?) Однако в таком случае возникает проблема с буквосочетанием "sh". Для разрешения оного можно воспользоваться рекомендацией ГОСТа (должен же от него быть какой-то толк?) и англоязычных товарищей (говорят, что так понятно и удобно - skhema, но buhta).
Да, такой подход несколько усложняет сам процес транслитерации (получается, что результирующая буква зависит от контекста, а это не всегда легко реализовать), и поэтому редко используется на практике. Однако Ваша базовая реализация дала очень хороший инструмент (использование регулярных выражений), что позволяет использовать контекст и добиваться более легкочитаемых результатов. В частности, можно легко сделать отображение "компьютер" -> "computer", "консул" -> "consul", "цент" -> "cent" и т.п. И обратное преобразование тоже. Для своего проекта я наверное так и сделаю... Возможно, прикручу несколько вариантов транслитерации, чтобы можно было выбрать алгоритм - описанный в ГОСТ, либо оптимизированный для восприятия человека, знакомого с английским.
Применение этой схемы однозначно не понравится тем, у кого в базе хранятся транслитерированные строки для поиска, ведь им придётся перетранслитерировать их заново. Поэтому я не в претензии, если этот (или даже все) коммиты не будут приняты в Ваш репозиторий.
Предлагаю пока отказаться от коммита с фиксом схемы - дабы не будоражить общественность. Когда сделаю поддержку нескольких схем - тогда и интегрировать в Ваш репозиторий.
В частности, можно легко сделать отображение "компьютер" -> "computer"
и при этом чтобы не получалось "комар" -> "comar" .
skhema потому что согласная перед х buhta tahta cheburahta потому что гласная перед х
renius, я не совсем понял Вашу мысль. Единственная последовательность букв, которая вызывает затруднения при чтении транслитерированного текста (при условии замены русской "х" на латинскую "h") - это "сх", потому что в транслитерированном варианте получается "sh", что воспринимается как "ш". Для обработки именно этого случая я добавил правило, благо механизм движка замены, доступный в геме, намного мощнее предполагаемого авторами ГОСТа.
@yaroslav, а можно хотя бы детранслит отдельно включить в гем?
@yaroslav есть какие-нибудь новости по этому PR?