Запись написана

  • 29.03.2013
  • в 12:00 ДП
  • admin

Реклама

Использования регулярных выражений для анализа свободноконструируемых ответов 0

Арсеньев Е.А., Красовская А.А. , Напрасник С.В. , Цымбалюк Е.С., Шкиль А.С.

На сегодняшний день существует масса разнообразных систем компьютерного тестирования знаний и, в частности, различных способов оценивания ответов. В Харьковском национальном университете радиоэлектроники с 2004 года функционирует система компьютерного тестирования знаний OpenTEST, а с 2007 года обновленная версия OpenTEST2. Система OpenTEST2 поддерживает в полом объеме все основные типы тестовых заданий в вопросной форме: закрытые («выбор одного из нескольких», «выбор нескольких из нескольких», «соответствие») и открытые (ввод свободноконструируемой последовательности).

Наиболее интересными с точки зрения технической реализации и наиболее перспективными можно назвать тестовые задания, в которых пользователю предоставляется возможность самостоятельно ввести правильный ответ на вопрос с помощью клавиатуры. При этом очень важным является форма представления эталона и способ сравнения введенного ответа с эталоном. Дело в том, что во всех закрытых типах тестовых заданий суть оценивания ответов сводится к простому сравнению заранее предусмотренных альтернатив ответов с правильными альтернативами, что не является технически сложным в реализации и даёт однозначные результаты ответов. Но со свободноконструируемыми тестовыми заданиями ситуация совершенно другая, т.к. тестируемый может ввести в поле ввода ответ, который логически будет являться правильным, однако для машинного анализа может не совпадать с заранее введённым правильным эталоном. Наиболее тривиальным примером этого являются математические вопросы. Хотя использование математических вопросов со свободноконструируемыми ответами порождает определенные проблемы, многие авторы не хотят использовать математические вопросы закрытого типа из-за возможности подстановки ответа в условия решения и возможности интуитивного угадывания ответов. Например:

Текст вопроса: «Введите число π:»

Тестируемый может ввести следующие варианты ответа:

«Pi», «3.14», «π», «3.14159».

Либо:

Текст вопроса: «Сколько острых углов в прямоугольном треугольнике:»

Тестируемый может ввести следующие варианты ответа: «2», «два».

Довольно часто вопросы со свободноконструируемыми ответами используются при контроле знаний по языковым дисциплинам, но при этом возникают проблемы «клавиатурного» общения между тестируемым и системой компьютерного тестирования знаний, например:

Текст вопроса: «Переведите слово «стол» на английский язык:»

Тестируемый может ввести следующие варианты ответа:

«table», «desk», «writing-table».

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

Однако существует намного более удобное и универсальное решение для подобных задач, разработанное и впервые внедренное в языке Perl. Этим средством являются регулярные выражения.

Регулярные выражения (англ. regular expressions, жарг. regexp, регэ́кспы или ре́гексы) – это современная система поиска текстовых фрагментов в электронных документах, основанная на специальной системе записи образцов для поиска. Образец (англ. pattern), задающий правило поиска, по-русски также иногда называют «шаблоном», «маской», или на английский манер «па́ттерном». В электронной обработке текста в конце XX века произвели прорыв регулярные выражения.

Регулярные выражения –это по сути механизм, позволяющий задать шаблон для строки и осуществить поиск данных, соответствующих этому шаблону в заданном тексте. Кроме того, дополнительные функции по работе с regexp’ами позволяют получить найденные данные в виде массива строк, произвести замену в тексте по шаблону, разбиение строки по шаблону и т.п. Однако главной их функцией, на которой основаны все остальные, является именно функция поиска в тексте данных, соответствующих шаблону, описанному в синтаксисе регулярных выражений.

Сейчас регулярные выражения используются многими текстовыми редакторами и утилитами для поиска и изменения текста на основе выбранных правил. Многие языки программирования уже́ поддерживают регулярные выражения для работы со строками. Например, Perl и Tcl имеют встроенный в их синтаксис механизм обработки регулярных выражений. Набор утилит (включая редактор sed и фильтр grep), поставляемых в дистрибутивах Unix, одним из первых способствовал популяризации понятия регулярных выражений. Обычно с помощью регулярных выражений выполняются такие действия:

