我已经将带有参考出版物的DBLP数据库从Crossref API导入了neo4j。
目标是为数据库中的每个作者计算一个自引用商。 我想计算该商的方式如下:
scq
(自引用商)scq
的所有值相加,然后除以作者撰写的出版物总数scq
作为示例,我为作者“ Danielle S. Bassett”提供了以下子图:
从该图可以看到她有2个包含自我参考的出版物。 用言语: 丹妮尔(Danielle)写了出版物1,2,3,4 出版物1参考出版物2 出版物3参考出版物4
我的尝试是使用以下密码查询:
match (a:Author{name:"Danielle S. Bassett"})-[:WROTE]->(p1:Publication)-[r:REFERENCES]->(p2:Publication)<-[:WROTE]-(a)
with count(p2) as ssc_per_publ,
count(p1) as main_publ_count,
collect(p2) as self_citations,
collect(p1) as main_publ,
collect(r) as refs,
a as author
return author, main_publ, ssc_per_publ, self_citations, main_publ_count, refs
此查询表的结果如下:
从表中可以看到,main_publ_count
的计算正确,因为她撰写了2个出版物,其中包含自我参考,但是ssc_per_publ
(每个出版物的自我引用计数)是错误的,因为它计算了所有自我参考。但是我需要每次发布的自我参考数量。
计算商数不是问题,但是从neo4j获取正确的值是
。我希望我已经清楚地表达了自己,让您理解这个问题。 也许你们当中有人知道解决这个问题的方法。谢谢!
答案 0 :(得分:2)
您的WITH
子句使用author
作为唯一的aggregation function“分组键”,因为它是该子句中唯一不使用聚合函数的术语。因此,该子句中的所有聚合函数都只聚合了一个术语。
要获得(由该作者)每个出版物的“自我引用计数”,您必须执行以下操作(为简单起见,该查询将忽略所有其他计数和集合)。 author
和publ
共同构成此查询中的“分组关键字”。
MATCH (author:Author{name:"Danielle S. Bassett"})-[:WROTE]->
(publ:Publication)-[r:REFERENCES]->(p2:Publication)<-[:WROTE]-(a)
RETURN author, publ, COUNT(p2) as self_citation_count;
[此外:您的原始查询也有其他问题。例如,您应该使用COUNT(DISTINCT p1) as main_publ_count
,以使对同一p1
实例的多次自我引用不会增加“主要”出版物的数量。]