BC/NW 2016 № 2 (29):11.2
РАЗРАБОТКА МОДУЛЯ ПРОГРАММЫ «ТРАНСЛИТОР»
Солдаткин А.П.
Необходимо реализовать модуль программы на языке Object-Pascal, осуществляющий транслит вводимого текста, с русского языка в фонетику английского языка. Например, имеется некая фраза на русском языке, звучащая по правилам фонетики русского языка определенным образом, программа должна подать на выход текст в фонетике конечного, английского в заданном случае, языка, при чтении которого, носителем конечного, английского, языка должна получиться фраза, близкая по звучанию, к оригинальной русской фразе. При разработке программного модуля использовать язык Object-Pascal.
Например, если мы подали фразу: «Приветствую, тебя, читатель!», то в ответ мы должны увидеть: «Privyetstvuyu, tyebya, chitatyel'!».
Разработка должна выполнять процесс транслитерации ntrcnf с русского на английский в соответствии с правилами, данной операции. Алгоритм обработки необходимо осуществлять в процедуре или функции, таким образом, чтобы при необходимости было возможно быстро изменить фрагмент алгоритма в связи с появлением изменений в правилах (необходимость соответствия транслитерации тому или иному стандарту).
Результатом проектирования должна стать программа, выполняющая транслитерацию русских звуков на фонетический алфавит английского языка. В качестве правил транслитерации русских слов на английский, можно воспользоваться таблицей соответствия звучания букв русского и английского языка, используемые в стандарте ГОСТ 16876-71[3].
Дизайн интерфейса программы не требует множества объектов, необходимы только два поля для текста, кнопка исполнения транлитерации и подписи. С точки зрения исполнения алгоритма, задача проста, поскольку в правилах транскрибирования с русского на английский все соответствия четкие и одновариантные.
Поскольку данный курсовой проект является частью выпускной квалификационной работы, то необходимо предусмотреть возможность модернизации для возможности использования алгоритма исполнения транслитерации для транслитерации с русского на английский, немецкий и другие языки.
В современном мире, подавляющее большинство людей прекрасно говорят, на как правило, одном иностранном языке. Меньшая часть аудитории говорят лишь на родном языке. Часто путешествуя по миру можно столкнуться с проблемой не знания местными жителями одного универсального языка(английского), либо не знания путешествующими любого иностранного языка и трудностями с произношение каких либо фраз. Переводчиков на современных смартфонах огромное множество, но большинство из них либо не позволяют увидеть транскрипцию фразы, либо показывают ее лишь в языковой форме языка перевода, а в родном языке путешественника не способны продемонстрировать. Конечно таких случаев не очень много, но, тем не менее, они есть.
Также подобные алгоритмы смогут помочь людям, имеющим проблемы с произношением звуков, так как они смогут научиться произносить звуки иностранного языка на основе известного им языка, что немного проще, чем изучение фонетики звуков иностранного языка.
В качестве алгоритма для решения данной задачи проще всего использовать подход с циклическим перебором символов в тексте (рисунок 1). Транслитерация с русского языка во многом является, наверное, самой простой задачей, по крайней мере, на английский язык.
Рисунок 1. Алгоритм транслитерации
Поскольку транслитерация с русского на английский язык определена во множестве документов и фонетика английского языка дружественна к фонетике русского, то процесс полностью линеен и главная особенность этого алгоритма это йотированные гласные и шипящие звуки, которые просто требуют написания вместо одной русской буквы несколько(пару) букв английского языка (таблица 1).
В ходе проработки возможности использования алгоритма для транслитерации с русского на, например, немецкий, можно сделать вывод, что данный алгоритм подходит также и для обработки различных случаев для каждой буквы, путем помещения в операторе, также функций выбора ветви. В данном случае при транслитерации на немецкий для ряда букв возможны различные написания (таблица 2). Для решения этой ситуации, достаточно добавить в ветви соответствующих букв условия «если».
Таблица 1
Буква |
Транслит |
Буква |
Транслит |
Буква |
Транслит |
А |
A |
Л |
L |
Ч |
Ch |
Б |
B |
М |
M |
Ш |
Sh |
В |
V |
Н |
N |
Щ |
Sch |
Г |
G |
О |
O |
Ъ |
“ |
Д |
D |
П |
P |
Ы |
Y |
Е |
Ye |
Р |
R |
Ь |
‘ |
Ё |
Yo |
С |
S |
Э |
E |
Ж |
Zh |
Т |
T |
Ю |
Yu |
З |
Z |
У |
U |
Я |
Ya |
И |
I |
Ф |
F |
|
|
Й |
Y |
Х |
Kh |
|
|
К |
K |
Ц |
Ts |
|
|
Таблица 2
Буква |
Транслит |
Буква |
Транслит |
Буква |
Транслит |
А |
A |
Л |
L |
Ч |
Tsch |
Б |
B |
М |
M |
Ш |
Sch |
В |
W |
Н |
N |
Щ |
Schtsch |
Г |
g; w (в окончании -ого/-его) |
О |
O |
Ъ |
(опускается); j (перед «е») |
Д |
D |
П |
P |
Ы |
Y |
Е |
e; je (в начале слов и после гласных) |
Р |
R |
Ь |
' (или опускается); j (перед «е» и «и») |
Ё |
jo; o (после шипящих) |
С |
s, ss (между гласными) |
Э |
E |
Ж |
Sh |
Т |
T |
Ю |
Yu |
З |
S |
У |
U |
Я |
Ya |
И |
I |
Ф |
F |
|
|
Й |
i (после гласных); j (в начале слогов); (в окончаниях -ий/-ый опускается) |
Х |
Ch |
|
|
К |
k; («кс» = x) |
Ц |
Z |
|
|
В программной реализации стоит начать с интерфейса, так как он в принципе прост в реализации. Программа должна позволять ввести текст и показать результат транслитерации. Но поскольку данный курсовой проект, является частью ВКР, необходимо помимо выполнения ряда требований описанных выше, обеспечить возможность использовать интерфейс без изменений в дальнейшей работе. То есть необходимо обеспечить возможность выбора конечного алфавита (языка) для транслитерации, а также выбора локализации подсказок в программе. Объекты перечислены в таблице 3, примерное изображение интерфейса программы на рисунке 2.
Таблица 3
Объект |
Особые параметры |
Назначение |
Button1 |
|
Кнопка по нажатию, которой выполняется транслитерация текста из Memo1(русский язык) в Memo2(английский или немецкий язык) |
Memo1 |
--- |
Предназначен для ввода текста на русском языке |
Memo2 |
ReadOnly |
Предназначен для вывода транслитерации на английском или немецком, текст можно только скопировать |
Label1-5 |
--- |
Различные подписи, в зависимости от выбора локализации: на русском, немецком или английском |
ComboBox1 |
csDropDownlist |
Отвечает за выбор конечного алфавита транслитерации, в данном случае английский или немецкий |
ComboBox2 |
csDropDownlist |
Отвечает за выбор локализации программы, и по изменению осуществляет изменение Label1-5 |
Перейдем к реализации алгоритмов. Поскольку используется язык Object-Pascal, то работа в программе строится по событиям, которым соответствуют процедуры.
Описанный выше алгоритм транслитерации, необходимо описать в отдельной функции для обеспечения понятности кода и простоты многократных вызовов данного алгоритма. В конкретной программе алгоритм вызывается в качестве реакции на нажатие кнопки «Транслитерация»(рисунок 2).
Рисунок 2. Алгоритм работы программы
|
Рисунок 3. Основное окно программы
|
Используемый объект Memo позволяет передавать в программу текст, с переменной длиной строк и переменным числом строк. Таким образом достаточно просто скопировать нужный текст и вставить его в поле, без изменений. В программе обработка содержимого осуществляется перебором строк в Memo, так как возможно узнать точно, сколько строк введено в Memo и прочесть содержимое построчно, используя для этого цикл. В данном цикле также используем разветвление для выбора одного из двух алгоритмов (английский или немецкий). Далее в функцию передается исходная строка и записывается результат функции. Графическое оформления программы представленной на рисунке 3.
В случае транслитерации с русского на английский, вся реализация заключается в операторе выбора case для цикла перебора символов строки. В качестве операторов применяется присваивание значения соответствующего таблице, либо повтор любого символа из исходной строки, если не найдено соответствие в таблице.
В случае транслитерации с русского на английский, вся реализация заключается в операторе выбора case для цикла перебора символов строки. В качестве операторов применяется присваивание значения соответствующего таблице, либо повтор любого символа из исходной строки, если не найдено соответствие в таблице.
В случае транслитерации с русского на английский, помимо основного оператора выбора case, в ветвях, отвечающих за буквы, имеющие разные написания в зависимости от положения в слове или среди букв используется оператор ветвления if. C помощью дополнительного ветвления внутри основного оператора, достигается достаточная для данного случая гибкость алгоритма, позволяющая обработать данные простые правила. В случае более сложных правил, например, транслитерации с английского на русский, будет логичным выделить обработку каждой буквы в отдельную функцию в целях обеспечения понятности кода, упрощения восприятия алгоритма.
В качестве исходных тестов для алгоритма транслитерации с русского на английский применим фрагмент текста из статьи интернет:
«Трансли́т (название произведено сокращением слова «транслитерация») — передача текста с помощью чужого алфавита. В отличие от транслитерации, при транслите могут применяться цифры и иные доступные на клавиатуре компьютера знаки, то есть, это фактически неформальная транслитерация. В русском транслите используется в основном латинский алфавит, то есть русский транслит можно считать неформальной романизацией, в то время, как, например, в армянском транслите может использоваться как латинский алфавит, так и Кириллица[1].» - подано на вход.
«Translit (nazvaniye proizvyedyeno sokrashchyeniyem slova «translityeratsiya») —
pyeryedacha tyeksta s pomoshch'yu chuzhogo alfavita. V otlichiye ot translityeratsii,
pri translitye mogut primyenyat'sya tsifry i inyye dostupnyye na klaviaturye
komp'yutyera znaki, to yest', eto faktichyeski nyeformal'naya translityeratsiya.
V russkom translitye ispol'zuyetsya v osnovnom latinskiy alfavit, to yest'
russkiy translit mozhno schitat' nyeformal'noy romanizatsiyey, v to vryemya,
kak, naprimyer, v armyanskom translitye mozhyet ispol'zovat'sya kak
latinskiy alfavit, tak i Kirillitsa[1].» - программа успешно выполнила транслитерацию на английский.
В качестве исходных тестов для алгоритма транслитерации с русского на немецкий применим фрагмент текста из статьи интернет:
«Трансли́т (название произведено сокращением слова «транслитерация») — передача текста с помощью чужого алфавита. В отличие от транслитерации, при транслите могут применяться цифры и иные доступные на клавиатуре компьютера знаки, то есть, это фактически неформальная транслитерация. В русском транслите используется в основном латинский алфавит, то есть русский транслит можно считать неформальной романизацией, в то время, как, например, в армянском транслите может использоваться как латинский алфавит, так и Кириллица[1].» - подано на вход.
«Translit (naswanije proiswedeno sokraschtschenijem slowa «transliterazija») —
peredatscha texta s pomoschtsch'ju tschushowo alfawita. W otlitschije ot transliterazii,
pri translite mogut primenjat'sja zifry i inyje dostupnyje na klawiature
komp'jutera snaki, to jest', eto faktitscheski neformal'naja transliterazija.
W russkom translite ispol'sujetsja w osnownom latinskii alfawit, to jest'
russkii translit moshno stschitat' neformal'noi romanisazijei, w to wremja,
kak, naprimer, w armjanskom translite moshet ispol'sowat'sja kak
latinskii alfawit, tak i Kirilliza[1].»
Программа успешно выполнила транслитерацию на немецкий.
1. «Фонетика современного русского литературного языка» - Р.И.Аванесов, Издательство Московского Университета, 1956 г.
2. «Фонетика английского языка» - С.Хромов, Университетская книга, 2012 г.
3. ГОСТ 16876-71
4. Особенности английского произношения, http://languagereal.ru/page/osobennosti-angliyskogo-proiznosheniya
5. Фонетика английского языка, http://www.native-english.ru/pronounce
6. Панов М.В. Русская фонетика. – Просвещение, М.: 19
7. Транслит – Материал из Википедии — свободной энциклопедии, первый абзац.