apoc.text.sorensenCanceSimilarity出现意外结果



使用Sorensen-Dice的字符串相似性有点混乱。显然,它在传递参数的顺序上会有所不同。

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

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

这对我来说没有意义,但也许算法中有我不知道的东西?任何见解都值得赞赏。

第页。S";Neo4j内核"3.5.9"社区";

这绝对是一个错误,也是一个很好的陷阱!

作为替代方案,您可以执行以下查询,该查询使用apoc函数作为toSet和intersection以及text函数,split。有人破解了使用ROUND(10^4/10^4(使用4位小数的查询。如果你喜欢我的答案,请投票接受。谢谢。

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

最新更新