Skip to main content

Fuzzy-match OptionMatcher agent plugin for OpenVoiceOS

Project description

ovos-option-matcher-fuzzy-plugin

Fuzzy-match OptionMatcherEngine plugin for OpenVoiceOS.

Resolves a free-form user utterance to one of a predefined set of option slots — the kind of matching needed by OVOSSkill.ask_selection. Supports 15 languages out of the box via locale vocab files, with no required dependency on a number parser.

Install

pip install ovos-option-matcher-fuzzy-plugin

With optional numeric-fallback support (handles positions above 10 and raw digit references):

pip install "ovos-option-matcher-fuzzy-plugin[number-parser]"

How a skill uses it

Skills call self.ask_selection(options, dialog=...). The framework speaks the options to the user, collects a spoken response, then calls FuzzyOptionMatcherPlugin.match_option automatically. No skill code references the plugin directly.

from ovos_workshop.skills.ovos import OVOSSkill

class MySkill(OVOSSkill):
    def handle_intent(self, message):
        choice = self.ask_selection(
            ["play jazz", "play rock", "play classical"],
            dialog="what would you like"
        )
        # choice is one of the list elements, or None if nothing matched
        if choice:
            self.speak_dialog("you_chose", {"choice": choice})

The user can answer with:

  • A direct name: "rock music" — matched by fuzzy scoring
  • An ordinal or cardinal: "the second one", "number two", "two" — matched by locale vocab
  • A last-position reference: "the last one" — matched by last.voc
  • A digit or higher ordinal: "option 7" — matched by ovos-number-parser if installed

ask_selection passes self.lang (canonical BCP-47, e.g. en-US) to the plugin.

How it works

Resolution runs in four stages — first match wins:

  1. Fuzzy match — rapidfuzz WRatio similarity against all options. Returns immediately if score ≥ min_conf (default 0.65).
  2. Last-option vocab — locale-aware last.voc words ("last", "final", "letzte", …). Returns the final option.
  3. Ordinal/cardinal vocab — locale files first.voctenth.voc and one.vocten.voc. Longest matching phrase wins to avoid false positives (e.g. "one" in "second one").
  4. Numeric fallbackovos-number-parser (optional). Handles digits and ordinals above ten.

Returns None if nothing matches.

Direct usage

from ovos_option_matcher_fuzzy import FuzzyOptionMatcherPlugin

matcher = FuzzyOptionMatcherPlugin()
options = ["play jazz music", "play rock music", "play classical music"]

matcher.match_option("jazz music", options)                   # "play jazz music"
matcher.match_option("the second one", options)               # "play rock music"
matcher.match_option("three", options)                        # "play classical music"
matcher.match_option("the last option", options)              # "play classical music"
matcher.match_option("die erste", options, lang="de-DE")      # "play jazz music"
matcher.match_option("xyzzy quux", options)                   # None

# Custom confidence threshold
strict = FuzzyOptionMatcherPlugin(config={"min_conf": 0.85})

Note: when the plugin is loaded automatically by ask_selection, it is instantiated with no config, so min_conf is always 0.65. Pass a custom value only when instantiating directly.

Supported languages

Ordinal, cardinal, and last-word vocab is provided for:

Tag Language
ca-ES Catalan
cs-CZ Czech
da-DK Danish
de-DE German
en-US English
es-ES Spanish
eu-ES Basque
fr-FR French
gl-ES Galician
it-IT Italian
nl-NL Dutch
pl-PL Polish
pt-BR Portuguese (Brazil)
pt-PT Portuguese (Portugal)
sv-SE Swedish

Falls back to the language prefix (de-DEde) then en-US if a locale file is absent. Translations are contributed via the OVOS GitLocalize platform.

Entry point

Registered under opm.agents.option_matcher:

ovos-option-matcher-fuzzy-plugin = ovos_option_matcher_fuzzy:FuzzyOptionMatcherPlugin

This plugin is the default when no ask_selection_plugin is configured. See docs/integration.md for how to switch plugins per-skill or globally.

License

Apache 2.0

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_option_matcher_fuzzy_plugin-0.0.1.tar.gz (27.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

File details

Details for the file ovos_option_matcher_fuzzy_plugin-0.0.1.tar.gz.

File metadata

File hashes

Hashes for ovos_option_matcher_fuzzy_plugin-0.0.1.tar.gz
Algorithm Hash digest
SHA256 a6dc637a60f3f5d1b321bc4e7d4f1c78641ab072b671e977f977a47ce71e53bd
MD5 b15dee813437541d4890633a5e1c0bae
BLAKE2b-256 84d812efbdfaf8e0293871b9d59005fcfe6564a9e2392fa4f223c95331a158d9

See more details on using hashes here.

File details

Details for the file ovos_option_matcher_fuzzy_plugin-0.0.1-py3-none-any.whl.

File metadata

File hashes

Hashes for ovos_option_matcher_fuzzy_plugin-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 e252a7ce16a7f2406fb48d66528c5afde117445a67c2b8f1a648b1b97db30cb0
MD5 d8e152b9f9a1617a168eb0fb0fd56b35
BLAKE2b-256 97e99ca3364f347690df10f5457d84b60e515c0bcb97208e7cd36866e716114b

See more details on using hashes here.

Supported by

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