Ремесло программиста

Объявление

форум на движке phpBB доступен для тестирования
www.strategia.space
www.strategia.space/forum/
по предложению Лиса - канал на Matrix - #remdev:matrix.org

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Ремесло программиста » Предлагаемые стандарты и рецензии на них » Предлагаю стандарт транслитерации


Предлагаю стандарт транслитерации

Сообщений 1 страница 21 из 21

1

Он обратим и позволяет превращать идентификаторы в идентификаторы. Перед тем, как его придумать, я поискал существующие стандарты и не нашёл подходящего. Он реализован в виде функции Яра:

Код:
>(russian-budden-tools:translit-reversibly 
"а б в г д е ё ж
з и й к л м н о
п р с т у ф х ц
ч ш щ ъ ы ь э ю
я
А Б В Г Д Е Ё Ж
З И Й К Л М Н О
П Р С Т У Ф Х Ц
Ч Ш Щ Ъ Ы Ь Э Ю
Я")
"a b v g d e yo zh
z i yi k l m n o
p r s t u f kh c
ch sh shh yq yy q eh yu
ya
A B V G D E YO ZH
Z I YI K L M N O
P R S T U F KH C
CH SH SHH YQ YY Q EH YU
YA"

Отредактировано budden (2017-05-21 14:40:16)

2

хотелось бы увидеть сравнительный анализ со схожими стандартами:
https://habrahabr.ru/post/265455/
https://ru.wikipedia.org/wiki/Транслите … _латиницей

Вот тут большая сравнительная таблица:
https://en.wikipedia.org/wiki/Romanizat … tion_table
http://o-ili-v.ru/wiki/Транслитерация_р … _латиницей

во всех стандартах мягкий знак хорошо не обрабатывается.

http://lingvoforum.net/index.php?topic=2498.0

веснушчатый Цжу-Чзинь Хьвъянг

Отредактировано ВежливыйЛис (2017-05-20 16:39:18)

3

Ну, хочется видеть - проведи такой анализ :)

4

budden написал(а):

проведи


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

Почему мне за предложение "создай топик" выносят строгое предупреждение (хамство и фамильярность), а у Буддена "проведи" хамством и фамильярностью не считается?

5

Я бы взял стандарт на Паспорт ИКАО Doc 9303  - 2012
Добавил бы мягкий знак и подчёркивание и прочие символы.
ь el
_ _
$ $
@ @

6

За предложение создать топик ничего не скажу, но написанное мной - это не хамство и не фамильярность. Это - просто предложение провести анализ. "Хочешь изменений - стань сам этими изменениями".

Павиа, стандарт ИКАО не взаимно-однозначен, т.е. если написать Русское слово транслитом, то из этого написания исходное Русское слово восстановить невозможно. Мой стандарт обратим.

7

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

8

написанное мной - это не хамство и не фамильярность. Это - просто предложение провести анализ. "Хочешь изменений - стань сам этими изменениями"

Я думаю иначе. Указание, что делать, это именно х. и ф.
asking politely never works unless you have the upper hand (q) Aramaki, Stand Alone Complex, Season 25, Smoke of gunpowder

9

Павиа написал(а):

А вы как проверяли обратимость не обратимость?

Хороший вопрос - на самом деле ошибка, ыо неотличимо от ё.

ВежливыйЛис написал(а):

Указание, что делать, это именно х. и ф.

Извини, если что. Надо, что ли, ё переделать в jo. Это можно протестировать, перебрав все комбинации из 3 кириллических букв. Почему именно 3? Не знаю, но кажется очевидным. Надо, что ли, сделать это. Или можно написать доказательство.

10

Поправил: оказывается "Ы" превращалось в YY, а "ы" - в y, а не в yy - просто забыл поменять в августе прошлого года, когда ja превратилось в ya.
Теперь провёл тест, любая последовательность из 3 букв превращается сама в себя при сочетании прямого и обратного преобразования.

В репозитории уже поправленная версия. Кстати, там есть и обратная функция, Вот пример:

Код:
> (translit-reversibly-back "eehskhaaeshhyoyayozhyykhkwjukkh")
"еэсхааещёяёжыхкъйукх"

Отредактировано budden (2017-05-20 23:13:50)

11

Вообще й можно писать как j, это раньше у меня j использовалось для я и нужно было его удваивать. Хммм. Поменять, что ли?

12

исправил ещё одну ошибку, код в репозитории:
https://bitbucket.org/budden/budden-too … ew-default

13

Кстати, думаю я, всё равно ъ не похож на w, и стандарт поменялся вчера. Сделать ли ъ = qy ? Во-первых, освобождается целая буква для эксейп-последовательностей, во-вторых, qy визуально похож на перевёрнутй ъ, если немного напрячь воображение. Если следовать далее в этом же направлении, то Й надо писать как YI - тогда освобождается ещё одна буква.
Лучше было бы IY, но тогда однозначность теряется, например, IYA.

Ваши мнения?

14

Похоже, нельзя сделать ъ = qy, неоднозначность qya = ья = ъа. Можно сделать yq, но это уже непохоже на твёрдый знак. Или qh - это хоть чем-то похоже, но h скорее ассоциируется со смягчением, чем с отвердением. Ваши советы?

15

Что-бы не мучится надо составит граф. Из двух множеств и связей с ними. С домашними делами закончу сделаю.

16

Не нужен граф. Во-первых, тест проходит, во-вторых, понятно, почему не может быть дубликатов:

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

YO YI YQ YY YU YA = Ё Й Ъ Ы Ю Я

