Разработка сайта-каталога программного обеспечения с поиском программ на основе булевой модели

Автор: Пользователь скрыл имя, 22 Апреля 2014 в 17:22, курсовая работа

Краткое описание

Пополнение информационных ресурсов Интернета происходит высокими темпами, и найти необходимую информацию становиться всё труднее. Различные печатные справочники устаревают ещё до выхода в свет. Единственным надёжным способом поиска информации является использование различных поисковых систем, которые постоянно отслеживают изменение информации в сети.
За время существования Интернета предпринимались различные попытки организации поисковых средств. Многие из этих попыток оказались неудачными, другие же привели к созданию удобных средств поиска информации. Наиболее удачные проекты появились в последние пять лет.

Оглавление

Введение…………………………………………………………………………5
1. Анализ требований к заданию………………………………………………6
2. Разработка структуры данных и алгоритмов управления информационными ресурсами………………………………………………...11
3. Разработка сайта информационной системы………………………………15
4. Руководства по работе с системой………………………………………….24
4.1 Руководство пользователя ………………………………………….24
4.2 Руководство администратора……………………………………….26
Заключение……………………………………………………………………...27
Список литературы………………………………………

Файлы: 1 файл

ПО.doc

— 1.21 Мб (Скачать)

Алгоритм индексации документов выглядит следующим образом:

Рисунок 1 – Алгоритм индексации информации

Также необходимо продумать структуры базы данных и структуру таблиц для поиска информации:

  1. Таблица Article_items – таблица, содержащая полное описание программного обеспечения, включает следующие поля:

Section_id – id_раздела;

Content – текст статьи;

Id – id_статьи;

Caption – название статьи;

SITE_URL – официальный сайт программы;

  1. Таблица INDEX_TABLE – хранит соответствие термов и статей.
  2. Таблица ISPELL_AFFIX – содержит флаг правила, маску окончания (регулярное выражение), окончание, вариант замены окончания.

  1. Таблица ISPELL_DICTIONARY – содержит слово в базовой форме и флаги применяемых правил.
  2. Таблица search_object содержит описание программного обеспечения:

Id – id_статьи

FULL_TEXT – описание ПО

  1. Таблица Sections – содержит названия разделов и включает следующие поля:

Title – название раздела;

Id – id_раздела;

  1. Таблица STOP_WORDS – список стоп-слов;
  2. Таблица TERMS -  хранит уникальные слова, которые встречаются где-либо в содержимом сайта.

Рисунок 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_object_id, $words)

{ //получение общего количества проиндексированных слов в статье

$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/$total_words_quantity*100, 2);

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.com/tbr?client=navclient-auto&hl=en&ch=$ch&ie=UTF-8&oe=UTF-8&features=Rank&q=info:$url";

$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).

Информация о работе Разработка сайта-каталога программного обеспечения с поиском программ на основе булевой модели