

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Adicionar automação com o Liquid
<a name="sms-custom-templates-step2-automate"></a>

Nosso sistema de modelo personalizado usa o [Liquid](https://shopify.github.io/liquid/) para automação. Trata-se de uma linguagem de marcação de código aberto em linha. No Liquid, o texto entre chaves simples e símbolos de percentagem é uma instrução ou *tag* que realiza uma operação, como controle de fluxo ou iteração. O texto entre chaves duplas é uma variável ou um *objeto* que gera seu valor.

O uso mais comum do Liquid será para analisar os dados provenientes do arquivo de manifesto de entrada e extrair as variáveis relevantes para criar a tarefa. O Ground Truth gera automaticamente as tarefas, a menos que uma pré-anotação Lambda seja especificada. O objeto `taskInput` retornado pelo Ground Truth ou o [Pre-annotation Lambda](sms-custom-templates-step3-lambda-requirements.md#sms-custom-templates-step3-prelambda) é o objeto `task.input` nos modelos.

As propriedades no manifesto de entrada são passadas para o template como `event.dataObject`.

**Example objeto de dados do manifesto**  

```
{
  "source": "This is a sample text for classification",
  "labels": [ "angry" , "sad" , "happy" , "inconclusive" ],
  "header": "What emotion is the speaker feeling?"
}
```

**Example amostra de HTML usando variáveis**  

```
<crowd-classifier 
  name='tweetFeeling'
  categories='{{ task.input.labels | to_json }}'
  header='{{ task.input.header }}' >
<classification-target>
  {{ task.input.source }}
</classification-target>
```

Observe a adição de ` | to_json` à propriedade `labels` acima. Esse é um filtro que transforma a matriz do manifesto de entrada em uma representação JSON da matriz. Os filtros de variáveis são explicados na próxima seção.

A lista a seguir inclui dois tipos de tags líquidas que podem ser úteis para automatizar o processamento de dados de entrada em modelos. Se você selecionar um dos seguintes tipos de tags, será redirecionado para a documentação do Liquid:
+ [Fluxo de controle](https://shopify.github.io/liquid/tags/control-flow/): inclui operadores lógicos de programação como `if/else`, `unless` e `case/when`.
+ [Iteração](https://shopify.github.io/liquid/tags/iteration/): permite que você execute blocos de código repetidamente usando instruções como for loops. 

  Para ver um exemplo de um modelo HTML que usa elementos Liquid para criar um loop for, consulte [translation-review-and-correction.liquid.html](https://github.com/aws-samples/amazon-sagemaker-ground-truth-task-uis/blob/8ae02533ea5a91087561b1daecd0bc22a37ca393/text/translation-review-and-correction.liquid.html) em. GitHub 

Para obter mais informações e acessar a documentação, visite a página inicial [Liquid](https://shopify.github.io/liquid/).

## Filtros de variáveis
<a name="sms-custom-templates-step2-automate-filters"></a>

Além dos[ filtros e ações padrão do Liquid](https://shopify.github.io/liquid/filters/abs/), o Ground Truth oferece alguns filtros adicionais. Os filtros são aplicados colocando um caractere de barra vertical (`|`) após o nome da variável e, em seguida, especificando um nome do filtro. Os filtros podem ser encadeados na forma de:

**Example**  

```
{{ <content> | <filter> | <filter> }}
```

### Escape automático e escape explícito
<a name="sms-custom-templates-step2-automate-filters-autoescape"></a>

Por padrão, as entradas terão escape HTML para evitar confusão entre o texto da variável e o HTML. Você pode adicionar explicitamente o filtro `escape` para tornar mais óbvio para alguém que esteja lendo a origem do seu modelo que o escape está sendo feito.

### escape\_once
<a name="sms-custom-templates-step2-automate-escapeonce"></a>

`escape_once` garante que, se você já tiver escapado seu código, ele não será reexibido além disso. Por exemplo, para que &amp; não se torne &amp;amp;.

### skip\_autoescape
<a name="sms-custom-templates-step2-automate-skipautoescape"></a>

`skip_autoescape` é útil quando seu conteúdo deve ser usado como HTML. Por exemplo, você pode ter alguns parágrafos de texto e algumas imagens nas instruções completas de uma caixa delimitadora.

**Use `skip_autoescape` com moderação**  
A prática recomendada em modelos é evitar transmitir código da função ou marcação com `skip_autoescape`, a menos que você tenha absoluta certeza de que tem o controle rígido sobre o que está sendo transmitido. Se você estiver transmitindo a entrada do usuário, poderá expor seus funcionários a um ataque de Cross Site Scripting.

### to\_json
<a name="sms-custom-templates-step2-automate-tojson"></a>

`to_json`codificará o que você envia para JSON (JavaScript Object Notation). Se você alimentar um objeto, ele será serializado.

### grant\_read\_access
<a name="sms-custom-templates-step2-automate-grantreadaccess"></a>

`grant_read_access` usa um URI do S3 e o codifica em um URL HTTPS com um token de acesso de curta duração para esse recurso. Isso possibilita exibir aos operadores fotos, áudio ou vídeo de objetos armazenados em buckets do S3 que de outra forma não são acessíveis publicamente.

### s3\_presign
<a name="sms-custom-templates-step2-automate-s3"></a>

 O filtro `s3_presign` funciona da mesma forma que o filtro `grant_read_access`. `s3_presign` usa um URI do Amazon S3 e o codifica em um URL HTTPS com um token de acesso de curta duração para esse recurso. Isso possibilita exibir objetos de fotografia, áudio ou vídeo armazenados em buckets do S3 que, de outra forma, não são acessíveis publicamente para operadores.

**Example dos filtros de variáveis**  
Input  

```
auto-escape: {{ "Have you read 'James & the Giant Peach'?" }}
explicit escape: {{ "Have you read 'James & the Giant Peach'?" | escape }}
explicit escape_once: {{ "Have you read 'James &amp; the Giant Peach'?" | escape_once }}
skip_autoescape: {{ "Have you read 'James & the Giant Peach'?" | skip_autoescape }}
to_json: {{ jsObject | to_json }}                
grant_read_access: {{ "s3://amzn-s3-demo-bucket/myphoto.png" | grant_read_access }}
s3_presign: {{ "s3://amzn-s3-demo-bucket/myphoto.png" | s3_presign }}
```

**Example**  
Output  

```
auto-escape: Have you read &#39;James &amp; the Giant Peach&#39;?
explicit escape: Have you read &#39;James &amp; the Giant Peach&#39;?
explicit escape_once: Have you read &#39;James &amp; the Giant Peach&#39;?
skip_autoescape: Have you read 'James & the Giant Peach'?
to_json: { "point_number": 8, "coords": [ 59, 76 ] }
grant_read_access: https://s3.amazonaws.com/amzn-s3-demo-bucket/myphoto.png?{{<access token and other params>}}
s3_presign: https://s3.amazonaws.com/amzn-s3-demo-bucket/myphoto.png?{{<access token and other params>}}
```

**Example de um modelo de classificação automatizado.**  
Para automatizar a amostra de classificação de texto simples, substitua o texto do tweet por uma variável.  
O modelo de classificação de texto está abaixo com automação adicionada. Eles changes/additions estão destacados em negrito.  

```
<script src="https://assets.crowd.aws/crowd-html-elements.js"></script>
<crowd-form>
  <crowd-classifier 
    name="tweetFeeling"
    categories="['positive', 'negative', 'neutral', 'cannot determine']"
    header="Which term best describes this tweet?" 
  >
    <classification-target>
       {{ task.input.source }}
    </classification-target>

    <full-instructions header="Analyzing a sentiment">
      Try to determine the feeling the author 
      of the tweet is trying to express. 
      If none seem to match, choose "other."
    </full-instructions>

    <short-instructions>
      Pick the term best describing the sentiment 
      of the tweet. 
    </short-instructions>

  </crowd-classifier>
</crowd-form>
```
O texto do tweet que estava no exemplo anterior foi substituído por um objeto. O objeto `entry.taskInput` usa `source` (ou outro nome que você especificar no seu Lambda de pré-anotação) como o nome da propriedade para o texto, e ele é inserido diretamente no HTML por estar entre chaves duplas.