Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Разработка библиотеки для осуществления адаптивного поиска в базах данных Web-приложений (бакалаврская работа).docx
Скачиваний:
38
Добавлен:
28.06.2014
Размер:
5.14 Mб
Скачать

Выводы по главе 2

Разработан метод хранения предпочтений пользователей, полученных на основании предыдущих поисковых запросов. Описан алгоритм адаптивного поиска в базах данных. Данный алгоритм может быть использован для разработки на его основе библиотеки для осуществления адаптивного поиска в базах данных Web-приложений.

3. Разработка программной библиотеки

3.1. Проектирование

На базе описанного в предыдущей главе алгоритма была спроектирована и реализована на языке PHP программная библиотека для осуществления адаптивного поиска в базах данных Web-приложений. Данная библиотека позволяет осуществлять поиск текстовой информации в большинстве популярных баз данных, а именно: mSQL, Microsoft SQL Server, MySQL, Oracle, PostgreSQL, SQLite и InterBase.

При проектировании библиотеки был выбран объектно-ориентированный подход. Ключевыми объектами, выделенными в процессе проектирования, являются объект соединения с базой данных, объект результата и объект ошибки выполнения поискового запроса. UML-диаграмма основных классов, используемых в библиотеке, представлена на рисунке 3.1.

Класс DB является основным классом библиотеки. Ключевым понятием данного класса является DSN (data source name) – имя источника данных, представляющее собой строку или массив. DSN, заданный в виде строки, имеет следующий вид: phptype://username:password@protocol+hostspec/database?options.

Рассмотрим основные части DSN:

phptype – тип используемого драйвера базы данных (mssql, mysql и т. п.);

username – имя пользователя базы данных;

password – пароль пользователя;

protocol – коммуникационный протокол (tcp, unix и т. п.);

hostspec – спецификация хоста (имя хоста и номер порта);

database – имя базы данных для подключения;

options – дополнительные параметры, разделённые символом “&”.

Рис. 3.1. Диаграмма основных классов библиотеки.

Большинство частей DSN являются не обязательными и могут быть опущены, если база данных, которой осуществляется попытка подключения, это позволяет. Так, например, источник данных может быть описан строкой, представленной в одной из следующих форматов:

phptype://username:password@hostspec/database_name

phptype://username:password@hostspec

phptype://username@hostspec

phptype://hostspec/database

phptype://hostspec

phptype

Кроме того, DSN может быть задан с помощью ассоциативного массива, ключи которого носят те же имена, что и части строки DSN, описанные выше: phptype, username, password, protocol, hostspec, database. Номер порта указывается отдельно от имени хоста через элемент с ключом port. Дополнительные параметры подключения в этом случае должны быть указаны в параметре database и отделены от имени базы данных символом “?”. Для конвертирования DSN из массива в строку и обратно предусмотрены методы getDSNString() и parseDSN(). Данные методы класса позволяют разработчику указывать DSN в любом из двух возможных типов.

Основные методы класса, factory() и connect(), позволяют взаимодействовать с требуемым источником данных по его DSN. Метод connect(), в отличие от factory(), сразу же устанавливает соединение, не дожидаясь первого запроса к базе данных. Оба метода возвращают объект одного из наследников класса DB_common: DB_mssql, DB_mysql, DB_mysqli, DB_pgsql, DB_ibase или DB_oci8. Подобный подход позволяет легко расширять библиотеку.

Классы DB_result и DB_row формируют единый интерфейс для работы с результатами поисковой выдачи, не зависящий от типа используемого драйвера базы данных. Методы класса позволяют работать с результатом как с ассоциативным или нумерованным массивом. Кроме того, методы nextResult() и fetchRow() позволяют обрабатывать полученный результат строка за строкой и не хранить весь массив данных.

Поисковые методы объектов класса DB_common используют расширенный класс phpMorphy одноимённой библиотеки морфологического анализа, распространяемой бесплатно для некоммерческого использования. Методы phpMorphy позволяют решать следующие задачи: лемматизация (получение нормальной формы слова), получение всех форм слова, получение грамматической информации для слова (часть речи, падеж, спряжение и т. д.), изменение формы слова в соответствии с заданными грамматическими характеристиками, изменение формы слова по заданному образцу. Поддерживаемые в phpMorphy языки: русский, английский, немецкий, украинский, эстонский. Есть возможность добавить поддержку других языков. phpMorphy поддерживает все однобайтовые кодировки (windows-1251, iso-8859 и т. п.) и Unicode кодировки (utf-8, utf-16le/be, utf-32, ucs2, ucs4). По умолчанию библиотека работает с кодировкой UTF-8. phpMorphy использует для работы словарь. Поддерживаются словари AOT и myspell, свободно распространяемые, в том числе и для коммерческого использования. Словари представлены в двух видах: в исходном и бинарном. Исходный словарь представлен в виде XML файла и содержит основы слов, правила изменения и грамматическую информацию.

Для работы библиотеки требуется скомпилировать бинарный словарь. При компиляции используется словарь в исходном виде. Бинарный словарь обладает следующими особенностями: совместим c различными платформами,все данные представлены в заданной кодировке, в верхнем (по умолчанию) или нижнем регистре.Последняя особенность позволяет не тратить время на преобразование кодировки и регистра в реальном времени, а сделать это один раз на этапе компиляции.

Физически словарь представлен в виде нескольких файлов:

common_aut.ru – хранилище всех словоформ;

morph_data.bin – хранилище грамматической информации;

predict_aut.bin – хранилище окончаний для предсказания.

Именование файлов словаря производится в соответствии с шаблоном <имя_файла>.<язык>.bin, где <язык> – условный код языка, в виде ISO3166 кода страны и ISO639 кода языка, то есть ru_ru, en_en и т. п. Данный метод позволяет размещать в одном каталоге словари для нескольких языков.

Весь процесс поиска при работе с библиотекой состоит из трёх простых действий: подключения файла библиотеки, установки соединения с базой данных, например, с помощью метода DB::connect() и вызова метода поиска DB_Common::search() с указанием необходимых параметров. Пример работы с библиотекой приведён в листинге 3.1.

require_once 'DB.php';

// Источник данных

$dsn = 'mssql://login:pass@localhost/db_name';

// Установка соединения с базой данных

$db =& DB::connect($dsn);

// Поиск

$params = array('from' => 'table', 'where' => 'field');

$results = $db->search('Поисковый запрос', $params);

// Вывод результатов

while($r = $results->fetchRow())

echo $r['field'];

Листинг 3.1. Пример использования библиотеки.

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

require_once 'DB.php';

// Источник данных

$dsn = 'mssql://login:pass@localhost/db_name';

// Установка соединения с базой данных

$db =& DB::connect($dsn);

// Обработка ошибок

if (DB::isError($db))

echo $db->getMessage();

Листинг 3.2. Пример обработки ошибок.

Кодирование скриптов библиотеки осуществлялось на языке программирования PHP, интенсивно применяемом при разработке Web-приложений, в среде NetBeans.

Соседние файлы в предмете Государственный экзамен