Skip to main content

Named entities

A named entity is a word or a phrase that distinguishes an object or a phenomenon among other objects or phenomena of a similar type. These can be names of cities, countries, currencies.

tip
From the point of view of the script code, a named entity is a named pattern defined using a named entity dictionary.

NLU rules can include named entities just like any other named pattern, and so recognize named entity dictionary entries in user requests.

Declaration

Follow the following steps to declare a pattern as a named entity. We shall be using a fragment of a cities dictionary for this example, placed into dicts/cities.csv.

1;New York City, New York, NY;{"name": "New York", "lat": 40.71427, "lon": -74.00597}
  1. Import the named entity dictionary into the .sc script file via the require tag:
require: dicts/cities.csv
name = Cities
var = Cities
  1. Define an entity converter in one of the .js files or init blocks:
$global.cityConverter = function($parseTree) {
var id = $parseTree.Cities[0].value;
return Cities[id].value;
};
tip
Using converters is optional, but it simplifies accessing values associated with the entities in the dictionary.
  1. Declare a named pattern using a special $entity pattern element. Pass the named entity dictionary name in angle brackets and the converter name as a parameter after ||:
patterns:
$city = $entity<Cities> || converter = cityConverter

How to use

Consider the following state that will trigger on requests with the $city entity mentioned:

state: City
q!: * $city *

On an example request I come from New York, information on this entity will be contained in the $parseTree:

{
"city": [
{
// Supplementary keys: tag, pattern, etc.
"value": {
"name": "New York",
"lat": 40.71427,
"lon": -74.00597
}
}
],
"_city": {
"name": "New York",
"lat": 40.71427,
"lon": -74.00597
}
}
tip
The <pattern_name> key contains detailed information on all entities recognized in the request, while the _<pattern_name> contains only the value of the first such entity.

The value differs based on whether or not a converter is defined for the entity:

  • If a converter is present, the value it returns is saved in $parseTree.
  • If there is no converter, only the entity ID is saved.