\documentclass[a4paper,14pt]{extreport}
\input{01.Title}
\input{02.Theory}

\input{03.Algorithm}

\chapter{Реализация}

Модуль вызова системы включает в себя пользовательский интерфейс. Он отвечает за ввод и представление данных.

Главный класс Source (модуль source.rb) отвечает за основную логику.

Класс Translator (translator.rb) содержит функцию перевода слов. Логика программы не зависит от языка исходного текста, так как ударения указываются вручную, но словари готовы только для английского языка.

Класс Morphology сожержит функцию, которая вызывает библиотеку phpmorphy, чтобы получить все словоформы заданного слова. Библиотека phpmorphy распространяется по лицензии LGPL и использует словари Ispell, а также пытается угадать склонение слов.

Система рассчитана на работу с латинским алфавитом\footnote{На это настроен отлов гласных.} и использует кодировку UTF-8.

Система получает на входе текстовый документ и выдаёт переведённый текстовый документ.

\subsection{Формат словарей}

Словари имеют расширение \verb/.txt/.

Переводы слов идут сразу после слов. Перед переводами ставится ровно два пробела.

Количество переводов не ограничено, но выбирается только один. Это поведение может измениться в будущем.

\begin{verbatim}
cлово
  перевод1
  перевод2
  ...
\end{verbatim}

Для перевода может использоваться онлайн-сервис переводческой памяти \linebreak \underline{http://mymemory.translated.net.} Он собирает переводы слов по Интернету (используя Википедию, Google Translate и поиск по сайтам) и объединяет их в одну базу переводов. Сервис поддерживает 69\footnote{Считал вручную, мог ошибиться. Замечу, что в списке есть даже староанглийский.} языков. Собственная реализация была отложена ввиду низкого качества и огромной трудоёмкости.

Файл console.rb запускает консольный интерфейс. Информационные сообщения и вывод текста идут в окно терминала. Ввод текста пока что не реализован.

Файл main.rb запускает графический интерфейс, используя библиотеку wx\-Ruby. Информационные сообщения выводятся в специальном текстовом поле. Ввод текста осуществляется в левом текстовом поле; вывод появляется в правом.

Ударения указываются вручную. Это необходимо, так как поэты могут переставлять ударения по своей воле, и определить автоматически его не получится. Так как автоматического проставления ударения нет, то программа зависит от языка исходного текста только в ядре перевода. Опять же, ядро перевода поддерживает 69 языков -- то есть, программа может работать с 69 языками.

Язык вывода — только русский. Морфология вынесена в отдельный класс, но добавление нового языка потребует составления словаря либо модели.


\chapter{Что можно сделать}

Задача огромна, поэтому на многое у меня не хватило времени. Вот список того, что остаётся сделать.

\begin{itemize}
 \item Словарь ударений либо усовершенствовать автоопределение.
 \item Качественное ядро перевода (словарное либо вероятностное). Я достаточно плохо себе представляю этот пункт, поэтому не буду уточнять
 \item Перебор нескольких вариантов перевода.
 \item Память перевода (translated.net не в счёт) -- чтобы не переводить одни и те же строки (слова) дважды.
 \item Переписать рифмовку так, чтобы она работала по строфам, а не по строкам.
\end{itemize}

Кстати, я бы не делал ставки на качество. Сложность одного алгоритма определения рифмы очень велика (а вызывается эта функция очень часто), а значит, программа будет работать ОЧЕНЬ долго. Заранее предопределённый ритм помогает решить, но не решает этой проблемы.

\bibliographystyle{utf8gost780u}
\bibliography{bibliography}
\end{document}