проверка наличия соответствующей шаблону подстроки;

поиск и выдача пользователю соответствующих шаблону подстрок;

замена соответствующих шаблону подстрок;

сложный семантический анализ строк и массивов строк.

Синтаксис регулярных выражений до сих пор не стандартизован в полном объёме. Существует POSIX-версия регулярных выражений, полностью описывающая стандарт синтаксиса для POSIX. Но версия Perl шире и более гибка, чем и объясняется ее широкая распространенность. Большинство библиотек по синтаксису и используемым метасимволам совместимо с Perl, поэтому имеет смысл начать разбираться с использованием регулярных выражений на примере именно этого языка.

Очень часто регулярные выражения используются для того, чтобы проверить, является ли данная строка строкой в необходимом формате. Например следующий regexp предназначен для проверки того, что строка содержит корректный e-mail адрес:

(что конкретно проверяется в адресе vova@mail.ru)

/^\w+([\.\w]+)*\w@\w((\.\w)*\w+)*\.\w{2,3}$/ расшифровать.

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

^ – начало проверяемой строки;

\w “Словесный” символ (символ, который используется в словах. Обычно все буквы, все цифры и знак подчеркивания (’_‘));

+ – это символ означает, что количество подряд идущих символов, обозначенных слева, может быть не меньше одного;

([\.\w]+)* – означает любое количество точек “.”, либо других буквенных символов (это необходимо для проверки e-mail адресов подобных vasya.pupkin@mail.ru, dmitriy.gorshkoff@hotmail.com и др.);

w((\.\w)*\w+)*\.\ – так обозначено то, что после знака амперсанта может идти сколько угодно доменов, разжелённых точкой “.”;

\w{2,3}$/ - здесь обозначено, что в конце строки обязательно должен стоять домен верхнего уровня, состоящий их 2-х или 3-х букв.

В PHP поддерживается два стандарта регулярных выражений – POSIX и PCRE. Первый считается более устаревшим и медленным, а PCRE (функции preg_*) более продвинутым и функциональным стандартом регулярных выражений, охватывающим практически любые проблемы. PHP также отличается наличием очень мощных и гибких механизмов для работы с двумя самыми часто используемыми типами данных: строками и массивами.

В компьютерной системе тестирования знаний OpenTEST2 для анализа свободноконструируемых ответов в тестовых заданиях открытого типа используется механизм регулярных выражений. Система разработана на интерпретируемом языке PHP, в котором реализована поддержка как POSIX, так и PCRE стандартов регулярных выражений. В OpenTEST2 используются PCRE–функции регулярных выражений, которые более функциональны и имеют ряд преимуществ перед POSIX.

Использование регулярных выражений намного упростило описание свободноконструируемых ответов и значительно расширило возможности системы, а также предоставило авторам теста практически безграничные возможности при составлении разнообразных тестовых заданий. Именно возможность автора теста самостоятельно «запрограммировать» логику проверки введённого ответа и является наиболее уникальной и передовой возможностью OpenTEST2 в отличии от других систем компьютерного тестирования знаний. Иными словами, при составлении тестового задания автор теста может сам описать логику проверки ответа (включая семантику, синтаксис, различные математические аспекты введённого ответа), и при корректном составлении регулярного выражения система будет оценивать введённый пользователем ответ именно так, как это задумал автор теста.

Система регулярных выражений в OpenTEST2 значительно расширила сферу применения тестирования, а также область применения тестовых заданий со свободным вводом ответа. Рассмотрим вышеупомянутые примеры вопросов со свободноконструируемыми ответами теперь уже с применением регулярных выражений в описании эталонов. Например :

Текст вопроса: «Введите число π:»

Тестируемый может ввести следующие варианты ответа:

«Pi», «3.14», «π», «3.14159».

Чтобы охватить все приведенные варианты ответов, автор теста может составить следующее регулярное выражение: /(Pi)|(π)|(3\.14\d*)|/ . Эта краткая строка регулярного выражения охватывает все вышеуказанные возможные правильные варианты ответов. Значение в последней паре скобок 3\.14* означает также любое число, которое начинается на 3.14, т.е. данным способом можно указывать точность оценивания числа. Добавив модификатор “i” в конец регулярного выражения (/(Pi)|(π)|(3\.14*)|/i), можно выключить проверку регистра букв в строке, введённой пользователем, что может быть очень важным и практическим приёмом в некоторых тестовых заданиях. Рассмотрим следующий пример:

