Source code for dialogy.types.entity.people

"""
.. _PeopleEntity:

People Entity
==============

Provides the entity class for representing number of people in natural language. This entity is obtained via :ref:`DucklingPlugin<DucklingPlugin>`.

Plugin Walkthrough
------------------

.. ipython::

    In [1]: from dialogy.plugins import DucklingPlugin

    In [2]: duckling_plugin = DucklingPlugin(
       ...:     dest="output.entities",
       ...:     dimensions=["people"],
       ...:     locale="en_IN",
       ...:     timezone="Asia/Kolkata",
       ...: )

    In [3]: duckling_plugin.parse("two kids")

Workflow Integration
--------------------

.. ipython::

    In [1]: from dialogy.base import Input
       ...: from dialogy.plugins import DucklingPlugin
       ...: from dialogy.workflow import Workflow

    In [2]: duckling_plugin = DucklingPlugin(
       ...:     dest="output.entities",
       ...:     dimensions=["people"],
       ...:     locale="en_IN",
       ...:     timezone="Asia/Kolkata",
       ...: )

    In [3]: workflow = Workflow([duckling_plugin])

    In [4]: _, output = workflow.run(Input(utterances="two kids"))

    In [5]: output
"""
from __future__ import annotations

from typing import Any, Dict, Optional

import attr

from dialogy import constants as const
from dialogy.types.entity.base_entity import BaseEntity
from dialogy.types.entity.deserialize import EntityDeserializer


[docs]@EntityDeserializer.register(const.PEOPLE) @attr.s class PeopleEntity(BaseEntity): """ A variant of numerical entity which addresses collections of people. Example sentences that contain the entity are: - "N people", where N is a whole number. - "A couple" ~ 2 people. - "I have triplets" ~ 3 children. """ unit = attr.ib(type=str, default="", validator=attr.validators.instance_of(str)) entity_type: Optional[str] = attr.ib(default=const.PEOPLE, order=False)
[docs] @classmethod def from_duckling( cls, d: Dict[str, Any], alternative_index: int, **kwargs: Any ) -> PeopleEntity: value = d[const.VALUE][const.VALUE] return cls( range={const.START: d[const.START], const.END: d[const.END]}, body=d[const.BODY], dim=d[const.DIM], alternative_index=alternative_index, latent=d[const.LATENT], values=[{const.VALUE: value}], unit=d[const.VALUE][const.UNIT], )