Оглавление
Введение
Сегодня поисковая система — один из самых широко используемых методов навигации в киберпространстве, которое растёт и увеличивается с каждым днём своего существования. Понятно, что и алгоритмы поиска информации должны постоянно увеличивать свою сложность и эффективность. Целью даной работы не является описание алгоритмов поиска информации, а просто дать ознакомительное их описание. Также целью данной работы является написание поисково веб-приложения на языке программирования Ruby.
С учётом вышеизложенного можно сформировать следующие цели:
• Ознакомление с алгоритмами поиска информации
• Написание поискового веб-приложения
Поставленные цели осуществляется с помощью задач:
• Изучение теории поиска
• Изучение языка программирования Ruby
• Ознакомление с языком разметки Haml
• Ознакомление с метаязыком Sass
• Используя Ruby,Haml и Sass, написать код веб-приложения
• Произвести отладку получившегося приложения
Теоретическая часть
Теория поиска информации
Для начала необходимо дать определение поисковой системы.
Поисковая система – программно-аппаратный комплекс с веб-интерфейсом, предоставляющий возможность поиска информации в интернете [1].
По осуществляемым функциям и решаемым задачам поисковые системы классифицируются на:
справочные являются наиболее распространенным типом функций информационных систем, и заключается в предоставлении абонентам системы возможностей получения установочных данных на определённые классы объектов;
поисковые являются наиболее распространённым классом информационных систем. В общем, виде можно рассматривать, как некоторое информационное пространство, задаваемое в терминах информационно-логического описания предметной области);
расчётные. Функция системы заключается в обработке информации, находящейся в системе, по определённым расчётным алгоритмам для различных целей.
По характеру же предоставления логической организации хранимой информации поисковые системы разделяются на фактографические, документальные и геоинформационные.
Так фактографические поисковые системы накапливают и хранят данные в виде множества экземпляров одного или нескольких типов структурных элементов. Каждый из таких экземпляров структурных элементов или некоторая их совокупность отражают сведения, по какому - либо факту, событию. Структура каждого типа информационного объекта состоит из конечного набора реквизитов, отражающих основные аспекты и характеристики сведений для объектов данной предметной области.
В документальных поисковых систем единичным элементом информации является нерасчлененный на более мелкие элементы документ, и информация при вводе, как правило, не структурируются, или структурируются в ограниченном виде. Для вводимого документа могут устанавливаться некоторые формализованные позиции - дата изготовления, исполнитель, тематика. Некоторые виды документальных информационных систем обеспечивают установление логической взаимосвязи вводимых документов - соподчиненность по смысловому содержанию.
В геоинформационных данные организованы в виде отдельных информационных объектов привязанных к общей электронной топографической основе. Геоинформационные системы применяются для информационного обеспечения в тех предметных областях, структура информационных объектов и процессов в которых имеется географический компонент.
Также существует следующая классификация поисковых систем (рис.1.)
Рис.1. Классификация поисковых систем
Говоря о поисковых системах, стоит упомянуть теорию поисковых запросов и их классификацию. Так в 1949 году профессором филологии из Гарварда были описаны некоторые из особенностей поиска информации.
Профессор Зипф заметил, что длинные слова встречаются в текстах любого языка реже, чем короткие. На основе этого наблюдения Зипф вывел два закона:
Первый закон связывает частоту появления (вхождения) того или иного слова с рангом этой частоты. Наиболее часто встречающимся словам присваивается ранг, равный единице. Тем словам, что встречаются реже – ранг, равный двойке и т.п. Зипф обнаружил, что произведение частоты вхождения слова и его ранга является постоянной величиной.
Такая зависимость обычно отображается гиперболой. Значение константы Зипфа для разных языков различно, но внутри одной языковой группы оно остается неизменным. Для русского языка константа равна примерно 0,06-0,07.
Зипф определил, что частота вхождения слов и количество слов, входящих в текст с данной частотой, тоже взаимосвязаны.
С одной стороны получившая кривая будет сохранять свои параметры для всех текстов в пределах одного языка. С другой стороны, на каком бы языке текст ни был написан, форма кривой Зипфа останется неизменной. Отличаться будут лишь коэффициенты.
Законы Зипфа универсальны. Они применимы не только к текстам. В аналогичную форму выливается, например, зависимость между количеством городов и числом проживающих в них жителей. Характеристики популярности ресурсов интернета отвечают законам Зипфа. В законах Зипфа отражается «человеческое» происхождение объектов. [2]
В любом случае каждый поисковый запрос можно классифицировать по трём характеристикам: длина запроса, чёткость запроса, стадия поиска.
Так по длине все запросы делятся на
Однословные(«продвижение»)
Двухсловные(«поисковое продвижение»
Трёхсловные(«профессиональное поисковое продвижение»)
Многословные(«профессиональное поисковое продвижение недорого»)
По чёткости все запросы делятся на:
Чёткий запрос(«цена на iPad 2»)
Нечёткий запрос(«Озон», что может быть и газом и названием магазина и фамилией режиссёра)
По стадии поиска все запросы делятся на:
Осознание проблемы(«не работает сайт»)
Поиск решения(«хостинг сайтов»)
Выбор решения(«какой хостинг выбрать»)
Поиск места транзакции(«тарифы хостинга masterhost»)
Язык программирования RUBY
Ruby – динамический, рефлективный, интерпретируемый высокоуровневый язык программирования для быстрого и удобного объектно-ориентированного программирования. Язык обладает независимой от операционной системы реализацией многопоточности, строгой динамической типизацией, сборщиком мусора и многими другими возможностями. Ruby близок по особенностям синтаксиса к языкам Perl и Eiffel, по объектно-ориентированному подходу — к Smalltalk. Также некоторые черты языка взяты из Python, Lisp, Dylan и Клу. На сегодняшний день интерпретатор Ruby реализован практически для всех платформ(Unix, Win32, OS X). Создателем языка является Юкихиро Мацумото.
Ruby – полностью объектно-ориентированный язык программирования. Всё является объектами, а функции — методами этих объектов [3].
Основные свойства Ruby:
Интерпретируемый язык:
Возможность прямых системных вызовов.
Мощная поддержка операций со строками и правилами (регулярными выражениями).
Мгновенное проявление изменений во время разработки.
Отсутствие стадии компиляции.
Простое и быстрое программирование:
Не надо объявлять переменные.
Переменные динамически типизированы.
Простой и последовательный синтаксис.
Автоматическое управление оперативной памятью.
Объектно-ориентированное программирование:
Всё есть объект. Даже имя класса есть экземпляр класса Class.
Классы, методы, наследование, полиморфизм, инкапсуляция и так далее.
Методы-одиночки.
Примеси при помощи модулей (возможность расширить класс без наследования);
Итераторы и замыкания.
Широкие возможности метапрограммирования.
Удобства:
Неограниченный диапазон значений целых чисел.
Модель обработки исключений.
Все операторы возвращают значения, даже управляющие структуры.
Динамическая загрузка.
Механизм перехвата исключений.
Поддержка потоков; как собственных, так и систем семейства UNIX.
Недостатки:
Неуправляемость некоторых процессов (таких, как выделение памяти), невозможность задания низкоуровневых структур данных или подпрограмм;
Невозможность компиляции и сопутствующей ей оптимизации программы;
Открытость исходного кода даже в готовой программе
Следствие двух первых недостатков — весьма низкая скорость запуска и выполнения программ [4].
Также стоит отметить, что для Ruby существует множество модулей (дополнений) практически для любого вида задач (программирование интерфейсов, сложные математические вычисления, работа с аудио, видео, 3D и т.п). Поэтому этот язык программирования был выбран в качестве основного для написания практической части.
1.3. Язык упрощённой разметки HAML
Haml - язык разметки для упрощённой генерации XHTML. HAML компилируется в HTML. Haml намного проще Html'`а так, как позволяет упростить и ускорить написание веб-приложений.
Например, данный кусок кода на Haml'е
!!!
%html{ html_attrs('ru') }
%head
%title Мой блог
%meta(http-equiv="Content-Type" content="text/html; charset=utf-8")
= stylesheet_link_tag "main"
%body
#header
%h1 Мой блог
%h2 Записи
#content
- @entries.each do |entry|
.entry
%h3.title= entry.title
%p.date= entry.posted.strftime("%A, %B %d, %Y")
%p.body= entry.body
#footer
%p.copyright
Все права защищены © Иван
Трансформируется Html-код
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang='ru' xml:lang='ru' xmlns='http://www.w3.org/1999/xhtml'>
<head>
<title>Мой блог</title>
<meta content='text/html; charset=utf-8' http-equiv='Content-Type' />
<link href="/stylesheets/main.css?" media="screen" rel="Stylesheet" type="text/css" />
</head>
<body>
<div id='header'>
<h1>Мой блог</h1>
<h2>Записи</h2>
</div>
<div id='content'>
<div class='entry'>
<h3 class='title'>Хеллоуин</h3>
<p class='date'>Четверг, 31 октября, 2006</p>
<p class='body'>
Ох уже эти американские праздники.
</p>
</div>
<div class='entry'>
<h3 class='title'>Новый язык шаблонов для Rails</h3>
<p class='date'>Пятница, 11 августа, 2006</p>
<p class='body'>
Haml — супер круто и жутко удобен. Моя Rails-душа наполнена счастьем. Это что?
</p>
</div>
</div>
<div id='footer'>
<p class='copyright'>
Все права защищены © Иван???
</p>
</div>
</body>
</html>
[5]
Видно, что 19 строк кода трансформируются в 35.
Реализация Haml'а существует для множества языков программирования.
Язык метаразметки SASS
Sass – это метаязык на основе CSS, предназначенный для увеличения уровня абстракции CSS кода и упрощения файлов каскадных таблиц стилей.
Язык Sass имеет два синтаксиса:
Старый – sass – отличается отсутствием фигурных скобок, в нём вложенные элементы реализованы с помощью отступов;
Новый – SCSS (Sassy CSS) – использует фигурные скобки, как и сам CSS.
Так к примеру
#header
background: #FFFFFF
.error
color: #FF0000
, a
text-decoration: none
&:hover
text-decoration: underline
Будет преобразовано в
#header {
background: #FFFFFF;
}
#header.error {
color: #FF0000;
}
#header a {
text-decoration: none
}
#header a:hover {
text-decoration: underline
}
[6]
На этом примере была доказана целесообразность использования Saas в связке с Haml нежели Css в связке с Html. Sass добавляет к Css константы и примеси, что ещё более упрощает вёрстку(Haml) для веб. Существует также аналогичный динамический язык стилей Less, но так, как Sass и Haml входят в стандартную поставку Ruby, то в работе будет использоваться именно Sass и Haml.