Skip to main content

A text-to-intent parsing framework.

Project description

License

Adapt Intent Parser

The Adapt Intent Parser is a flexible and extensible intent definition and determination framework. It is intended to parse natural language text into a structured intent that can then be invoked programatically.

This repository contains a OVOS pipeline plugin and bundles a fork of the original adapt-parser from the defunct MycroftAI

Examples

Executable examples can be found in the examples folder.

Intent Modelling

In this context, an Intent is an action the system should perform. In the context of Pandora, we’ll define two actions: List Stations, and Select Station (aka start playback)

With the Adapt intent builder:

list_stations_intent = IntentBuilder('pandora:list_stations')\
    .require('Browse Music Command')\
    .build()

For the above, we are describing a “List Stations” intent, which has a single requirement of a “Browse Music Command” entity.

play_music_command = IntentBuilder('pandora:select_station')\
    .require('Listen Command')\
    .require('Pandora Station')\
    .optionally('Music Keyword')\
    .build()

For the above, we are describing a “Select Station” (aka start playback) intent, which requires a “Listen Command” entity, a “Pandora Station”, and optionally a “Music Keyword” entity.

Entities

Entities are a named value. Examples include: Blink 182 is an Artist The Big Bang Theory is a Television Show Play is a Listen Command Song(s) is a Music Keyword

For my Pandora implementation, there is a static set of vocabulary for the Browse Music Command, Listen Command, and Music Keyword (defined by me, a native english speaker and all-around good guy). Pandora Station entities are populated via a "List Stations" API call to Pandora. Here’s what the vocabulary registration looks like.

def register_vocab(entity_type, entity_value):
    pass
    # a tiny bit of code 

def register_pandora_vocab(emitter):
    for v in ["stations"]:
        register_vocab('Browse Music Command', v)

    for v in ["play", "listen", "hear"]:
        register_vocab('Listen Command', v)

    for v in ["music", "radio"]:
        register_vocab('Music Keyword', v)

    for v in ["Pandora"]:
        register_vocab('Plugin Name', v)

    station_name_regex = re.compile(r"(.*) Radio")
    p = get_pandora()
    for station in p.stations:
        m = station_name_regex.match(station.get('stationName'))
        if not m:
            continue
        for match in m.groups():
            register_vocab('Pandora Station', match)

Reporting Issues

It's often difficult to debug issues with adapt without a complete context. To facilitate simpler debugging, please include a serialized copy of the intent determination engine using the debug dump utilities.

from ovos_adapt.engine import IntentDeterminationEngine

engine = IntentDeterminationEngine()
# Load engine with vocabulary and parsers

import ovos_adapt.tools.debug as atd

atd.dump(engine, 'debug.ovos_adapt')

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ovos-adapt-parser-0.1.0a2.tar.gz (29.3 kB view details)

Uploaded Source

Built Distribution

ovos_adapt_parser-0.1.0a2-py3-none-any.whl (35.1 kB view details)

Uploaded Python 3

File details

Details for the file ovos-adapt-parser-0.1.0a2.tar.gz.

File metadata

  • Download URL: ovos-adapt-parser-0.1.0a2.tar.gz
  • Upload date:
  • Size: 29.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.9.20

File hashes

Hashes for ovos-adapt-parser-0.1.0a2.tar.gz
Algorithm Hash digest
SHA256 b855bc8a29fcd698b7a53e1e2313c51a1f1482a5d7af818ac5fac463b87e774f
MD5 da32dd20a3fa24d53f071a13b7f3bc27
BLAKE2b-256 ad3c99b808233b07d7bf2825a554edfd2102bcc53ec452fc27fbe6ae979c5a10

See more details on using hashes here.

File details

Details for the file ovos_adapt_parser-0.1.0a2-py3-none-any.whl.

File metadata

File hashes

Hashes for ovos_adapt_parser-0.1.0a2-py3-none-any.whl
Algorithm Hash digest
SHA256 733598c5a99844c96a2b082e0dc7b59fd48230fdc98178d95c61174710e795a4
MD5 c768f3a25216dbae56ed195f96af0d2d
BLAKE2b-256 e0229b72a0eee4bf4d3675a3add8cff2a927457ae18d5f0f95d74f428b923959

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page