Contexto de habilidades e idioma da anotação de entrada

Este artigo é a documentação de referência para o contexto de habilidade e a sintaxe de entrada. É uma descrição completa da linguagem de expressão usada para construir caminhos para nós em um documento enriquecido.

As habilidades da IA do Azure Search podem usar e enriquecer os dados provenientes da fonte de dados e da saída de outras habilidades. O conjunto de trabalho de dados que representa o estado atual do trabalho do indexador no documento atual começa com os dados brutos sendo recebidos da fonte de dados e é enriquecido progressivamente com os dados de saída de cada iteração de habilidade. Esses dados são organizados internamente em uma estrutura do tipo árvore que pode ser consultada para ser usada como entradas de habilidades ou para serem adicionados ao índice. Os nós da árvore podem ser valores simples, como cadeias de caracteres e números, matrizes ou objetos complexos e até arquivos binários. Até mesmo valores simples podem ser enriquecidos com informações estruturadas adicionais. Por exemplo, uma cadeia de caracteres pode ser anotada com informações adicionais armazenadas abaixo dela na árvore de enriquecimento. As expressões usadas para consultar essa estrutura interna usam uma sintaxe sofisticada que é detalhada neste artigo. A estrutura de dados enriquecida pode ser inspecionada nas sessões de depuração. Expressões que consultam a estrutura também podem ser testadas nas sessões de depuração.

No artigo, usaremos os dados enriquecidos a seguir como exemplo. Esses dados são típicos do tipo de estrutura que você obterá ao enriquecer um documento usando um conjunto de habilidades com o OCR, a extração de frases-chave, a tradução de texto, a detecção de idioma, as habilidades de reconhecimento de entidade e uma habilidade personalizada do gerador de token.

Caminho Valor
document
merged_content "Estudo do BMN 110 em pacientes pediátricos"…
  keyphrases
   [0] "Estudo do BMN"
   [1] "Síndrome"
   [2] "Pacientes pediátricos"
   ...
  locations
   [0] "IVA"
  translated_text "Étude de BMN 110 chez les patients pédiatriques"…
  entities
   [0]
    category "Organização"
    subcategory null
    confidenceScore 0,72
    length 3
    offset 9
    text "BMN"
   ...
  organizations
   [0] "BMN"
  language "en"
normalized_images
  [0]
   layoutText ...
   text
    words
     [0] "Estudo"
     [1] "do"
     [2] "BMN"
     [3] "110"
     ...
  [1]
   layoutText ...
   text
    words
     [0] "it"
     [1] "é"
     [2] "certamente"
     ...
    ...
  ...

Raiz do documento

Todos os dados estão sob um elemento raiz, para o qual o caminho é "/document". O elemento raiz é o contexto padrão para as habilidades.

Caminhos simples

Os caminhos simples por meio do documento enriquecido interno podem ser expressos com tokens simples separados por barras. Essa sintaxe é semelhante à especificação do Ponteiro JSON.

Propriedades de objeto

As propriedades de nós que representam objetos adicionam valores à árvore sob o nome da propriedade. Esses valores podem ser obtidos pela adição do nome da propriedade como um token separado por uma barra:

Expression Valor
/document/merged_content/language "en"

Os tokens de nomes da propriedade diferenciam maiúsculas de minúsculas.

Índice de item de matriz

Os elementos específicos de uma matriz podem ser referenciados usando o índice numérico como um nome de propriedade:

Expression Valor
/document/merged_content/keyphrases/1 "Syndrome"
/document/merged_content/entities/0/text "BMN"

Sequências de escape

Há dois caracteres que têm significado especial e precisarão ser seguidos por caracteres de escape se aparecerem em uma expressão e precisarem ser interpretados no estado em que se encontram em vez do significado especial: '/' e '~'. Esses caracteres precisam ser seguidos por caracteres de escape como '~0' e '~1', respectivamente.

Enumeração de matriz

Uma matriz de valores pode ser obtida com o token '*':

Expression Valor
/document/normalized_images/0/text/words/* ["Study", "of", "BMN", "110" ...]

O token '*' não precisa estar no final do caminho. É possível enumerar todos os nós correspondentes a um caminho com uma estrela no meio ou com várias estrelas:

Expression Valor
/document/normalized_images/*/text/words/* ["Study", "of", "BMN", "110" ... "it", "is", "certainly" ...]

Este exemplo retorna uma lista simples de todos os nós correspondentes.

É possível manter mais estrutura e obter uma matriz separada para as palavras de cada página usando um token '#' em vez do segundo token '*':

Expression Valor
/document/normalized_images/*/text/words/# [["Study", "of", "BMN", "110" ...], ["it", "is", "certainly" ...] ...]

