Оценка объектов по заданным критериям

Расширение "Оценка" предназначено для решения совокупности задач оценивания объектов по нескольким критериям. На текущий момент оно позволяет решать две задачи:
собирать комплексные оценки объектов данных сайта его пользователями;
собирать и обобщать данные субъективного оценивания пользователями сайта степени выраженности произвольных заданных признаков на произвольно заданном множестве объектов.
Для возможности использования расширения необходимы файлы x_ocenka.api, x_ocenka.php, x_ocenka.txt, x_ocenkas.php (не входят в базовый комплект). Для полноценного использования расширения необходимо также наличие установленного расширения Текстовые диаграммы.

Оценка объектов данных сайта

Для оценки объектов данных сайта расширение позволяет вводить в тексты статей меню выбора оценки той или иной публикации (статьи, книги) по объявленному критерию в заданной шкале. Это даёт возможность пользователям поставить положительную или отрицательную оценку той или иной статье или иному информационному объекту. Эти оценки накапливаются и обобщаются и в дальнейшем могут использоваться для составления рейтинга информационных объектов сайта.
Обычно для выставления оценок тем или иным публикациям (информационным объектам) используются всем знакомые кнопки Like или Like/Dislike. В данном случае применяется существенно более общий механизм.
Для оценки может быть определена одна или несколько шкал с соответствующими пояснениями, каждая из которых имеет своё название, права доступа к ней и свой диапазон градаций оценок. В произвольном месте статьи шкала оценок может быть предъявлена пользователю как набор ссылок на баллы оценки. Если данный пользователь уже выставлял оценку в данной шкале, то его выбор выделяется. После выбора оценки, соответствующие данные фиксируются в системе в привязке к объекту, критерию оценивания и пользователю, предоставившему оценку. При этом оценившему предъявляется отчёт со сводными результатами всех ранее выставленных оценок.

ocenka() - Вывод меню выбора балла оценки

Функция ocenka([ko,oo]) - выводит меню выбора балла оценки с соответствующими пояснениями. Она имеет два необязательных параметра. Параметр ko должен содержать код критерия оценивания. Если он не задан или имеет пустое значение, то ему присваивается значение $, определяющее отсылку к критерию оценивания по умолчанию. Параметр oo - определяет объект оценивания. Если он не задан или имеет пустое значение, то ему присваивается имя файла текущей публикации, в которой вызвана функция ocenka(). Таким образом, меню оценивания может быть задано как в самой статье, так и в любой другой. То есть предложить оценить одну статью можно в тексте любой другой статьи. В частности, можно завести отдельную статью, где предложить оценить другую статью или книгу по разным критериям. В этом случае функция ocenka() будет вызываться с явно заданным одинаковым значением параметра oo, но с разными значениями параметра ko.
В следующем примере выводится меню выбора оценки данной статьи.
Вы не авторизованы. Поэтому меню не выведено, а выведена лишь средняя относительная оценка. Что это - см. далее.
Разметка
@ocenka()
Вывод
Оцените публикацию в заданной шкале
Чем больше, тем лучше. -5 - очень плохо; +5 - отлично
0
Меню выбора представляет собой таблицу, состоящую из трёх строк. В первой выводится текст критерия оценки. Во второй строке - комментарий, пояснение к шкале и критерию. В третьей строке неавторизованные пользователи увидят относительную величину сводной оценки, подсчитанной на основании оценок, выставленных другими пользователями. Что такое относительная оценка см. далее. Авторизованные пользователи увидят в третьей строке собственно меню выбора оценки. Если пользователь уже давал свою оценку объекту, то будет выведена ещё одна строка, в которой указывается какая оценка была выставлена пользователем в прошлый раз.
Вывод шкалы оценивания функцией ocenka() собирается на основании описания критерия оценки, заданного в конфигурации системы. В частности, в данном случае в конфигурации даётся следующее определение использованному здесь стандартному критерию оценки.
*Базовый тип оценки
ocenka.$.n Оцените публикацию в заданной шкале
ocenka.$.a Чем больше, тем лучше. -5 - очень плохо; +5 - отлично
ocenka.$.d 02333
ocenka.$.p
ocenka.$.z 5

