Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

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.voc … tenth.voc and one.voc … ten.voc. Longest matching phrase wins to avoid false positives (e.g. "one" in "second one").
  4. Numeric fallback: ovos-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-DE → de) 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

Metadata

Release files for ovos-option-matcher-fuzzy-plugin 0.0.3a1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ovos-option-matcher-fuzzy-plugin 0.0.3a1
File Size Uploaded Provenance
ovos_option_matcher_fuzzy_plugin-0.0.3a1.tar.gz 27.1 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for ovos-option-matcher-fuzzy-plugin 0.0.3a1
File Interpreter ABI Platform
ovos_option_matcher_fuzzy_plugin-0.0.3a1-py3-none-any.whl Python 3 none any Details

Total release size: 107.1 kB

Release files / ovos_option_matcher_fuzzy_plugin-0.0.3a1.tar.gz

Download URL ovos_option_matcher_fuzzy_plugin-0.0.3a1.tar.gz
Size 27.1 kB
Tags Source
SHA-256 checksum
How to use checksums
18368400da229ad4a14b862df63d929d746efeec61cc66c53b23a3dc6e532fdf
BLAKE2b-256 checksum
How to use checksums
cd6ce9a8e2d3045b5b4e610bf5ed1275ef502c4c1b0f436a257f8c657d0418ec
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / ovos_option_matcher_fuzzy_plugin-0.0.3a1-py3-none-any.whl

Download URL ovos_option_matcher_fuzzy_plugin-0.0.3a1-py3-none-any.whl
Size 80.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e462d2fea8987d40865dd14d4b56c756d988f31a50bfb40c3de836371ff04256
BLAKE2b-256 checksum
How to use checksums
138d32411ecdb4dfafdcb9f4b77380fcb9eefd31b04fc613c795f5e46d081306
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Security for ovos-option-matcher-fuzzy-plugin 0.0.3a1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page