Neo4j apoc.text.sorensenDiceSimilarity的意外结果?

Neo4j apoc.text.sorensenDiceSimilarity的意外结果?,neo4j,cypher,Neo4j,Cypher,关于使用Sorensen骰子的字符串相似性,有点困惑。 显然,传递的顺序参数不同 WITH apoc.text.sorensenDiceSimilarity("+46xxxxx2260", "+46xxxxx2226") as score1, apoc.text.sorensenDiceSimilarity("+46xxxxx2226", "+46xxxxx2260") as score2 RETURN score1

关于使用Sorensen骰子的字符串相似性,有点困惑。 显然,传递的顺序参数不同

WITH
apoc.text.sorensenDiceSimilarity("+46xxxxx2260", "+46xxxxx2226") as score1,
apoc.text.sorensenDiceSimilarity("+46xxxxx2226", "+46xxxxx2260") as score2
RETURN
score1, score2
其中一个分数(即相似系数)为1.0,另一个为0.9090

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


另外,“Neo4j内核”、“3.5.9”、“社区”

这绝对是一个bug,也是一个很好的陷阱

作为替代方案,您可以执行以下查询,该查询使用apoc函数作为toSet和intersection以及文本函数split。查询中有一个使用四舍五入(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

您可以在此网站上报告此错误: