微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

apoc.text.sorensenDiceSimilarity 的意外结果?

如何解决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...

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

附言《Neo4j 内核》、《3.5.9》、《社区》

解决方法

这绝对是一个错误和一个很好的捕获!

作为替代,您可以执行以下查询,该查询使用 apoc 函数作为 toSet 和交集和文本函数,拆分。使用 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。