python - 如何使用 SimhashIndex() 为文档数据集分配索引号?

标签 python duplicates simhash

这段代码实现了四组数据的Simhash函数。

import re
from simhash import Simhash, SimhashIndex
def get_features(s):
   width = 3
   s = s.lower()
   s = re.sub(r'[^\w]+', '', s)
   return [s[i:i + width] for i in range(max(len(s) - width + 1, 1))]

data = {
1: u'How are you? I Am fine. blar blar blar blar blar Thanks.',
2: u'How are you i am fine. blar blar blar blar blar than',
3: u'This is simhash test.',
 }
objs = [(str(k), Simhash(get_features(v))) for k, v in data.items()]
index = SimhashIndex(objs, k=3)

现在我已经使用此代码对一个巨大的数据集(训练数据集:train_data)进行索引。

def get_features(s):
   width = 3
    return [s[i:i + width] for i in range(max(len(s) - width + 1, 1))]

objs = [(str(k), Simhash(get_features(data_train[k]))) for k in range(len(data_train))]
index=SimhashIndex(objs,k=500)

但是如果我放

'k=3'

它可以工作,但对于像

这样的值
'k=500'

它进入永无止境的循环。请告诉我为什么会发生这种情况以及如何获取所有“data_train”数据的索引号。

最佳答案

无需详细讨论您的代码,k 是您希望允许的最大汉明距离。 k 永远不能大于 simhash 中的位数,并且对于大多数现实世界的语料库来说,通常它不会大于 6 或 7。通常它必须小到 2 或 3。

增加 k 将导致检测相似性所需的 CPU 时间和/或存储空间急剧增加。直到您的系统处于负载状态并且哈希表中有大量 simhash 时,您才会看到此效果。

要更好地了解 k 是什么,请参阅此 explanation of simhash .

另请注意,您不会发现硬编码的示例文本之间有相似之处。它们非常短,因此即使改变一个单词也会改变很大一部分特征。 Simhash 仅在变化非常轻微时才能检测到相似性。

关于python - 如何使用 SimhashIndex() 为文档数据集分配索引号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50912414/

相关文章:

cluster-analysis - MinHashing 与 SimHashing

python - def - else 语句不起作用

python - 我在 python 中打印钻石代码的问题

python - 使用opencv,tensorflow和python进行人体检测

r - 如何删除重复数据的行 (R)

java - 如何计算 ArrayList 中多个重复元素的数量?

similarity - minhash 比 simhash 有什么优势?

java - 使 Sim Hash(局部敏感哈希)算法更准确?

python - 作业 : Implementing the Z algorithm in python, 真的很慢,比单纯的字符串搜索还慢

java - linkedhashmap 的重复项