Смекни!
smekni.com

Обучающая программа-переводчик текста (стр. 1 из 2)

Министерство образования и науки Российской Федерации
Южно-Уральский государственный университет
Кафедра Информатики

Пояснительная записка по курсовому проекту
по курсу «Высокоуровневые методы информатики и программирования»

«Обучающая программа – переводчик текста» ОО ПЗ

Руководитель
доц. каф. информатики Конова Е.А.
« »________2007г.

Автор проекта
студент группы
ЭиУ-264
Лаврова Екатерина
«10» декабря 2007г.

Проект защищён с оценкой
__________
« »________2007г.

Челябинск
2007


Оглавление

1 Введение......................................................................................................... 1

2 Постановка задачи......................................................................................... 2

3 Структура программы................................................................................... 3

4 Спецификация................................................................................................. 4

5 Структурная схема отношений в спецификации классов............................. 6

6 Реализация...................................................................................................... 7

7 Алгоритмы реализации................................................................................. 8

8 Сценарий работы проекта........................................................................... 10

9 Реализация сценария.................................................................................... 11

10 Документация проекта............................................................................... 17

11 Заключение................................................................................................. 18

12 Источники информации............................................................................. 19

Оглавление...................................................................................................... 20

1 Введение

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

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


2 Постановка задачи

Темой проекта является составление программы – переводчика текста (по типу Lingvo).

Так как данная задача относится к разделу обучающих программ, то, кроме собственно переводчика, в программу была включена дополнительная функция – Tutor («Учитель»), позволяющая проверить словарный запас пользователя и по возможности его расширить.

Для реализации поставленной задачи потребовалось обеспечить следующую функциональность:

· Возможность перевода отдельных слов;

· Возможность перевода предложений (текстов);

· Исключение из перевода не алфавитных знаков (знаков пунктуации, чисел и пр.);

· Возможность открытия файла для перевода;

· Возможность сохранения полученного перевода;

· Возможность распечатки перевода;

· Система Tutor – «Учитель» – для проверки знаний пользователя;

· Наличие необходимой справочной системы;

· Обеспечить приложение стандартным интерфейсом: основным меню, горячими клавишами, панелями инструментов.


3 Структура программы

Для реализации задачи были сформированы следующие классы:

· classTWord, предназначенный для хранения пар слово-перевод;

· classTWords, класс-контейнер, данным которого является вектор классов TWord, также содержащий методы работы с вектором.

Эти классы описаны в файле Lexicon.h, реализация – в файле Lexicon.cpp.

Файлыданных – En-Ru.csv и Ru-En.csv. Файлыпроекта – EasyTranslator.cpp, EasyTranslator.h, EasyTranslator.bpr (установкиопцийпроекта), EasyTranslator.res (ресурсыпроекта), EasyTranslator.tds (файлтаблицысимволов – дляотладки).

Интерфейс программы представлен формами:

· TBody, представляющая собой тело переводчика (реализовано меню с горячими клавишами, панели инструментов…), заголовочный файл – Bodys.h, реализация – Bodys.cpp, файл формы – Bodys.dfm; Bodys.ddp;

· TETHlp – помощь и TTAbout – о программе. Соответственно файлы: Hlp.cpp, Hlp.h, Hlp.ddp, Hlp.dfm (файл формы); ETAbout.cpp, ETAbout.h, ETAbout.ddp, ETAbout.dfm;

· TTutor, для проверки и пополнения словарного запаса пользователя. Файлы: ETutor.cpp, ETutor.h, ETutor .ddp, ETutor.dfm;

Файл справки – Help.rtf.

Исполняемыйфайлприложения – EasyTranslator.exe.


4 Спецификация

Разработаны объекты TWord и TWords:

· classTWord – класс, который хранит только данные «слово-перевод».

Параметрыкласса:

AnsiString One, Two;

One содержит «вводимое» слово, Two – возможные варианты перевода слова One. Для максимальной функциональности используется тип AnsiString – динамическая строка с нулевым символом в конце.

· classTWords – класс-контейнер, используется для хранения в оперативной памяти содержимого файлов данных (слов с переводами), что значительно ускоряет работу программы.

Параметры класса: vector <TWord> Words;

//контейнер типа vector для хранения классов TWord;

Прототипы методов класса:voidClear();

//Очищает вектор для адекватной работы в случае изменения направления перевода, для этого используется стандартная функция-член класса vector – pop_back();

voidOpenFile(char *Name);

//Открывает файл данных слов для заполнения классов TWord, и, соответственно, вектора TWords. Для адекватной работы вектор «обнуляется» с помощью Clear(). В функцию передаётся указатель на имя открываемого файла. Функция использует поток ifstream для доступа к файлу данных, считывая в вектор с помощью push_back() попарно слова-значения (соответственно классам TWord). TWord GetWord(int Index);

//Определяется оператор индекса [] для обеспечения доступа к элементам вектора путём обычной индексации, соответственно, передаваемое значение – целое число, возвращаемое – класс TWord. unsigned int GetSize();

/Определяется текущий размер вектора. Возвращает беззнаковое целое.AnsiString Translate(AnsiString W);

//Обеспечивает перевод одного слова (или устойчивого словосочетания). В функцию передаётся строка (то есть слово для перевода), в векторе ищется совпадение по данному Oneобъектов TWord, и, если находится, функция возвращает данное Twoтого элемента, в котором найдено совпадение. AnsiString TranslateString(AnsiString Str);

//Обеспечивает пословный перевод введённой фразы с помощью функции Translate(AnsiString W). В функцию передаётся строка (слово или текст), которая посимвольно анализируется и, в зависимости от символа, заносится в строковую переменную. Если в переданной строке встречаются определённые символы (например, знак возврата каретки или пробел), значит, слово закончилось, и его можно перевести. Перевод слов заносится в переменную-строку, которая при окончании работы возвращается функцией.


5 Структурная схема отношений в спецификации классов

Так как основными данными класса TWord являются строковые переменные One и Two, а вектор TWords состоит из объектов TWord (и методы вектора работают как с самим вектором, так и с данными-классами), то, в общем, схему отношений между классами можно описать так:



6 Реализация

Так как особенностью поставленной задачи было обеспечение пословного перевода, то в качестве основного объекта, предназначенного для хранения данных, был выбран контейнер – вектор. Преимуществом использования вектора стало то, что в этом классе поддерживаются динамические массивы, а это значит, что размер контейнера может изменяться по мере необходимости, и одновременно с этим доступ к его элементам осуществляется с помощью обычной индексной нотации (оператора []).

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


7 Алгоритмы реализации

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

Перевод одного слова (или устойчивого словосочетания) осуществляется с помощью довольно простого метода Translate:

AnsiString TWords::Translate(AnsiString W)

{ for (unsigned int r=0; r<GetSize();++r) //пробегаемповекторуслов

if (GetWord(r).One==W) //если первое слово "подкласса"

//_вектора равно искомому

returnGetWord(r).Two; //вернуть второе слово "подкласса"

return ""; //иначе возвращается пустая строка}

Функция Translate непосредственно вызывается только из функции TranslateString, ответственной за пословный перевод текста.

AnsiString TWords::TranslateString(AnsiString Str) //передаётсявведённыйтекст

{ Str=Str+'&bsol;n'; //добавление перевода строки

AnsiString W; //отдельное слово из введённого текста

AnsiString outp; //строка-перевод

for(int i=1;i<=Str.Length();i++) //пробегаем по длине введённого текста

{ f(Str[i]!=' ' && Str[i]!='&bsol;r' && Str[i]!='&bsol;n' && ((Str[i] >= 'a' && Str[i]<='z') || (Str[i] >= 'а' && Str[i]<='я')))

W=W+Str[i]; //посимвольно формируем слово (исключая знаки-небуквы)

else //если символ-пробел или строка закончилась

if(W!="") //если слово непустое

{

//в строку перевода пишем исходное слово + перевод + возврат каретки

outp=outp+W.UpperCase() + " : "+Translate(W)+"&bsol;n";

W=""; //обнуляем переводимое слово

}

}

return outp;}

Работа Tutor, описанная в файле реализации формы TTutor, построена практически аналогично работе основного переводчика – на основании функции TranslateString:

void __fastcall TTutor::CheckClick(TObject *Sender)

{

AnsiString W = TwoW->Text.LowerCase();

if(Wordz.Translate(W)==OneW->Text.LowerCase())

//если перевод введённого слова совпадает с данным пользователю описанием