Skip to main content

No project description provided

Project description

Fuzzy Multi Dict

Coverage Status Coverage Status

Coverage Status Coverage Status

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

fuzzy_multi_dict-0.0.2.tar.gz (5.2 kB view details)

Uploaded Source

Built Distribution

fuzzy_multi_dict-0.0.2-py3-none-any.whl (5.3 kB view details)

Uploaded Python 3

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

Hashes for fuzzy_multi_dict-0.0.2.tar.gz
Algorithm Hash digest
SHA256 8cff6ed5eaf0bdeba88c667b75322985d7f6b3025bc8c75dffb83cea14bdcfef
MD5 2aeeba5c1745b76eccdfc0f1a9f92c27
BLAKE2b-256 0bca47c71adf388ad1c93aedc437dd4d11a50296bb1c00c16c2c7e7184efc8dc

See more details on using hashes here.

File details

Details for the file fuzzy_multi_dict-0.0.2-py3-none-any.whl.

File metadata

File hashes

Hashes for fuzzy_multi_dict-0.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 8fc4ff11cc1ae22471b38ae4efb978f08208d467cedfb730a6ae2f441e516b2e
MD5 b078c0d99a3e1523dc20e34f83ce8d75
BLAKE2b-256 ebe7336ba94aeeb6dadeca82a395e81b19063fbbbd907242b4f4254c1fbcc0bd

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page