Skip to main content

A class that allows retrieval of a given object by any of its synonyms

Project description

synonym_dict

A class that allows retrieval of a given object by any of its synonyms.

Build StatusCoverage Status

Overview

There are many situations in which an object may be known by several names. synonym_dict provides a way to:

  1. Retrieve an object by its name or any synonyms
  2. Ensure that synonyms are distinct and non-overlapping
  3. Support case-insensitive tests

Installation

$ pip install synonym_dict

The package has no dependencies.

Testing

$ python -m unittest

Or, on python2:

$ python -m unittest discover

Code Design

SynonymSet

A SynonymSet a set of synonyms called "terms" in a hashable collection. Its "name" is canonically its first term, but can be set to any term in the collection. It can also have child objects, all of whose terms are taken to be synonyms.

# from TestSynonymSet.test_name()
s = SynonymSet('hello', 'aloha', 'Ni hao')
assert str(s) == 'hello'
assert s.object == 'hello'
s.set_name('aloha')
assert s.object == 'aloha'

Each synonym set can represent a particular object, such that the terms are synonymous names for that object. The object for the base SynonymSet is simply the name of the set, but subclasses can override this.

SynonymDict

# from TestSynonymDict.test_explicit_merge()
g = SynonymDict(ignore_case=False)  # default
g.new_entry('hello', 'hola', 'hi', 'aloha')
g.new_entry('Hello', 'HELLO', 'Hi', 'HI')
assert g['hi'] == 'hello'
assert g['HI'] == 'Hello'
g.merge('hi', 'HI')
assert g['HI'] == 'hello'

A SynonymDict is a typed collection of SynonymSets or subclasses, each of which is called an entry. The SynonymDict is responsible for managing the set of terms and preventing collisions. It can be case-sensitive or case-insensitive.

A key functionality of the dict is in combining entries. When creating a new entry, the dict first checks to see if any terms are already assigned to an existing entry. If they are, the merge strategy determines what to do among the choices of "merge", "prune", or "strict":

  • The default is to merge the terms into the existing entry. This fails with MergeError if the incoming terms match two or more entries.
  • If "prune" is specified, the duplicate terms are removed from the new entry and it is created using only unknown terms.
  • If neither "merge" nor "prune" are specified, the new entry is created only if every term is unknown; otherwise a TermExists error is raised.

LowerDict

d = LowerDict()
d['smeeb'] = 42
assert d['   SMeeB '] == 42
d[' dRoOl '] = 17
assert d['drool'] == 17
assert list(d.keys()) == ['smeeb', 'dRoOl']

A simple dict subclass that implements case-insensitivity. Also strips leading and trailing whitespace. Used to implement case-insensitivity in SynonymDicts

Subclasses

The main utility of these classes comes in subclassing. The standard approach is to create a subclass of SynonymSet that describes an object of some sort, and then to subclass SynonymDict to manage the set of entries. Two examples are provided and tested and will someday be documented.

Contributing

Fork or open an issue! Please! I crave critical appraisals of my design and/or implementation decisions.

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

synonym_dict-0.1.6.post0.tar.gz (23.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

synonym_dict-0.1.6.post0-py3-none-any.whl (26.6 kB view details)

Uploaded Python 3

File details

Details for the file synonym_dict-0.1.6.post0.tar.gz.

File metadata

  • Download URL: synonym_dict-0.1.6.post0.tar.gz
  • Upload date:
  • Size: 23.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.24.0 setuptools/50.3.2 requests-toolbelt/0.9.1 tqdm/4.57.0 CPython/3.8.6

File hashes

Hashes for synonym_dict-0.1.6.post0.tar.gz
Algorithm Hash digest
SHA256 c5e629b67345f7cf7d200b152970bcbc3d94ace35caf8a4e533e90a1e885a5a3
MD5 a7093481ca027e1f72ee6b019574e16e
BLAKE2b-256 5dfe057402ead8442f17da62a90b2ba2f5f0258afb02b1716d3f0592e74aa2f4

See more details on using hashes here.

File details

Details for the file synonym_dict-0.1.6.post0-py3-none-any.whl.

File metadata

  • Download URL: synonym_dict-0.1.6.post0-py3-none-any.whl
  • Upload date:
  • Size: 26.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.24.0 setuptools/50.3.2 requests-toolbelt/0.9.1 tqdm/4.57.0 CPython/3.8.6

File hashes

Hashes for synonym_dict-0.1.6.post0-py3-none-any.whl
Algorithm Hash digest
SHA256 3e989407b5cb74960f36f048dbea9771231c0070392a655621e1ba4583671a9e
MD5 4eb1b468ddee3f67494c1ab5b69b874e
BLAKE2b-256 55384c23627e37eafbcde1fdfef0c07e9722424ba531699aa4ef5bda838f0a1a

See more details on using hashes here.

Supported by

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