Описание представляет собой массив ключ/значение со структурированными ключами (см. Массивы Ключ/Значение )
Первое часть каждого кода - ocenka - идентификатор принадлежности к расширению "Оценка". После точки следует идентификатор критерия оценивания. В данном случае - это $ - критерий по умолчани. Третья часть - это код атрибуты данной системы оценок. Могут быть использованы следующие коды атрибутов:
n - Название критерия оценивания.
a - Аннотация (объяснение) критерия.
d - Права доступа пользователей разных категорий к данному критерию оценки.
p - Индивидуальные права, выставленные конкретным пользователям.
z - Размах шкалы оценки.
Определение прав доступа практически идентично правилам их ограничения при доступе к публикациям см. Регулирование прав доступа к публикации. В данном случае общие права доступа установлены кодом 02333. Это означает, что посетителям, опознанным как роботы, функция ocenka() не выведет ничего. Неавторизованным пользователя разрешено видеть только общие совокупные относительные результаты оценки (2). Все остальные категории пользователей увидят меню выбора оценки, элементы которого представлены как ссылки.
Атрибут z - размах шкалы оценки характеризует абсолютную величину максимального и минимального баллов оценки. В данном примере размах равен 5. Поэтому положительные градации оценки измеряются позициями от 1 до 5, а отрицательные - от -5 до -1. Также существует нейтральная позиция 0, точно соответствующая середине шкалы.
При выборе оценки производится переход по связанной с ней ссылкой. Соответствующий скрипт сохраняет результат оценки и выводит сводный отчёт по результатам оценивания всеми пользователями. В заголовке отчёта указываются название критерия и оцениваемый информационный объект. В данном случае - это файл dok/x_ocenka.s, содержащий данную статью. Далее в таблице перечисляется сколько пользователей выбрали тот или иной балл. Строка с баллом, который выбрал данный пользователь выделена. Также по каждому баллу выводятся процент присвоивших его пользователей от общего числа проставивших оценки, а также относительная оценка.
Относительная оценка вычисляется по формуле:
OтнОц = (Балл - МинБалл)/(МаксБалл - МинБалл)
В силу своего построения относительная оценка всегда находится в диапазоне от 0 до 1. Она позволяет сопоставлять объекты по разным критериям, если у критериев были разные размахи шкал оценки.

ocenkavp() - Оценка выраженности признаков у объектов

Функция ocenkavp(p) предназначена для сбора мнений пользователей о степени выраженности заданного набора признаков у заданного множества объектов. Признаками и объектами может быть что угодно. Например, признаками могут быть какие-то качества людей (доброжелательность, правдивость, способность к взаимовыручке и т.д.), а объектами - конкретные люди.
Предполагается, что каждый объект в той или иной степени обладает каждым из выделенных признаков. Эти признаки нельзя выразить какими-то объективно измеряемыми данными, а степень их выраженности у объектов нельзя или крайне сложно объективно измерить в каких-либо привычных единицах измерения. Однако каждый из этих признаков поддаётся некоторой субъективной оценке. Поэтому опрашиваемым пользователям предлагается дать такие оценки о степени выраженности каждого из признаков на каждом из объектов. Любой пользователь вправе выразить своё мнение только о части объектов и части признаков по своему усмотрению. Оценки выставляются передвижением ползунка, характеризующего насколько по мнению пользователя данный признак выражен у данного объекта. Правее - больше выражен, левее - меньше. При этом можно указать засчитывать ответ, либо нет. Оценки каждого могут пересматриваться произвольное число раз.
Пример формы гипотетического опроса приведён далее. Форма опроса доступна только для авторизованных пользователей. Для неавторизованных форма опроса не будет выведена.
Разметка
@ocenkavp("d:*~p1 r:dok/t/ocenkavp.txt")
Вывод
В приведённом гипотетическом примере вопросы опросного листа (признаки) не имеют чёткого и однозначного способа измерения. Их оценка для каждого отвечающего неизбежно будет нести высокий уровень субъективной окраски. Инструмент как раз и предназначен для сбора такого рода мнений и их транформации в какие-то усреднённые числовые оценки.
Форма содержит коды и названия объектов и признаков. Изначально опросные строки упорядочены по кодам объектов, а внутри них - по кодам признаков (Объект/Признаки). То есть предполагается, что пользователь будет последовательно давать оценки о степени выраженности каждого из признаков для каждого из объектов. Однако режим ввода можно переключить переходом по ссылке Признак/Объекты. В этом случае строки опросного листа будут пересортированы и он будет предлагать составить сравнительные ответы о степени выраженности каждого из признаков на последовательности объектов. Из такого представления формы опять можно переключиться на форму ввода Объект/Признаки. Важно иметь в виду, что при переключении форм представления опросного листа данные НЕ сохраняются. Переключается лишь форма представления опросного листа.
Перемещение движка оценки вправо указывает на большую степень выраженности данного признака на данном объекте. Влево - на меньшую.
При нажатии на кнопку Принять введённые данные о перемещённых движках сохраняются в результатном файле. При этом сохраняются только те данные, для которых установлена пометка. После сохранения статья с формой опроса выводится повторно с новыми значениями введённых данных. При этом флажки пометки сбрасываются.
Функция ocenkavp(p) имеет один Параметр-список. Список включает два параметра: d и r. Параметр d обязателен и должен содержать указатель данных (см. Указатели данных ) на массив данных расширения (см. Массивы данных расширений ), определяющий структуру опроса. Параметр r определяет результатный файл, в котором накапливаются результаты опроса. Этот файл должен существовать в каком-либо каталоге автора статьи, из которой выполняется функция ocenkavp(). Если указан файл, не принадлежащий автору (путь к файлу начинается не с логина владельца статьи), то функция не будет выполняться. Результатный файл можно не задавать. В этом случае предполагается, что файл имеет то же имя, что и статья, из которой запущена функция, но с расширением txt.
В приведённом выше примере заданы оба параметра. Описание опроса (d:*~p1) содержится в секции p1 этой статьи, а результатным файлом является dok/t/ocenkavp.txt.
Формальное описание структуры опроса приведённого примера (массив данных расширения из секции p1 данной статьи) приведёно ниже.
$.x ocenkavp
$.n Оценка привлекательности туристических направлений по разным критериям
$.d 01333
vo Дайте субъективную оценку предложенных характеристик туристической привлекательности регионов
/sp
td Транспортная доступность
us Уровень сервиса
cks Соотношение Цена/Качество сервиса
rd Рекреационные достоинства
pd Природные достопримечательности
kid Культурно-исторические достопримечательности
dt Транспортная доступность достопримечательностей
lpn Личная привлекательность региона с точки зрения туризма
//
/so
msk Москва
spb Санкт-Петербург
kaz Казань
crr Центральная часть России
kk Краснодарский край
krym Крым
sib Сибирь
alt Алтай
prim Приморье
kam Камчатка
//

Основными разделами данных являются:
vo - вопрос опроса;
sp - список признаков;
so - список объектов.
Раздел vo содержит вопрос опроса. Он будет выведен в первой строке опросной формы. Если его не задать, то здесь (как в приведённом примере) будет выведена стандартная фраза: "Укажите выраженность признаков, перечисленных под каждым объектом (вправо больше - влево меньше)". Далее выводится строка предупреждения о необходимости поставить "галочку" перед каждым каждым движком оценки. В противном случае ответ по данному пункту не будет засчитан. Таким образом можно "отменить" ранее данные ответы по каким-либо пунктам.
Списки признаков и объектов интерпретируются как Массивы Ключ/Значение. Они имеют предельно простую структуру:
код название. Эти коды и названия выводятся в опросной форме.

Особенности использования опросной формы о степени выраженности признаков на объектах

Важной особенностью использования функции ocenkavp() является то, что она использует собственный обработчик данных формы. Поэтому в статье, где она используется недопустимо использование других расширений, использующих формы ввода. Как правило, это и не требуется. Если статья используется как опросный лист, то в ней имеет смысл размещать только саму одну опросную анкету и комментарии к ней. Например, содержащие правила заполнения и пояснения о наборе исследуемых признаков.
Сохранение анкетных данных осуществляется в формате очень похожем на формат ssd (см. Структурированные статистические данные ). Данные сохраняются в формате ключ/значение, где каждый ключ имеет следующую структуру:
<код_признака>.<код_объекта>.<идентификатор_пользователя>
При таком представлении признаки могут интерпретироваться как индикаторы, а объекты - как объекты формата ssd. Отличие состоит лишь в том, что здесь в структуре кода вместо кода периода времени формата ssd фигурирует идентификатор_пользователя. При этом в массив результатов сохраняются описания (названия) признаков и объектов в точном соответствии с правилами, принятыми для формата ssd. Поэтому результаты опросов могут рассматриваться как ssd-массивы и визуализироваться в соответствии со всеми возможностями расширения Структурированные статистические данные, если оно установлено.

Навигатор Статистика Код