La clase nltk.probability.ConditionalFreqDist es un contenedor para instancias de FreqDist, con una FreqDist por condición. Se utiliza para contar frecuencias que dependen de otra condición, como otra palabra o una etiqueta de clase. Se está utilizando aquí para crear una clase compatible con API además de Redis mediante RedisHashFreqDist .
En el código que se proporciona a continuación, una clase RedisConditionalHashFreqDist que amplía nltk.probability.ConditionalFreqDist y anula el método __getitem__() . Anule __getitem__() para crear una instancia de RedisHashFreqDist en lugar de FreqDist.
Código:
from nltk.probability import ConditionalFreqDist from rediscollections import encode_key class RedisConditionalHashFreqDist(ConditionalFreqDist): def __init__(self, r, name, cond_samples = None): self._r = r self._name = name ConditionalFreqDist.__init__(self, cond_samples) for key in self._r.keys(encode_key('% s:*' % name)): condition = key.split(':')[1] # calls self.__getitem__(condition) self[condition] def __getitem__(self, condition): if condition not in self._fdists: key = '% s:% s' % (self._name, condition) val = RedisHashFreqDist(self._r, key) super(RedisConditionalHashFreqDist, self).__setitem__( condition, val) return super( RedisConditionalHashFreqDist, self).__getitem__(condition) def clear(self): for fdist in self.values(): fdist.clear()
Se puede crear una instancia de esta clase pasando una conexión Redis y un nombre base. Después de eso, funciona como ConditionalFreqDist como se muestra en el siguiente código:
Código:
from redis import Redis from redisprob import RedisConditionalHashFreqDist r = Redis() rchfd = RedisConditionalHashFreqDist(r, 'condhash') print (rchfd.N()) print (rchfd.conditions()) rchfd['cond1']['foo'] += 1 print (rchfd.N()) print (rchfd['cond1']['foo']) print (rchfd.conditions()) rchfd.clear()
Producción :
0 [] 1 1 ['cond1']
Cómo funciona ?
- RedisConditionalHashFreqDist usa prefijos de nombre para hacer referencia a las instancias de RedisHashFreqDist.
- El nombre pasado a RedisConditionalHashFreqDist es un nombre base que se combina con cada condición para crear un nombre único para cada RedisHashFreqDist .
- Por ejemplo, si el nombre base de RedisConditionalHashFreqDist es ‘condhash’ y la condición es ‘cond1’, entonces el nombre final de RedisHashFreqDist es ‘condhash:cond1’ .
- Este patrón de nomenclatura se usa en la inicialización para encontrar todos los mapas hash existentes usando el comando de teclas.
- Al buscar todas las claves que coincidan con ‘condhash:*’, el usuario puede identificar todas las condiciones existentes y crear una instancia de RedisHashFreqDist para cada una.
- La combinación de strings con dos puntos es una convención de nomenclatura común para las claves de Redis como una forma de definir espacios de nombres.
- Cada instancia de RedisConditionalHashFreqDist define un solo espacio de nombres de mapas hash.
RedisConditionalHashFreqDist también define un método clear() . Este es un método auxiliar que llama a clear() en todas las instancias internas de RedisHashFreqDist. El método clear() no está definido en ConditionalFreqDist .
Publicación traducida automáticamente
Artículo escrito por mathemagic y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA