apoc.text.sorensenDiceSimilarity 出现意外结果?

Unexpected result with apoc.text.sorensenDiceSimilarity?

对于使用 Sorensen-Dice 的字符串相似性有点困惑。 显然,它对传递的顺序参数有所不同。

WITH
apoc.text.sorensenDiceSimilarity("+46xxxxx2260", "+46xxxxx2226") as score1,
apoc.text.sorensenDiceSimilarity("+46xxxxx2226", "+46xxxxx2260") as score2
RETURN
score1, score2

其中一个分数(即相似系数)为 1.0,另一个为 0.909090...

对我来说没有意义,但也许我不知道算法有什么问题? 任何见解表示赞赏。

P.S。 “Neo4j 内核”、“3.5.9”、“社区”

这绝对是一个错误,也是一个很好的收获!

作为替代方案,您可以执行以下查询,该查询使用 apoc 函数作为 toSet 和交集以及文本函数,split。使用 ROUND(10^4/10^4) 来使用 4 位小数的查询有 hack。如果您喜欢我的回答,请投票并采纳。谢谢

WITH apoc.coll.toSet(split("+46xxxxx2260","")) as set1, apoc.coll.toSet(split("+46xxxxx2226","")) as set2
WITH set1, set2, apoc.coll.intersection(set1, set2) as common 
RETURN ROUND(2*size(common)*10^4/(size(set1)+size(set2)))/10^4 as sorensenDiceSimilarity

Result:
0.9091