Текст вопроса: «Сколько острых углов в прямоугольном треугольнике?:»

Тестируемый может ввести следующие варианты ответа: «2», «два».

В данном вопросе правильный ответ на вопрос представляет собой множество ответов, что очень просто описывается следующим регулярным выражением: /(2)|(два)/i. В некоторых случаях может возникнуть необходимость предусмотреть возможность случайного ввода одного или нескольких символов «пробел» перед или после слова, для чего в регулярном выражении достаточно просто добавить : /\w(2)|(два)\w/i, либо, наоборот, исключить такую возможность: /^(2)|(два)$/I (^ – спецсимвол, означающий начало строки, $ – символ конца строки).

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

Текст вопроса: «Переведите слово «стол» на английский язык:»

Тестируемый может ввести следующие варианты ответа:

«table», «desk», «writing-table».

Однако в слове «table» тестируемый может ввести вместо английской буквы «a» русскую букву «а», либо вместо английской «e» ввести соответственно русскую «е». Визуально ответ ничем не будет отличаться от правильного и тестируемый будет абсолютно прав при возможной апелляции. Поэтому при составлении регулярного выражения для данного тестового задания следует учесть возможные ошибки в раскладке клавиатуры. Регулярное выражение для данного примера можно составить в следующем виде: /(ta|аble|е)|(de|еsk|к)|(wri\іti\іng\-ta|аble|е)|/i, где a{английская буква а}|а{русская буква а} и т.п. Следует заметить, что реализовать что-то подобное без регулярных выражений технически достаточно сложно, а с помощью регулярных выражений подобные конструкции описываются достаточно просто.

Основной недостаток вопросов со свободным вводом ответов в системе OpenTEST состоял в использовании побитового сравнения вводимой последовательности с эталоном. Это значительно усложняло инструкцию к вопросам такого типа и вызывало неудовольствие у авторов теста и тестируемых «тупостью» системы тестирования и ее программного интерфейса. С другой стороны, непосредственное использование регулярных выражений в тесте требует от авторов тестов знаний синтаксиса и основных правил составления регулярных выражений, что может быть серьёзной проблемой для некоторой категории авторов тестов. Специально для подобных случаев в системе OpenTEST2 были разработаны так называемые wizard-формы для удобного составления основных наиболее популярных типов регулярных выражений (множество ответов, точность числа, различные флаги проверки регистров, маски пропущенных букв и др.) с помощью удобного и простого веб-интерфейса. При этом автору теста не обязательно знать основы построения регулярных выражений, достаточно лишь заполнить простую веб-форму, которая автоматически сгенерирует соответствующее регулярное выражение. Также автор теста может с помощью этой же формы отредактировать созданное в ней регулярное выражение.

Рис. 1. Форма для создания\редактирования регулярного выражения в OpenTEST2

Как видно из рисунка, автору теста предоставляется удобный и простой интерфейс для создания или редактирования регулярного выражения. Автору теста не нужно знать технические подробности и синтаксис написания регулярных выражений, ему достаточно лишь ввести значения ответов, расставить различные опции обработки ответов и при необходимости ввести маски подстановок в всплывающем окне.

Таким образом, в системе OpenTEST2 технология описания свободноконструируемых ответов с помощью регулярных выражений позволяет конечным пользователям (авторам тестов) легко и удобно составлять тестовые задания с помощью форм, а для продвинутых пользователей также остаётся возможность вручную ввести регулярное выражение любой сложности и с любой функциональностью. А благодаря полнофункциональной поддержке языком PHP стандарта регулярных выражений Perl, надёжность и универсальность данной схемы является несомненным преимуществом системы тестирования.

Литература

1. Напрасник С.В., Цимбалюк Е.С., Шкиль А.С. Компьютерная система тестирования знаний OpenTEST 2.0 // Сборник научных трудов 10-й международной конференции УАДО Образование и виртуальность–2006. – Харьков-Ялта.– 2006.– Харьков: ХНУРЭ.– 2006.– С. 454–461.

подписка на RSS комментариев

Комментарии are closed

Тестирование знаний - наша работа