Source code for glosario.glosario
from yaml import load, FullLoader
from textdistance import cosine
from pkg_resources import resource_stream
from collections import Counter
stream = resource_stream(__name__, 'data/glossary.yml')
raw = load(stream, Loader=FullLoader)
Terms = {term['slug']: term for term in raw}
__language__ = 'en'
[docs]def get_languages_available():
"""
Get all languages available part of the dictionary.
Parameters
----------
Returns
-------
Counter({})
A counter object with the number of instances each language is present as an entry.
Examples
--------
>>> from glosario import glosario
>>> glosario.get_languages_available()
"""
lang_dict = Counter()
for _, values in Terms.items():
keys = list(values.keys())
for key in keys:
if key != 'slug' and key != 'ref':
lang_dict.update({key: 1})
return lang_dict
[docs]def set_language(language, verbose=False):
"""
Get all languages available part of the dictionary.
Parameters
----------
language: str
Language to return the definitions in
verbose: bool
Whether to print verbal confirnmation of the change
Returns
-------
Examples
--------
>>> from glosario import glosario
>>> glosario.set_language('es')
"""
langs_available = get_languages_available()
if language not in langs_available.keys():
if verbose:
print('Currently we don\'t support this language.\nFeel free to submit definitions to this language at https://github.com/gvwilson/glossary')
return None
else:
global __language__
if verbose:
print(f'Current Language: {__language__}\nNew Language: {language}')
__language__ = language
def __search_word__(slug):
'''Look up a definition in a glossary by slug.'''
definition = Terms.get(slug)
return definition.get(__language__)
def __known_words__():
'''Report all known definition slugs as a set.'''
return Terms.keys()
def __search_similar_word__(slug):
'''Match up to most similar word'''
similarity_dict = {}
for term in __known_words__():
similarity_dict[term] = cosine.normalized_similarity(slug, term)
return max(similarity_dict, key = similarity_dict.get)
[docs]def define(slug):
"""
Define a given word
Parameters
----------
slug: str
The word you want to search
Returns
-------
str:
The word definition
Examples
--------
>>> from glosario import glosario
>>> glosario.define('data frame')
"""
try:
similar_word = __search_similar_word__(slug)
word_definition = __search_word__(similar_word)
return word_definition['def']
except:
print('We couldn\'t find this word in the dictionary')