计算成对simhash“距离”

2024-10-03 15:32:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我想构造一个成对的距离矩阵,其中“距离”是实现的两个字符串之间的相似度得分here。我在考虑使用sci-kit-learn的成对距离方法来实现这一点,就像我以前在其他计算中使用过的那样,这种简单的并行化非常好。在

以下是相关代码:

def hashdistance(str1, str2):
    hash1 = simhash(str1)
    hash2 = simhash(str2)

    distance = 1 - hash1.similarity(hash2)

    return distance   


strings = [d['string'] for d in data]
distance_matrix = pairwise_distances(strings, metric = lambda u,v: hashdistance(u, v))

strings看起来像['foo', 'bar', 'baz']。在

当我尝试此操作时,它抛出错误ValueError: could not convert string to float。这可能是一件非常愚蠢的事情,但我不确定为什么要在这里进行转换,以及它为什么抛出这个错误:metric中的匿名函数可以接受字符串并返回一个浮点;为什么输入需要是浮点,以及我如何基于simhash“距离”创建这个成对的距离矩阵?在


Tags: 字符串距离string错误矩阵metricdistance浮点
1条回答
网友
1楼 · 发布于 2024-10-03 15:32:54

根据the documentation,只允许来自scipy.spatial.distance的度量,或者可以从以下位置调用:

In [26]: sklearn.metrics.pairwise.pairwise_distance_functions
Out[26]:
{'cityblock': <function sklearn.metrics.pairwise.manhattan_distances>,
 'euclidean': <function sklearn.metrics.pairwise.euclidean_distances>,
 'l1': <function sklearn.metrics.pairwise.manhattan_distances>,
 'l2': <function sklearn.metrics.pairwise.euclidean_distances>,
 'manhattan': <function sklearn.metrics.pairwise.manhattan_distances>}

一个问题是,如果metriccallable,那么sklearn.metrics.pairwise.check_pairwise_arrays试图将输入转换为float,(scipy.spatial.distance.pdist也做了类似的事情,所以你在那里运气不好),所以你的错误。在

即使可以传递一个callable,它也不能很好地伸缩,因为pairwise_distances中的循环是纯Python的。看来你只能自己写循环了。我建议您阅读pdist和/或{}的源代码,以获得如何做到这一点的提示。在

相关问题 更多 >