Коль скоро букв всегда две, видя Y мы просто читаем ещё одну букву и ищем данную двухбуквенную последовательность в этой табличке. То, что идёт за Y, уникально идентифицирует кириллическую буквы, преобразование в этом месте однозначно.

Буква H тоже никогда не используется в одиночку. При использовании в паре она всегда идёт после другой буквы:

ZH KH CH SH SHH = Ж Х Ч Ш Щ

Коль скоро эти последовательности уникальны, здесь тоже нет проблемы неоднозначности. Читается так: после любой буквы смотрим, не идёт ли за ней H. Если идёт, читаем все H и далее полученную 2-3 буквенную последовательность ищем в табличке. Табличка однозначна.

Т.е. любая последовательность букв или превратится обратно в кириллицу, или будет ошибка расшифровки.

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

Вопрос лишь во вкусовщине - закодировать ли твёрдый знак как YQ или как QH. Оба варианта плохи, но третьего я пока не вижу.

Поправил головной пост пока что для YQ (в варианте yq всё же есть отдалённое сходоство с ъ - путём некоторой комбинации переворотов и отражений можно сделать что-то, визуально напоминающее ъ)

Отредактировано budden (2017-05-21 21:00:01)

17

То что не вызывает сомнения
А Б В Г                          A B _ G
Д Е Ё Ж                        D _ _ _
З И Й К                         Z  _ _ K
Л М Н О                      L M N O
П Р С Т                         P R S  T
У Ф Х Ц                        _ F  _  C   
Ч Ш Щ Ъ                     _ _ _ _
Ы Ь Э Ю                      _ _ _  _
Я                                    _

16 букв есть осталось 17

«Й» - известна как «и» краткая. Поэтому её стоит обозначать одной буквой I
«И» соответственно E
В - W  собственно так как у нас она твёрдая
Ы -Y
Ю - U
Ж - j

У - UO
Е -  YO
Ё -  JO
Х - HQ
Ч -CH
Ш - SH
Щ -SHE

Э - AV
Я - IA

Ь и Ъ - надо отдельно подумать
V - заменяем мягкий знак
Q - на твёрдый знак - все равно он встречается очень редко. так что ка исключение пойдёт.
http://wordhelp.ru/contains/ъ

Граф пока не строил. Распознаю книги, что-бы получить все возможные слова.Затем выделю биграмы и далее буду решать задача о назначении. 
А далее математика известная.
https://habrahabr.ru/company/wunderfund/blog/318454/
https://habrahabr.ru/company/wunderfund/blog/326750/

Отредактировано Павиа (2017-05-22 00:09:07)

18

Не нужны все слова. Цель моего стандарта - это достижение обратимости. Обратимость в моём стандарте достигается не только для всех существующих слов, но и для всех мыслимых, напимер, "абырвалг" или "ниичаво". Защита от ошибок не предусмотрена - очевидно, что защититься даже от одной ошибки в кодировках подобного вида нельзя. Речь идёт лишь о достижении обратимости в рамках обычных идентификаторов, т.е. чтобы по идентификатору, записанному транслитом, можно было точно восстановить соответствующий идентификатор
в кириллице. Это нужно для того, что например, в старых версиях Дельфи нельзя задавать идентификаторы в кириллице, а некоторые базы данных (FIrebird) ограничиват длину идентификатора и из-за кодировки реально применять идентификаторы в кириллице очень неудобно. Или, скажем, SMS в кириллице чуть ли не вдвое длиннее получается из-за кодировки.

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

И кроме того, у вас уже неоднозначности: SHE = ШИ = Щ, UO = У = ЮО

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

Отредактировано budden (2017-05-22 12:44:23)

19

Вне контекста определённого языка транслитерация всегда может дать пересечение с управляющими цепочками знаков.
Если речь идёт о совместимости при вливании кириллицы в латиницу, то проще всего строго два символа латиницы из ASCII на 1 знак кириллицы. Это сделает безопасным использование других знаков ASCII.
Для идентификаторов обязательно наличие надёжной приставки и при переливании обязательна проверка на то, что никакие другие цепочки с ней не совпадут (иначе теряется обратимость).

20

Смешанные идентификаторы - это отдельная песня.

У себя я выкручиваюсь тем, что при смене языка ставлю два тире между словами, а не одно, например, working--ящик--for-nails. Но это уже автоматически не распознаётся. Можно просто постараться без этого обойтись. Я ставил перед собой более простую задачу - есть чисто кириллический идентификатор и нужно его выразить там, где кириллицы нет. Две буквы на Русское слово - это слишком неудобно.

Если нужен автоматический стандарт для двухъязычных слов - для этого у меня остаются сводобными W и J - их можно задействовать для вставки в слово сигналов переключения языка. Например, это может выглядеть так:

Код:
working--ящик--for-nails => (вставляем знаки переключения языка we и wr и затеняем w, превращая его в ww) => 

wewworking--wrящик--wefor-nails => (транслитерация) => "wewworking--wryashhik--wefor-nails"

21

А, понял, речь не про это, а про for - тогда можно использовать префиксы, исключающие пересечение с ключевыми словами. В лиспе вообще-то нет ключевых слов, поэтому и проблемы такой нет. Хотя если мы говорим про Дельфи и даже про Яр, то эта проблема может возникнуть.

Отредактировано budden (2017-05-22 18:14:07)


Вы здесь » Ремесло программиста » Предлагаемые стандарты и рецензии на них » Предлагаю стандарт транслитерации