Автор: Пользователь скрыл имя, 22 Апреля 2014 в 17:22, курсовая работа
Пополнение информационных ресурсов Интернета происходит высокими темпами, и найти необходимую информацию становиться всё труднее. Различные печатные справочники устаревают ещё до выхода в свет. Единственным надёжным способом поиска информации является использование различных поисковых систем, которые постоянно отслеживают изменение информации в сети.
За время существования Интернета предпринимались различные попытки организации поисковых средств. Многие из этих попыток оказались неудачными, другие же привели к созданию удобных средств поиска информации. Наиболее удачные проекты появились в последние пять лет.
Введение…………………………………………………………………………5
1. Анализ требований к заданию………………………………………………6
2. Разработка структуры данных и алгоритмов управления информационными ресурсами………………………………………………...11
3. Разработка сайта информационной системы………………………………15
4. Руководства по работе с системой………………………………………….24
4.1 Руководство пользователя ………………………………………….24
4.2 Руководство администратора……………………………………….26
Заключение……………………………………………………………………...27
Список литературы………………………………………
Алгоритм индексации документов выглядит следующим образом:
Рисунок 1 – Алгоритм индексации информации
Также необходимо продумать структуры базы данных и структуру таблиц для поиска информации:
Section_id – id_раздела;
Content – текст статьи;
Id – id_статьи;
Caption – название статьи;
SITE_URL – официальный сайт программы;
Id – id_статьи
FULL_TEXT – описание ПО
Title – название раздела;
Id – id_раздела;
Рисунок 2 - Структура базы данных
Далее определимся со структурой сайта:
Сайт содержит несколько страниц, на главной – осуществляется поиск, на других вкладки с разделами программного обеспечения.
3.Программная реализация
Программа реализована на языке программирования PHP. Функционал сайта разбит на модули, часть из которых является страницами и помимо программного кода содержит код HTML-разметки.
Таблица 3.1 - Перечень программных модулей
Имя файла |
Описание |
index.php |
Главная страница сайта; функции отображения разделов и статей |
find.php |
Форма поиска по сайту и отображения результатов поиска |
AddArticle.php |
Форма создания и редактирования статьи |
AddSection.php |
Форма создания и редактирования раздела |
AdminLogin.php |
Форма авторизации администратора |
includes\glob.php |
Функции инициализации подключения к базе данных; функции проверки авторизации |
Includes\google_pr.php |
Функция определения Google PageRank для заданной ссылки на сайт |
includes\boolean_search.php |
Функции булевого поиска; функции работы со словарями ISpell; функции преобразования поисковых запросов |
База данных реализована в СУБД MySQL. База данных хранит следующую информацию:
- список разделов;
- список статей (описаний спортивных Интернет-ресурсов);
- словарь термов;
- индексную таблицу;
- словарь ISpell;
- набор правил ISpell;
- список стоп-слов;
Структура таблиц в базе данных приведена в таблицах 3.2-3.7.
Список статей и список разделов хранит основное содержимое сайта в том виде, в котором оно было введено администратором при заполнении сайта.
Таблица 3.2 - Структура таблицы «Список разделов» в базе данных
Имя поля |
Тип данных |
Код раздела |
Число |
Наименование раздела |
Текст |
Таблица 3.3 - Структура таблицы «Список статей» в базе данных
Имя поля |
Тип данных |
Код статьи |
Число |
Код раздела |
Число |
Текст статьи |
Текст |
Словарь термов хранит уникальные слова, которые встречаются где-либо в содержимом сайта. При хранении в словаре термов, все слова приводятся к базовой форме.
Таблица 3.4 - Структура таблицы «Словарь термов» в базе данных
Имя поля |
Тип данных |
Код терма |
Число |
Текст терма |
Текст |
Индексная таблица хранит соответствие термов и статей. По индексной таблице можно легко получить список термов, которые присутствуют в статье, или же быстро проверить присутствует ли заданный терм в заданной статье.
Таблица 3.5 - Структура индексной таблицы в базе данных
Имя поля |
Тип данных |
Код терма |
Число |
Код статьи |
Число |
Количество повторений |
Число |
Словарь ISpell в исходном формате представляет собой два текстовых файла: Ispell_dictionary (словарь) и ispell_affix (набор правил). Для быстрой работы со словарями ISpell в рамках данного проекта, словарь и набор правил преобразованы в таблицы в базе данных. Это позволяет быстро находить все словоформы или приводить слово к исходной форме с помощью простейших SQL-запросов к БД.
Таблица 3.6 - Структура таблицы «Словарь ISpell» в базе данных
Имя поля |
Тип данных |
Слово в базовой форме |
Текст |
Флаги применяемых правил |
Текст |
Таблица 3.7 - Структура таблицы «Набор правил ISpell» в базе данных
Имя поля |
Тип данных |
Флаг правила |
Символ |
Маска окончания (регулярное выражение) |
Текст |
Окончание |
Текст |
Вариант замены окончания |
Текст |
Для работы полнотекстового поиска, необходимо построение индекса статьи в момент её добавления, а также перестроение индекса при любых изменениях статей. Построение индекса включает в себя следующие шаги:
- удаление старого индекса (удаление записей из индексной таблицы);
- выделение уникальных слов из текста статьи и приведение их к базовой форме;
- добавление слов в словарь термов;
- добавление пар
код_терма – код_статьи в
Описанные шаги реализованы в модуле boolean_search.php с помощью следующих функций:
Таблица 3.8 - Перечень функций, используемых при индексировании
Имя функции |
Описание |
Входные данные |
Выходные данные |
RebuildSearchIndex |
Перестроение индекса по заданной статье |
Код статьи |
нет |
PrepareTextStep1 |
Приведение текста к верхнему регистру, удаление коротких слов и лишних пробелов |
Текст |
Текст |
PrepareTextGetBaseForms |
Приведение всех слов текста к базовой форме |
Текст |
Текст
|
GetQueryWords |
Получение списка уникальных слов из текста |
Текст |
Набор слов |
CreateNewTerm |
Поиск терма в словаре термов или создание нового если не существует |
Текст (одно слово) |
Код терма |
CreateIndexRecord |
Создание записи в индексной таблице |
Код статьи; Код терма |
нет |
Форма поиска реализована в модуле find.php. Данная форма осуществляет запрос текста для поиска, вызов необходимых функций поиска и отображение результатов. Вся логика булевого поиска и работа с базой данных реализована в модуле boolean_search.php. Перечень функций булевого поиска приведен в таблице ниже.
Перечень функций используемых при булевом поиске
Имя функции |
Описание |
Входные данные |
Выходные данные |
PrepareTextStep1 |
Приведение текста поискового запроса к верхнему регистру, удаление коротких слов и лишних пробелов |
Текст |
Текст |
PrepareTextGetBaseForms |
Приведение всех слов в поисковом запросе к базовой форме |
Текст |
Текст |
PrepareTextGetFindSQL |
Формирование SQL-запроса на выборку таблицы соответствия статей и термов |
Текст запроса приведенный к базовым формам |
SQL-запрос |
BooleanFindObjects |
Выполнение поискового запроса булевой модели поиска |
Текст поискового запроса |
Набор найденных статей |
Релевантность статьи поисковому запросу рассчитывается по формуле:
где - количество повторений i-го слова поискового запроса в статье
N – общее количество слов в статье
Таким образом, релевантность статьи будет максимальна, если статья целиком состоит из слов поискового запроса. Релевантность статьи будет нулевой, если она не содержит ни одного слова из поискового запроса.
Код расчета релевантности статьи в %
//article_id - ID статьи в базе данных
//words
- список слов поискового
function
CalculateRelevance($search_
{ //получение общего количества проиндексированных слов в статье
$total_words_quantity=0;
$q=mysql_query("select sum(QUANTITY) from INDEX_TABLE where SEARCH_OBJECT_ID = $search_object_id");
$row=mysql_fetch_row($q);
if($row) $total_words_quantity=$row[0];
if($total_words_quantity==0) return 0;
//подсчет количества совпадающих слов
$match_words_quantity=0;
for($i=0; $i<count($words); $i++)
{//расчет релевантности в %
$relevance
= round($match_words_quantity/$
return $relevance;
}
Определение Google Page Rank
Для определения рейтинга сайтов производителей программного обеспечения, применяется метод Google Page Rank. Алгоритм определения PageRank является закрытой технологией Google. Тем не менее, данная компания предоставляет всем желающим информацию о PageRank для любого интернет-ресурса. Поскольку ссылающихся страниц может быть много, и общее количество страниц в поисковой системе Google достаточно велико (около десятка биллионов штук) а также их количество постоянно растет, то представлять вес страницы в абсолютных значениях для вебмастеров было бы весьма неправильно. Для этого ввели понятие TLPR -- ToolBar PageRank, который имеет значение от 0 до 10. Определение Google Page Rank с помощью сервисов Google реализовано следующим образом:
<? function StrToNum($Str, $Check, $Magic) {
$Int32Unit = 4294967296;
$length = strlen($Str);
for ($i = 0; $i < $length; $i++) {
$Check *= $Magic;
if ($Check >= $Int32Unit) {
$Check = ($Check - $Int32Unit * (int) ($Check / $Int32Unit));
$Check = ($Check < -2147483648) ? ($Check + $Int32Unit) : $Check;
} $Check += ord($Str{$i});
} return $Check;
} function HashURL($String) {
$Check1 = StrToNum($String, 0x1505, 0x21);
$Check2 = StrToNum($String, 0, 0x1003F);
$Check1 >>= 2;
$Check1 = (($Check1 >> 4) & 0x3FFFFC0 ) | ($Check1 & 0x3F);
$Check1 = (($Check1 >> 4) & 0x3FFC00 ) | ($Check1 & 0x3FF);
$Check1 = (($Check1 >> 4) & 0x3C000 ) | ($Check1 & 0x3FFF);
$T1 = (((($Check1 & 0x3C0) << 4) | ($Check1 & 0x3C)) <<2 ) | ($Check2 & 0xF0F );
$T2 = (((($Check1 & 0xFFFFC000) << 4) | ($Check1 & 0x3C00)) << 0xA) | ($Check2 & 0xF0F0000 );
return ($T1 | $T2);
} function CheckHash($Hashnum) {
$CheckByte = 0;
$Flag = 0;
$HashStr = sprintf('%u', $Hashnum) ;
$length = strlen($HashStr);
for ($i = $length - 1; $i >= 0; $i --) {
$Re = $HashStr{$i};
if (1 === ($Flag % 2)) {
$Re += $Re;
$Re = (int)($Re / 10) + ($Re % 10);
} $CheckByte += $Re;
$Flag ++;
} $CheckByte %= 10;
if (0 !== $CheckByte) {
$CheckByte = 10 - $CheckByte;
if (1 === ($Flag % 2) ) {
if (1 === ($CheckByte % 2)) {
$CheckByte += 9;
} $CheckByte >>= 1;
} }
return '7'.$CheckByte.$HashStr;
} function getch($url) { return CheckHash(HashURL($url)); }
//получение Google PageRank для заданной ссылки
function UrlPR($url){
$ch = getch($url);
$main_url
= "http://toolbarqueries.google.
$content = file_get_contents($main_url);
$pr = explode(":",$content);
if($pr[2]=="") return "???";
return trim($pr[2])."/10";
} ?>
4. Руководства по работе с системой
4.1 Руководство пользователя
Для отладки создаваемого сайта используется Denwer3_Base_2008, который использует Apache 2.2.4, PHP 5.2.4, phpMyAdmin 2.6.1 и MySQL 5.0.45.
После установки Денвера web-сервер полностью готов к использованию. Для отладки сайта и дальнейшей работы с ним нужно будет скопировать его в /home/localhost/www . Для того чтобы запустить его в браузере необходимо набрать следующий URL-адрес: http://localhost/<имя стартовой страницы или путь до папки с ней>.
Рисунок 3 - Главная страница сайта
Каталог программного обеспечения распределен по разделам.
Навигация по разделам осуществляется с помощью ссылок в верхней части окна по вкладкам.
Если выбрать какой-либо раздел, то на странице отображаются все программные обеспечения с их полным описанием (название, описание, ссылка на официальный сайт, скриншоты).
Рисунок 4 – Отображение ПО в разделе «Файлы и диски»
Для перехода на страницу поиска по сайту нужно перейти на вкладку «Поиск по каталогу».
Далее в поле «Текст поиска» ввести поисковый запрос, например «антивирус», при необходимости можно выбрать раздел, в котором будем искать и нажать кнопку «Найти». Ниже будут отображены найденные ПО, удовлетворяющие поисковому запросу (рис. 5).