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
Examples
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
Built Distribution
File details
Details for the file fuzzy_multi_dict-0.0.2.tar.gz
.
File metadata
- Download URL: fuzzy_multi_dict-0.0.2.tar.gz
- Upload date:
- Size: 5.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.13
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8cff6ed5eaf0bdeba88c667b75322985d7f6b3025bc8c75dffb83cea14bdcfef |
|
MD5 | 2aeeba5c1745b76eccdfc0f1a9f92c27 |
|
BLAKE2b-256 | 0bca47c71adf388ad1c93aedc437dd4d11a50296bb1c00c16c2c7e7184efc8dc |
File details
Details for the file fuzzy_multi_dict-0.0.2-py3-none-any.whl
.
File metadata
- Download URL: fuzzy_multi_dict-0.0.2-py3-none-any.whl
- Upload date:
- Size: 5.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.13
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8fc4ff11cc1ae22471b38ae4efb978f08208d467cedfb730a6ae2f441e516b2e |
|
MD5 | b078c0d99a3e1523dc20e34f83ce8d75 |
|
BLAKE2b-256 | ebe7336ba94aeeb6dadeca82a395e81b19063fbbbd907242b4f4254c1fbcc0bd |