2

我正在使用 Python 3.7.1 使 minhash 成为字符串列表。代码如下。

import mmh3
import random
import string
import itertools
from datasketch import MinHash

def grouper(iterable,n=2):
    return ["".join(x) for x in list(itertools.permutations(iterable, n))]

def _hash_func(d):
    return mmh3.hash(d)

def _run_minhash(data, seed):

    m = MinHash(num_perm=128 ,hashfunc=_hash_func)
    for d in data:
        m.update(d.encode('utf8'))
    return m.count()

if __name__ == '__main__':
    st = string.ascii_uppercase
    ngrams  = grouper(st,n=4)
    print(_run_minhash(ngrams,seed=12))

为了加快速度,我正在使用 datasketch.Minhash文档中提到的 mmh3.hash (mmh3.hash32 不再可用),这会产生以下错误

TypeError:输入类型不支持 ufunc 'bitwise_and',并且根据转换规则 ''safe'' 无法安全地将输入强制转换为任何支持的类型

Traceback (most recent call last):
  File "hashes.py", line 41, in 
    print(_run_minhash(ngrams,seed=12))
  File "hashes.py", line 35, in _run_minhash
    m.update(d.encode('utf8'))
  File "/home/nithin/miniconda3/lib/python3.7/site-packages/datasketch/minhash.py", line 134, in update
    phv = np.bitwise_and((a * hv + b) % _mersenne_prime, np.uint64(_max_hash))
TypeError: ufunc 'bitwise_and' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''

我没有找到具体的原因这个原因和解决方法。我应该如何解决这个问题?或者有没有其他方法可以加快 minhash 计算。提前感谢您的宝贵时间——如果我遗漏了任何内容、过分强调或过分强调某个具体点,请在评论中告诉我。

4

0 回答 0