A text-to-intent parsing framework.
Project description
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file ovos-adapt-parser-1.0.4.tar.gz
.
File metadata
- Download URL: ovos-adapt-parser-1.0.4.tar.gz
- Upload date:
- Size: 37.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.20
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8723a0fe602c37c3ba3db8d043766c8a86813b74fc2c5f95aba1c29278a8c81e |
|
MD5 | de0a879c8c66e2c517b18a8656b433ad |
|
BLAKE2b-256 | 7e8e5dba267e455973eb1589211a500ce98abdc03d407235b56fb0ea0d106a5b |
File details
Details for the file ovos_adapt_parser-1.0.4-py3-none-any.whl
.
File metadata
- Download URL: ovos_adapt_parser-1.0.4-py3-none-any.whl
- Upload date:
- Size: 33.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.20
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 05222259bfea787eabc036318fdefbd6976d9ca67b688b77c4ab42f5f62f23ff |
|
MD5 | b96abbb55c4746f0e6e3df19ad187c85 |
|
BLAKE2b-256 | 91857df742803e257151a47e7107dea84e734de02e900042f7b0802648b58fbd |