No project description provided
Project description
fuzzy-multi-dict
fuzzy-multi-dict is a module that provides a hight-flexible structure for storing and accessing information by a string key.
Fuzzy: access by key is carried out even if there are mistakes (missing/extra/incorrect character) in the string representation of the key.
Multi: flexible functionality for updating data on an existing key.
Installation
pip install fuzzy_multi_dict
Quickstart
Module can be used as a fast enough (due to the tree structure of data storage) spell-checker.
import re
from fuzzy_multi_dict import FuzzyMultiDict
with open('big_text.txt', 'r') as f:
words = list(set(re.findall(r'[a-z]+', f.read().lower())))
vocab = FuzzyMultiDict(max_mistakes_number=3)
for word in words:
vocab[word] = word
vocab['responsibilities']
# 'responsibilities'
vocab['espansibillities']
# 'responsibilities'
vocab.get('espansibillities')
# [{'value': 'responsibilities',
# 'key': 'responsibilities',
# 'mistakes': [{'mistake_type': 'missing symbol "r"', 'position': 0},
# {'mistake_type': 'wrong symbol "a": replaced on "o"', 'position': 3},
# {'mistake_type': 'extra symbol "l"', 'position': 10}]}]
It can also be used as a flexible structure to store and access semi-structured data.
from fuzzy_multi_dict import FuzzyMultiDict
def update_value(x, y):
if x is None: return y
if not isinstance(x, dict) or not isinstance(y, dict):
raise TypeError(f'Invalid value type; expect dict; got {type(x)} and {type(y)}')
for k, v in y.items():
if x.get(k) is None: x[k] = v
elif isinstance(x[k], list):
if v not in x[k]: x[k].append(v)
elif x[k] != v: x[k] = [x[k], v]
return x
phone_book = FuzzyMultiDict(
max_mistakes_number=3,
update_value_func=update_value
)
phone_book['Mom'] = {'phone': '123-4567', 'organization': 'family'}
phone_book['Adam'] = {'phone': '890-1234', 'organization': 'work'}
phone_book['Lisa'] = {'phone': '567-8901', 'organization': 'family'}
phone_book['Adam'] = {'address': 'baker street 221b'}
phone_book['Adam'] = {'phone': '234-5678', 'organization': 'work'}
phone_book['Adam']
# {'phone': ['890-1234', '234-5678'],
# 'organization': 'work',
# 'address': 'baker street 221b'}
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
fuzzy_multi_dict-0.0.3.tar.gz
(5.7 kB
view hashes)
Built Distribution
Close
Hashes for fuzzy_multi_dict-0.0.3-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | dbfd52955aa7ce88ffebdf4e67dad5e699ed2dd4dca03693f855aeaeaad3305b |
|
MD5 | 1a5e723418f76b8d07dcc1f5b94a79f9 |
|
BLAKE2b-256 | dc4bf8a7ebb45c8ee793664d601d0a55117be6affe7f2e741a97b54103fa4823 |