Типы данных и функции преобразования типа данных

В XPDL, как и в SRL, поддерживаются следующие типы данных: число, целое число, дата, булево значение, строка, текст. Для более подробной информации см. раздел «Типы значений в SRL».

Тип данных определяет, какие операторы можно к ним применить. Так, арифметические вычисления можно производить над числовыми, но не над строковыми аргументами. И наоборот, только строковые аргументы позволяют создавать подстроки и делать замены.

Для преобразования результатов в требуемый тип данных можно использовать специальные функции. Строка является типом данных по умолчанию.

Примечания

  1. Если строка содержит только числа, которые не заключены в двойные кавычки (100; 2.5), то она считается числом. Если в строке присутствуют другие знаки или если числа заключены в кавычки ("100x", 100x, name, "100"; "2.5"), то это строковый тип данных.

  2. Ссылки на именованные группы считаются строковыми данными. Чтобы производить над ними арифметические операции, необходимо преобразовать их в числовой тип, используя функции преобразования типа.

Функции num(), int(), text(), и str() преобразуют аргумент в число, целое число, текст или строку соответственно. Функция int() преобразует аргументы в целые числа. Если аргумент не является целым числом, то десятичная часть дроби отбрасывается. Функция textspan() преобразует аргумент в подстроку с сохранением оригинального форматирования и пунктуации. Все функции принимают один аргумент.

Синтаксис

num(аргумент)

int(аргумент)

str(аргумент)

text(аргумент)

textspan(аргумент),

где «аргумент» — это форматируемый аргумент.

Функция text() принимает опциональный именованный параметр match:=range, который позволяет возвращать значение аргумента в виде подстроки текста с сохранением оригинального форматирования и пунктуации. Тот же результат можно получить при помощи функции textspan(). Будет отличаться только формат вывода: text() выводит результат в формате текста, а textspan() - в формате строки.

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

Пример

Правило ниже извлекает числа и преобразует их в различный тип данных:

xpdl format func type 1 rus
Фрагмент правила
 rule: extract_numbers
 {
 query: {number()}:num

 result: По умолчанию = $num
 attribute: Число = num($num)
 attribute: Целое число = int($num)
 }

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

xpdl format func type 2 rus

Пример: Найти номер этажа

Следующее правило находит номера этажей, которые могут быть записаны разными способами, например: первый этаж, 1 этаж или 1-ый этаж. Чтобы унифицировать эти значения, можно использовать функцию toint().

xpdl format func toint rus
Фрагмент правила
  rule: floor
 {
 query: {phrase(0, {lemma(numeral)}:floor, этаж)}:match

 result: Результат = $match
 attribute: Этаж = toint($floor)
 }

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

xpdl format func toint output rus

Пример: Найти предмет договора

Следующее правило находит предмет договора и выводит результат с сохранением исходного форматирования, но в колонки разного типа, при помощи функций textspan() и text() с параметром match:=range:

xpdl format func textspan rus
Фрагмент правила
 rule: предмет_договора
 {
 query: {follow(10, "предмет договора", position(1, "2", scope:=sentence), match:=range)}:match

 result: Без форматирования = $match
 attribute: Предмет договора_строка = textspan($match)
 attribute: Предмет договора_текст = text($match, match:=range)
 }

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

xpdl format func textspan output rus

Чтобы посмотреть на форматирование полученного результата, нужно создать узел «Производная таблица». В отчете этого узла видно, что в колоке «Без форматирования» результат представлен в виде сплошного текста:

xpdl format func textspan no formating rus

А в колонке «Предмет договора_строка» видно, что сохранено исходное разделение на абзацы:

xpdl format func textspan formated rus

Примечания

  1. Преобразовать тип колонки можно при помощи узла «Модификация колонок».

  2. Дополнительную информацию о типах колонок см. в разделе «Типы колонок».