Skip to main content

Genja Introduction

Introduction

Genja's template syntax is based on Jinja. All concepts described in Jinja's documentation work in Genja as well. Genja provides additional functionality to support:

  • complex morphology (declension, agreement in gender and number, specific handling of numerals etc.).
  • retrieving entity names and other attributes from Geneea Knowledge Base (GKB)
  • domain-specific macros and filters to make template writing for given domain easier

To generate text from a template, structured data in JSON format must be provided.

Domains

We use domains to specify the set of filters, pre/post processing and the GKB bucket used. There are two generic domains:

  • general_en - domain for general English texts
  • general_cs - domain for general Czech texts

In addition, there might be customer-specific domains.

Template Basics

The basic building blocks of a template are:

  • Text. Genja ignores anything that is not enclosed in its special marks ({% ... %}, {{ ... }}, {# ... #}). The text can be XML/HTML or any text-based format.
  • Variables and expressions. Using {{ var }} you can access variable var from the input data. See Referring to JSON data below. Within expressions, you can use filters to transform their input. genja_filters are delimited by a pipe and can be used in sequences, for example {{ priceDiff|abs|round }}.
  • Statements using the {% ... %} syntax. These include if statements, for loops, support for alternatives, and macro declarations. See genja_statements for more information.
  • Comments using the {# ... #} syntax. Text inside comments is ignored and serves for documentation purposes.

Referring to JSON data

Let's say we have JSON data looking like this:

"previous_elections": {
"year": 2014,
"type": "regular",
"parties": [ ... ]
}

then this template:

The last election took place in {{previous_elections.year}}.

generates:

"The last election took place in 2014."