PNL | Almacenamiento de la distribución de frecuencias en Redis

La clase nltk.probability.FreqDist se usa en muchas clases en NLTK para almacenar y administrar distribuciones de frecuencia. Es bastante útil, pero todo está en la memoria y no proporciona una forma de conservar los datos. Un solo FreqDist tampoco es accesible para múltiples procesos. Todo eso se puede cambiar construyendo un FreqDist sobre Redis.
¿Qué es Redis?

  • Redis es un servidor de estructura de datos que es una de las bases de datos NoSQL más populares .
  • Entre otras cosas, proporciona una base de datos accesible en red para almacenar diccionarios (también conocidos como mapas hash).
  • La creación de una interfaz FreqDist para un mapa hash de Redis nos permitirá crear un FreqDist persistente al que puedan acceder varios procesos locales y remotos al mismo tiempo.

Instalación :

  • Instale Redis y redis-py. El sitio web de Redis está en http://redis.io/ e incluye muchos recursos de documentación.
  • Para usar mapas hash, instale la última versión, que en el momento de escribir este artículo es la 2.8.9.
  • El controlador Redis Python, redis-py, se puede instalar mediante pip install redis o easy_install redis . La última versión en este momento es 2.9.1 .
  • La página de inicio de redis-py está en http://github.com/andymccurdy/redis-py/ .
  • Una vez que ambos estén instalados y se esté ejecutando un proceso de redis-server, estará listo para comenzar. Supongamos que redis-server se ejecuta en localhost en el puerto 6379 (el host y el puerto predeterminados).

¿Cómo funciona?

  • La clase FreqDist amplía la clase de biblioteca estándar collections.Counter , lo que convierte a FreqDist en un pequeño envoltorio con algunos métodos adicionales, como N().
  • El método N() devuelve el número de resultados de muestra, que es la suma de todos los valores en
    la distribución de frecuencia.
  • Se crea una clase compatible con API sobre Redis extendiendo un RedisHashMap y luego implementando el método N().
  • El RedisHashFreqDist (definido en redisprob.py) suma todos los valores en el mapa hash para el método N()

Código: Explicando el funcionamiento

from rediscollections import RedisHashMap
  
class RedisHashFreqDist(RedisHashMap):
    def N(self):
        return int(sum(self.values()))
      
    def __missing__(self, key):
        return 0
      
    def __getitem__(self, key):
        return int(RedisHashMap.__getitem__(self, key) or 0)
      
    def values(self):
        return [int(v) for v in RedisHashMap.values(self)]
      
    def items(self):
        return [(k, int(v)) for (k, v) in RedisHashMap.items(self)]

Esta clase se puede usar como FreqDist. Para instanciarlo, pase una conexión Redis y el nombre de nuestro mapa hash. El nombre debe ser una referencia única a este FreqDist en particular para que no entre en conflicto con ninguna otra clave en Redis.

Código:

from redis import Redis
from redisprob import RedisHashFreqDist
  
r = Redis()
rhfd = RedisHashFreqDist(r, 'test')
print (len(rhfd))
  
rhfd['foo'] += 1
print (rhfd['foo'])
  
rhfd.items()
print (len(rhfd))

Producción :

0
1
1

La mayor parte del trabajo se realiza en la clase RedisHashMap , que amplía collections.MutableMapping y luego anula todos los métodos que requieren comandos específicos de Redis. Resumen de cada método que utiliza un comando específico de Redis:

  • __len__() : Esto usa el comando hlen para obtener el número de elementos en el mapa hash
  • __contains__(): Esto usa el comando hexists para verificar si existe un elemento en el mapa hash
  • __getitem__(): Esto usa el comando hget para obtener un valor del mapa hash
  • __setitem__(): Esto usa el comando hset para establecer un valor en el mapa hash
  • __delitem__(): Esto usa el comando hdel para eliminar un valor del mapa hash
  • keys(): Esto usa el comando hkeys para obtener todas las claves en el mapa hash
  • valores(): esto usa el comando hvals para obtener todos los valores en el mapa hash
  • items(): Esto usa el comando hgetall para obtener un diccionario que contiene todas las claves y valores en el mapa hash
  • clear(): esto usa el comando de eliminación para eliminar todo el mapa hash de Redis

Publicación traducida automáticamente

Artículo escrito por mathemagic y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *