Документация реализации
Содержание
Основные алгоритмы
Структура кода
Трассируемость требований в проектных решениях
Основные алгоритмы
- Алгоритм поиска соответствия параметров и кодов в БД
Входные данные: массив P[1..20] целых чисел (коды грамматических признаков в БД).
Выходные данные: массив S[1..2][1..20] строк (грамматические признаки и соответствующие значения)
Ход алгоритма:
А) Инициализация: ParID=0, i=0. (Коды признака и значения)
Б) Увеличиваем i на 1 и помещаем P[i] в ItemID. (Записываем текущее значение)
В) Запрашиваем (select * from menu_params where id=$ParID) записи, соответствующие текущему признаку ParID.
Г) Записываем поля Item01,…,Item30 выданной запросом записи в целочисленный массив items[1..30].
Е) Записываем поле Param_Caption (название параметра) выданной запросом записи в S[1][i].
Ж) Запросом (select * from menu_items where id=$ItemID) читаем признаки, соответствующие ItemID (В записи содержатся
коды грам. признаков, которые определены только для данного значения текущего признака).
З) Записываем поля Param01,…,Param30 выданной запросом записи в целочисленный массив params[1..30].
И) Записываем поле ParamCount выданной запросом записи в ParCount.
К) Записываем поле Item_Caption (название значения параметра) в S[2][i].
Л) Цикл k:=1 to ParCount (по количеству параметров):
Л1) В ParID помещаем params[k]
Л2) goto Б)
- Алгоритм вывода слов по заданным параметрам.
Входные данные: массив P[1..20] целых чисел (коды грамматических признаков)
Выходные данные: вывод на экран слова и его грам. признаков в приведенном ниже формате.
Ход алгоритма:
А) с помощью запроса (select distinct Word, Param01,… Param20 from Morfology where Param01=P[1] and Param02=P[2] …and
Param20=P[20]) выбираем из таблицы Morfology записи, соответствующие заданным параметрам.
Б) Цикл по записям запроса:
Б1) Записываем поля Param01,…,Param20 текущей записи в целочисленный массив p[1..20]
Б1) С помощью алгоритма №1 из массива P[1..20] получаем массив S[1..2][1..20] строк.
Б2) Вывод на экран данных в следующем формате:
“Word
S[1][1]: S[2][1]
…
S[1][20]: S[2][20] ”
Б3) Переходим на следующую запись запроса
- Алгоритм точного поиска слов.
Входные данные: строка Word (слово в кодировке Unicode).
Выходные данные: ввывод на экран слова и его грамматических признаков.
Ход алгоритма:
А) Каждый символ Word заменяем его Hex-кодом (4 шестнадцатиричных числа). Полученную строку запишем в W. (Этим самым мы
преобразуем слово к виду, в котором оно содержится в БД).
Б) С помощью запроса (select distinct Word, Param_01,… Param_20 from Morfology where Word=W) выбираем из таблицы
Morfology записи, соответствующие входным данным.
В) Цикл по записям запроса:
В1) Записываем поля Param01,…,Param20 в массив P[1..20] целых чисел.
В2) С помощью алгоритма №1 из массива P[1..20] получаем массив S[1..2][1..20] строк.
В3) Вывод на экран данных в следующем формате:
“Word
S[1][1]: S[2][1]
…
S[1][20]: S[2][20] ”
В4) Переход на следующую запись запроса
- Алгоритм поиска контекста.
Входные данные: структура Words (см. №2 структур данных программирования)
Выходные данные: массив строк (предложения, содержащие данное слово)
Ход алгоритма:
А) С помощью запроса (select * from Morfology where Word=Words.W and Param01= Words.P[1] and Param02= Words.P[2] and …
Param20= Words.P[20]) выбираем из таблицы слов записи, удовлетворяющие входным данным.
В) Цикл по записям запроса:
В1) Для каждого найденного слова считываем его координаты в тексте (поля Text_ID, Chapter_Index, Paragraph_Index,
Sentence_Index из таблицы Morfology) в запись Wor.Text, Wor. Chap, Wor.Par, Wor.Sent.
В2) С помощью запроса (select Word from Morfology where Text_ID= Wor.Text and Chapter_Index =Wor.Chap and
Paragraph_Index =Wor.Par and Sentence_Index =Wor.Sent order by Word_Index) выбираем слова из текущего
предложения
В3) Цикл по записям, выданным во 2-ом запросе:
В3.1) вывод на экран: “Word “
В3.2) переход на следующую запись во 2-ом запросе
В4) переход на следующую запись в 1-ом запросе
- Алгоритм формирования запросов по параметрам.
Входные данные: массив структур Pars(см. структуры данных №3)
Выходные данные: вывод на экран слова и его грам. параметров
Ход алгоритма:
А) Инициализация: ParID=0, ParFind=0, TekPar=0.
Б) Запросом (select * from menu_params where id=$ParID) читаем значения, соответствующие ParID.
В) TekPar++;
В) Записываем поля Item01,…,Item30 запроса в массив items.
Г) Если Param_Caption = Pars[i].Parname (для какого-то i)
Г1) ParFind ++ (увеличиваем счетчик пройденных параметров)
Г2) Цикл по числу выбранных значений для найденного параметра
Г2.1) Добавляем строку запросу query «Param_ TekPar =$Item and», где i-номер ветви, $item – номер
выбранного значения (из checkbox’а).
Д) Запросом (select * from menu_items) читаем параметры, соответствующие ItemID.
Е) Цикл по записям запроса
Е1) Записываем поля Param01,…,Param30 запроса в массив params.
Е2) Записываем поле ParamCount запроса в ParCount.
Е4) Цикл j:=1 to ParCount:
Е4.1) Если j=t(конец ветви) и ParFind=Pars.ParCount (все параметры найдены) выполняем запрос query.
Е4.1) Считываем поля вернувшейся записи в массив p[1..20]
Е4.1) Запускаем алгоритм №2 на основе массива p[1..20]
Е4.1) В ParID помещаем params[t]
Е4.2) goto Б)
- Алгоритм поиска контекста.
Входные данные: Слово, представленное в строковой переменной ($sword) и строка, характеризующая его грамматические
признаки ($param), номер текущего блока (по умолчанию ноль).
Выходные данные: Предложение, содержащее искомое слово и ссылка на текст, содержащий данное предложение.
Ход алгоритма:
А) Преобразование переданного слова к виду, представленному в базе данных
В) Подключение к базе данных и получение при помощи запроса (select * from MORFOLOGY where (WORD like '$my') and
($param)) номеров текстов, глав, параграфов и предложений, содержащих слово с представленными параметрами.
С) Вывод предложений текущего блока, получение названия текста, в котором содержится данное предложение, формирование
ссылки на данный текст
D) Формирование ссылок на другие блоки
- Алгоритм представления контекста
Входные данные: Номер текста.
Выходные данные: Текст.
Ход алгоритма:
А) Подключение к базе данных и получение при помощи запроса (select WORD, CHAPTER_INDEX, PARAGRAPH_INDEX,
SENTENCE_INDEX from MORFOLOGY where TEXT_ID=$text) информации о слове (само слово, номер главы, параграфа,
предложения)
В) Вывод слов из базы с расстановкой точек в конце каждого предложения и переводом строки в случае перехода к
следующему параграфу.
Структура кода
- Модуль SearchWord.php осуществляет точный поиск по словарю.
- Модуль ParamSearch.php осуществляет поиск по грамматическим признакам.
- Модуль GramParam.php реализует вывод грамматических признаков для выбора пользователю (с использованием JavaScript).
Трассируемость требований в проектных решениях
Требования:
Т1 - Система по запросу пользователя должна осуществлять поиск хранящихся на сервере слов и связанных с ними текстов.
Т2 - Система должна предоставлять возможность доступа к словам и связанным с ними текстам, имеющим написание как нынешнее, так и языка XIX века(С буквами и формами тех времен).
Т3 - Система должна предоставлять возможность вывода на экран сначала части текста(окрестности данного слова - предложения, в котором содержится данное слово), а потом, по требованию пользователя, и всего текста.
Т4 - Система должна предоставлять возможность вставки символов языка XIX века.
Модули:
M0 - Интерфейс
M1.1 - Модуль searchword.php(поиск слова по точному совпадению)
M1.2 - Модуль listword.php(поиск слова по заданным грам. параметрам)
M1.3 - Модуль stext.php(поиск текстов, содержащих данное слово)
M2 - Словарь и база текстов