在Neo4J的Jaccard相似性查询中添加CASE WHEN条件

时间:2018-12-16 12:55:50

标签: neo4j cypher

我还有另一个与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>

0 个答案:

没有答案