Работа с макросами

Использование макросов в выражениях

Чтобы использовать макрос в PDL- или SRL-выражении, наберите имя макроса в качестве первого аргумента функции макроса. Правила именования макроса такие же, как и правила составления имен колонок. Убедитесь, что в PDL-выражении вы используете макросы PDL, а в SRL-выражении – макросы SRL.

Например, если вы создали PDL-макрос MyMacro, то в своем PDL-выражении вы будете ссылаться на макрос MyMacro, используя функцию PDL macro(MyMacro).

Предположим, что PDL-выражение для MyMacro представляло собой простой поиск слова, например "dog". В этом случае выражение macro(MyMacro) будет эквивалентно dog. Оба выражения будут находить одни и те же записи, поскольку в этом случае макрос – ни что иное, как сохраненное выражение.

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

Выполнение узлов с выражениями, содержащими макросы

PolyAnalyst не выполняет автоматически заново тот узел, который содержит выражение, которое ссылается на макрос, при каждом изменении этого макроса. Вам нужно самостоятельно заново выполнять узлы, которые ссылаются на макрос, каждый раз, когда вы изменяете этот макрос.

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

В PDL имеются функции macro и var, которые позволяют вам использовать соответственно макросы и переменные в ваших PDL-выражениях. Эти типы функций часто используются для сокращения ваших поисковых запросов.

Макросы и переменные могут использоваться при решении ряда задач. В частности, использование макросов и переменных упрощает повторное использование компонентов поисковых запросов, которые вы и ваша команда часто используют в ходе анализа. Более того, поскольку выражения PDL, написанные в таксономии, иногда могут достигать больших размеров, использование макросов и переменных помогает сжать выражения до более читаемого формата. Это позволяет использовать несколько выражений (и легко им управлять) в более крупных таксономиях.

Макросы и переменные в проектах автоматически экспортируются вместе с самим проектом. Макросы сервера и пользователя автоматически экспортируются только в том случае, когда пользователь определяет это в настройках. Для этого в настройках Аналитического клиента необходимо выбрать вкладку Настройки проекта, в списке опций слева выбрать пункт Выполнение.

clone macros new.rus

Пункт меню Если макрос/переменная отсутствует, то содержит несколько опций. Вы можете использовать макросы/переменные пользователя или сервера и клонировать макросы/переменные пользователя или сервера, выбрав соответствующий пункт меню.

Функция macro

Функции PDL macro или SRL macro позволяют использовать макросы в выражениях и сокращать поисковые запросы.

Синтаксис функции macro(имя,аргументы). Вы можете использовать пробелы между аргументами, например macro (x, y, z). В определении макроса можно использовать различное число аргументов (через многоточие).

Рассмотрим пример работы функции macro. Допустим, имеется макрос со следующими параметрами:

Имя макроса: test

Аргументы: x; y; z…​

Расширение: pattern(x, z, y)

Команда: macro(dog, cat, mouse, horse, cow)

Результат: pattern(dog, mouse, horse, cow, cat)

Здесь dog отображается в первом аргументе (x), cat – во втором аргументе (y), а оставшиеся аргументы заменяют z.

Функция var

Синтаксис функции var – var(имя переменной).

Например, если у вас есть переменная с именем myvar, вы можете использовать его в PDL-выражении: var(myvar).

Для получения подробной информации см. разделы по функциям SRL var и PDL var.

Замещение колонок по умолчанию переменными и макросами

Выражения с макросами и переменными применяются к колонке на основе того, как именно используется макрос или переменная.

Например, если макрос используется внутри категории таксономии, то макрос сравнивается с колонкой, определенной свойствами категории таксономии.

Однако, вы можете изменить части выражения макроса и применять их к разным колонкам внутри исходного массива данных. По умолчанию, каждый компонент PDL-выражения в макросе применяется к контекстуально-определенной колонке. Это обозначается использованием символа @, после которого следует имя колонки. Если имя колонки содержит пробелы или прочие специальные символы, то имя колонки нужно заключить в [квадратные скобки]. Если пробелом или специальных символов нет, то использование квадратных скобок не обязательно. Например:

(слово или слово)@колонка.

(слово и не другое слово)@[Колонка с пробелами в названии].

Если выражение не предназначено для применения к колонкам, за исключением контекстно-определенных колонок, то нет необходимости явно добавлять модификатор @имя колонки. Данный модификатор добавляется неявно. В действительности его следует добавлять только тогда, когда вы планируете отклониться от стандартного поведения или применить выражение полностью или частично к некоторой колонке, за исключением контекстно определенной колонки по умолчанию.

Например, если категория таксономии настроена на поиск колонки, названной Колонка1, то независимо от того, укажете ли вы @Колонка1 в конце PDL-выражения в данной категории, PolyAnalyst будет искать Колонку1 при оценке PDL-выражения.

Однако, если вы хотите найти другую колонку, вы можете написать что-то вроде (мое выражение)@Другое имя колонки.

Модификатор @колонка распределяется по операндам PDL-выражения.

Например, (слово1 или слово2)@колонка эквивалентно выражению слово1@колонка или слово2@колонка, поскольку модификатор @колонка применяется дистрибутивно.

При определении колонок, к которым применяются части PDL-выражений, необходимо учитывать несколько моментов:

  1. ссылки на колонки применяются только к тем колонкам, ссылки на которые отсутствуют;

  2. ссылки на колонки не заменяют те колонки, ссылки на которые присутствуют.

Другими словами, наблюдается неоднозначное поведение относительно того, как модификатор колонки, который применяется к полному выражению, применяется к его частям. В особенности наблюдается некоторая неоднозначность в том, что происходит, если вы работаете с таким выражением, как например (слово1@колонка1)@колонка2. Какую колонку нужно найти? Поскольку слово1 явно ссылается на колонку1, используется колонка1, а не колонка2. Другими словами, в этом случае колонка1 имеет приоритет над колонкой 1. Выражение (слово1)@колонка2 эквивалентно выражению слово1@колонка2 после распределения, поскольку на слово 1 ссылки не было (не было явного квалификатора/модификатора, который определял колонку как искомую). Например:

  • (термин1@колонка1 и термин2)@колонка2 означает термин1@колонка1 и термин2@колонка2

  • ((термин1@колонка1 и термин2)@колонка2 и термин3)@колонка3 означает термин1@колонка1 и термин2@колонка2 и термин3@колонка3

  • ((термин1@колонка1 и термин2)@колонка2)@колонка3 означает термин1@колонка1 и термин2@колонка2