

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Ajout de l’automatisation avec Liquid
<a name="sms-custom-templates-step2-automate"></a>

Notre système de modèle personnalisé utilise [Liquid](https://shopify.github.io/liquid/) pour l’automatisation. Il s’agit d’un langage de balisage open source en ligne. Dans Liquid, le texte entre accolades simples et symboles de pourcentage est une instruction ou *balise* qui exécute une opération telle qu’un flux de contrôle ou une itération. Le texte entre accolades doubles est une variable ou un *objet* qui génère sa valeur.

L’utilisation la plus courante de Liquid consistera à analyser les données provenant de votre fichier manifeste d’entrée et à en extraire les variables appropriées pour créer la tâche. Ground Truth génère automatiquement les tâches, sauf si une fonction Lambda de pré-annotation est spécifiée. L’objet `taskInput` renvoyé par Ground Truth ou votre [Pre-annotation Lambda](sms-custom-templates-step3-lambda-requirements.md#sms-custom-templates-step3-prelambda) est l’objet `task.input` de vos modèles.

Les propriétés de votre manifeste d’entrée sont transmises à votre modèle en tant que `event.dataObject`.

**Example objet des données de manifeste**  

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

**Example exemple de code HTML à l’aide des variables**  

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

Notez l’ajout de ` | to_json` à la propriété `labels` ci-dessus. C’est un filtre qui transforme le tableau manifeste d’entrée en représentation JSON du tableau. Les filtres de variables sont expliqués en la section suivante.

La liste suivante comprend deux types de balises Liquid qui peuvent être utiles pour automatiser le traitement des données source de modèle. La sélection de l’un des types de balises suivants vous redirige vers la documentation Liquid.
+ [Contrôle de flux](https://shopify.github.io/liquid/tags/control-flow/) : inclut des opérateurs logiques de programmation tels que `if/else`, `unless` et `case/when`.
+ [Itération](https://shopify.github.io/liquid/tags/iteration/) : vous permet d’exécuter des blocs de code de façon répétée en utilisant des instructions comme les boucles for. 

  Pour un exemple de modèle HTML qui utilise des éléments Liquid pour créer une boucle for, voir [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) dans. GitHub 

Pour obtenir plus d’informations et la documentation, consultez la [page d’accueil de Liquid](https://shopify.github.io/liquid/).

## Filtres de variables
<a name="sms-custom-templates-step2-automate-filters"></a>

Outre les actions et [filtres Liquid](https://shopify.github.io/liquid/filters/abs/) standard, Ground Truth propose quelques filtres supplémentaires. Les filtres sont appliqués en plaçant une barre verticale (`|`) après le nom de la variable, puis en spécifiant un nom de filtre. Les filtres peuvent être associés sous la forme de :

**Example**  

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

### Échappement automatique et échappement explicite
<a name="sms-custom-templates-step2-automate-filters-autoescape"></a>

Par défaut, les entrées seront placées dans une séquence d’échappement HTML pour éviter toute confusion entre le texte de votre variable et le code HTML. Vous pouvez ajouter explicitement le filtre `escape` afin que les personnes qui lisent la source de votre modèle comprennent qu’il s’agit d’un échappement.

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

`escape_once` s’assure que votre code ne sera pas placé dans une seconde séquence d’échappement alors qu’il l’est déjà. Par exemple, afin que &amp; ne devienne pas &amp;amp;.

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

`skip_autoescape` est utile si votre contenu est destiné à être utilisé en tant que code HTML. Par exemple, vous pouvez avoir quelques paragraphes de texte et des images dans les instructions complètes d’un cadre de délimitation.

**Utilisez `skip_autoescape` avec parcimonie**  
La bonne pratique consiste à éviter de transmettre du code fonctionnel ou du balisage avec `skip_autoescape`, sauf si vous êtes absolument certain que vous maîtrisez parfaitement ce qui est transmis. Si vous transmettez l’entrée d’un utilisateur, vous risquez d’exposer vos employés à une attaque de script intersite.

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

`to_json`encodera ce que vous lui transmettez en JSON (JavaScript Object Notation). Si vous lui fournissez un objet, il va le sérialiser.

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

`grant_read_access` prend un URI S3 et l’encode dans une URL HTTPS avec un jeton d’accès de courte durée pour cette ressource. Cela permet de montrer aux employés les objets photo, audio ou vidéo stockés dans des compartiments S3 qui ne sont pas autrement accessibles publiquement.

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

 Le filtre `s3_presign` fonctionne de la même manière que le filtre `grant_read_access`. `s3_presign` prend un URI Amazon S3 et l’encode dans une URL HTTPS avec un jeton d’accès de courte durée pour cette ressource. Cela permet de montrer des objets photo, audio ou vidéo stockés dans des compartiments S3 qui ne sont pas autrement accessibles publiquement aux employés.

**Example des filtres de variables**  
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 d’un modèle de classification automatique.**  
Pour automatiser l’exemple de classification de texte simple, remplacez le texte du tweet par une variable.  
Le modèle de classification de texte se trouve ci-dessous et comprend l’automatisation. Ils changes/additions sont surlignés en gras.  

```
<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>
```
Le texte du tweet de l’exemple précédent est désormais remplacé par un objet. L’objet `entry.taskInput` utilise `source` (ou un autre nom que vous spécifiez dans votre fonction de prétraitement Lambda) comme nom de propriété pour le texte et est inséré directement dans le code HTML puisqu’il se trouve entre accolades doubles.