Pre-release
This release is a pre-release and may not be stable for production use.
KeywordTemplateMatcher
KeywordTemplateMatcher is a Python library for natural language templates. A template can hold slots, optional phrases, and alternatives. The library expands a template into every sentence it describes, and matches an utterance back to the slot values it filled. Use it to prototype NLU systems, voice assistants, or rule-based query matching.
Features
- Template expansion with:
- Optional phrases (
[optional]) - Alternatives (
(choice1|choice2)) - Slots (
{slot_name})
- Optional phrases (
- Slot substitution from a supplied dictionary
- Fuzzy matching and confidence scoring with
rapidfuzz - A simple template structure that extends to any language or grammar rule
- Built-in integration with
simplematchfor fuzzy slot matching
Installation
pip install keyword-template-matcher
Usage
1. Expand a template with slots
from kw_template_matcher import expand_slots
template = "change [the ]brightness to {brightness_level} and color to {color_name}"
slots = {
"brightness_level": ["low", "medium", "high"],
"color_name": ["red", "green", "blue"]
}
for sentence in expand_slots(template, slots):
print(sentence)
Output:
change the brightness to low and color to red
change brightness to high and color to blue
... (all combinations)
2. Match a template
from kw_template_matcher import TemplateMatcher
matcher = TemplateMatcher()
matcher.add_templates([
"[hello,] (call me|my name is) {name}",
"tell me a [{joke_type}] joke"
])
query = "hello, my name is Alice"
results = matcher.match(query)
for match in results:
print(match)
How it works
Template syntax
| Syntax | Description |
|---|---|
{slot} |
Placeholder to be replaced with values |
[optional] |
Optional word or phrase |
(a|b|c) |
Alternatives - only one is chosen |
Test example templates
templates = [
"[hello,] (call me|my name is) {name}",
"tell me a [{joke_type}] joke",
"play {query} [in ({device_name}|{skill_name}|{zone_name})]"
]
These templates expand to sentences like:
- call me {name}
- hello, my name is {name}
- tell me a {joke_type} joke
- play {query}
- play {query} in {device_name}
Related projects
- OpenVoiceOS/simplematch - the lightweight template parser this library builds on
Contributions
Open an issue or submit a pull request to report a bug or propose an improvement.
Acknowledgements
rapidfuzzfor fast fuzzy matchingsimplematchfor lightweight template parsing
Metadata
Release files for keyword-template-matcher 0.1.8a3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| keyword_template_matcher-0.1.8a3.tar.gz | 11.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| keyword_template_matcher-0.1.8a3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 20.6 kB
Release files / keyword_template_matcher-0.1.8a3.tar.gz
| Download URL | keyword_template_matcher-0.1.8a3.tar.gz |
|---|---|
| Size | 11.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6b9766ff77c6fbe3ae4cb303b0826aea00fc4f585644dfa31907ee51189190fd
|
|
BLAKE2b-256 checksum How to use checksums |
ab51327cbd26f84d1e1a416b0aac34ad8551a14703a0055a7fee17eb9bb83831
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / keyword_template_matcher-0.1.8a3-py3-none-any.whl
| Download URL | keyword_template_matcher-0.1.8a3-py3-none-any.whl |
|---|---|
| Size | 9.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ee97240276e35b00292a7f7d045f8740affada307ce2401c109dd9b4e35e6201
|
|
BLAKE2b-256 checksum How to use checksums |
ea64097151d804e63324f14c47df0b8dbc75b66a5dfc6b445297776c0297970c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|