我还有另一个与Jaccard相似性相关的问题要问:
正如我之前尝试的方法(称为jaccard相似性算法)给我奇怪的结果(我将在另一个线程中继续问这个问题):
我尝试了另一种方法来计算测试数据表示形式的jaccard相似度(如下所示):
用于创建所有标题节点的CSV:
title_id,title
T1,Article Title 1
T2,Article Title 2
我要用于创建关系的CSV:
title_id,keyword_id,keyword
T1,K1,aaa
T1,K2,bbb
T1,K3,ccc
T1,K4,ddd
T2,K1,aaa
T2,K5,eee
T2,K6,fff
T2,K4,ddd
我能够使用以下代码计算jaccard的相似度:
MATCH(t:Title)-[:HAS_KEYWORDS]->(k:Keyword)<-[:HAS_KEYWORDS]-(other:Title)
WITH t, other,
count(k) AS intersection,
collect(k) AS i
MATCH (t)-[:HAS_KEYWORDS]->(tk:Keyword)
WITH t, other, intersection, i,
collect(tk) AS s1
MATCH (other)-[:HAS_KEYWORDS]->(ok:Keyword)
WITH t, other, intersection, i, s1,
collect(ok) AS s2
WITH t, other, intersection, s1, s2
WITH t, other, intersection, s1, s2,
s1+filter(x IN s2 WHERE NOT x IN s1) AS union
RETURN t.title, other.title, s1,s2,
((1.0*intersection)/SIZE(union)) AS jaccard
ORDER BY jaccard DESC LIMIT 100
但是,我也想为基于这种相似性而提出的建议设置一个临界点。
我试图添加CASE WHEN限制(如下所示):
...
RETURN t, other, s1,s2,
CASE WHEN ((1.0*intersection)/size(union)) > 0.1
THEN s2.jaccard
ELSE null
END AS jaccard
...
经过一番尝试,我了解到我需要在THEN ... jaccard ELSE ...位的前面添加一个... node(?),但是当我这样做时,在代码运行时,该jaccard列全部填充为空。
由于我不太确定该怎么称呼我的确切问题,如果有人能够指出一些基本文件以阅读并理解我的错误,我将非常感谢。 / p>