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 bylast.voc - A digit or higher ordinal:
"option 7": matched byovos-number-parserif 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:
- Fuzzy match: rapidfuzz
WRatiosimilarity against all options. Returns immediately if score ≥min_conf(default0.65). - Last-option vocab: locale-aware
last.vocwords ("last", "final", "letzte", …). Returns the final option. - Ordinal/cardinal vocab: locale files
first.voc…tenth.vocandone.voc…ten.voc. Longest matching phrase wins to avoid false positives (e.g. "one" in "second one"). - 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)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| ovos_option_matcher_fuzzy_plugin-0.0.3a1.tar.gz | 27.1 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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.