O token '#' expressa que a matriz deve ser tratada como um só valor em vez de ser enumerada.

Como enumerar matrizes no contexto

Geralmente, é útil processar cada elemento de uma matriz isoladamente e ter um conjunto diferente de entradas e saídas de habilidades para cada um. Isso pode ser feito com a definição do contexto da habilidade como uma enumeração em vez do "/document" padrão.

No exemplo a seguir, usamos uma das expressões de entrada usadas antes, mas com um contexto diferente que altera o valor resultante.

Context Expression Valores
/document/normalized_images/* /document/normalized_images/*/text/words/* ["Study", "of", "BMN", "110" ...]
["it", "is", "certainly" ...]
...

Para essa combinação de contexto e entrada, a habilidade será executada uma vez para cada imagem normalizada: uma vez para "/document/normalized_images/0" e outra para "/document/normalized_images/1". Os dois valores de entrada correspondentes a cada execução de habilidade são detalhados na coluna de valores.

Ao enumerar uma matriz no contexto, todas as saídas que a habilidade produz também serão adicionadas ao documento como enriquecimentos do contexto. No exemplo acima, uma saída chamada "out" terá os valores para cada execução adicionados ao documento em "/document/normalized_images/0/out" e "/document/normalized_images/1/out", respectivamente.

Valores literais

As entradas de habilidades podem usar valores literais como entradas em vez de valores dinâmicos consultados no documento existente. Isso pode ser feito com o uso do sinal de igual como prefixo no valor. Os valores podem ser números, cadeias de caracteres ou boolianos. Os valores de cadeias de caracteres podem ser colocados entre aspas simples ' ou duplas ".

Expression Valor
=42 42
=2.45E-4 0.000245
="some string" "some string"
='some other string' "some other string"
="unicod\u0065" "unicode"
=false false

Expressões compostas

É possível combinar valores usando operadores unários, binários e ternários. Os operadores podem combinar valores literais e valores resultantes da avaliação do caminho. Quando usados dentro de uma expressão, os caminhos devem ser incluídos entre "$(" e ")".

Booliano não '!'

Expression Valor
=!false true

Negativo '-'

Expression Valor
=-42 -42
=-$(/document/merged_content/entities/0/offset) -9

Adição '+'

Expression Valor
=2+2 4
=2+$(/document/merged_content/entities/0/offset) 11

Subtração '-'

Expression Valor
=2-1 1
=$(/document/merged_content/entities/0/offset)-2 7

Multiplicação '*'

Expression Valor
=2*3 6
=$(/document/merged_content/entities/0/offset)*2 18

Divisão '/'

Expression Valor
=3/2 1.5
=$(/document/merged_content/entities/0/offset)/3 3

Módulo '%'

Expression Valor
=15%4 3
=$(/document/merged_content/entities/0/offset)%2 1

Menor que, menor que ou igual a, maior que e maior que ou igual a '<''<=''>''>='

Expression Valor
=15<4 false
=4<=4 true
=15>4 true
=1>=2 false

Igualdade e não igualdade '==''!='

Expression Valor
=15==4 false
=4==4 true
=15!=4 true
=1!=1 false

Operações lógicas e, ou e ou exclusivo '&&''||''^'

Expression Valor
=true&&true true
=true&&false false
=true||true true
=true||false true
=false||false false
=true^false true
=true^true false

Operador ternário '?:'

É possível dar a uma entrada valores diferentes com base na avaliação de uma expressão booliana usando o operador ternário.

Expression Valor
=true?"true":"false" "true"
=$(/document/merged_content/entities/0/offset)==9?"nine":"not nine" "nine"

Parênteses e prioridade do operador

Os operadores são avaliados com prioridades que correspondem às convenções usuais: operadores unários; depois, multiplicação, divisão e módulo; em seguida, adição e subtração; depois, comparação; em seguida, igualdade e, por fim, operadores lógicos. As regras de associatividade comuns também se aplicam.

Os parênteses podem ser usados para alterar ou remover a ambiguidade da ordem de avaliação.

Expression Valor
=3*2+5 11
=3*(2+5) 21

Confira também