首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用SimhashIndex()为文档数据集分配索引号?

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

Stack Overflow用户
提问于 2018-06-18 23:02:20
回答 1查看 376关注 0票数 1

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

代码语言:javascript
复制
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)

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

代码语言:javascript
复制
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)

但如果我把

代码语言:javascript
复制
'k=3'

它可以工作,但是对于像这样的值

代码语言:javascript
复制
'k=500'

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

EN

回答 1

Stack Overflow用户

发布于 2019-08-06 22:24:38

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

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

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

还要注意的是,您将找不到硬编码的示例文本之间的相似性。它们非常短,因此即使改变一个单词也会改变太大比例的特征。Simhash只能在变化非常轻微的情况下检测相似性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50912414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档