NLP |在 Redis 中存储频率分布

原文:https://www . geesforgeks . org/NLP-storing-frequency-distribution-in-redis/

nltk 中的许多类都使用了类来存储和管理频率分布。它非常有用,但是都在内存中,没有提供持久化数据的方法。多个进程也无法访问单个 FreqDist。所有这些都可以通过在 Redis 上建立一个 FreqDist 来改变。 T3】什么是 Redis?

  • Redis 是一个数据结构服务器,是比较流行的 NoSQL 数据库之一。
  • 其中,它提供了一个网络可访问的数据库来存储字典(也称为哈希映射)。
  • 为 Redis 哈希映射构建一个 FreqDist 接口将允许我们创建一个持久的 FreqDist,多个本地和远程进程可以同时访问它。

安装:

  • 安装 Redis 和 redis-py。Redis 网站位于http://redis.io/,包含许多文档资源。
  • 要使用哈希映射,请安装最新版本,在撰写本文时是 2.8.9。
  • 可以使用 pip install rediseasy_install redis 安装 Redis Python 驱动程序 redis-py。此时最新的版本是 2.9.1
  • 重定向视频主页位于 http://github . com/andymccurdy/redis-py/。
  • 一旦两者都安装完毕,并且 redis-server 进程正在运行,您就可以开始了。让我们假设 redis-server 运行在端口 6379(默认主机和端口)上的 localhost 上。

它是如何工作的?

  • FreqDist 类扩展了标准库集合。Counter 类,它使一个 FreqDist 成为一个带有一些额外方法的小包装器,比如 N()。
  • N()方法返回样本结果的数量,这是频率分布 中所有值的总和。
  • 通过扩展一个redhashmap然后实现 N()方法,在 Redis 之上创建了一个与 API 兼容的类。
  • RedisHashFreqDist(在 redisprob.py 中定义)对 N()方法的哈希映射中的所有值求和

代码:解释工作

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)]

这个类可以像 FreqDist 一样使用。要实例化它,传递一个 Redis 连接和我们的哈希映射的名称。该名称应该是对这个特定 FreqDist 的唯一引用,这样它就不会与 Redis 中的任何其他键冲突。

代码:

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))

输出:

0
1
1

大部分工作是在redisashmap类中完成的,该类扩展了集合。可变映射然后覆盖所有需要 Redis 特定命令的方法。概述每个使用特定 Redis 命令的方法:

  • len() : 这使用 hlen 命令来获取硬件映射中的元素数量
  • _ _ 包含 __(): 这使用 hexists 命令来检查哈希映射中是否存在元素
  • getitem(): 这使用 hget 命令从哈希映射中获取一个值
  • setitem(): 这使用 hset 命令在哈希映射中设置一个值
  • delitem(): 这使用 hdel 命令从硬件映射中移除一个值
  • key():这使用 hkeys 命令获取哈希映射中的所有密钥
  • values(): 这使用 hvals 命令获取哈希映射中的所有值
  • items(): 这使用 hgetall 命令来获取包含哈希映射中所有键和值的字典
  • clear(): 这使用 delete 命令从 Redis 中移除整个哈希映射