与Neo4j中机会百分比的关系

2024-10-02 04:27:01 发布

您现在位置:Python中文网/ 问答频道 /正文

考虑一个包含超过130万行的CSV文件,其中包含来自arXiv的文章的信息。该文件的结构如下所示:

id,title,url,abstract,date,categories,authors
0,"Title1",http://arxiv.org/abs/0704.0001,"Blabla",2007-04-02,Phenomenology,"Balázs, C.;Berger, E. L.;Nadolsky, P. M."

我正在把它导入Neo4j数据库。这不是问题。但是,引用一些基于概率的伪关系。你知道吗

我想生成(第1条)-[:CITES]->;(第2条)关系。但我不希望它们完全是随机的。我想考虑到这篇文章只能引用比它本身更老的文章,如果文章属于同一类,那么一篇引用另一篇的几率要高得多,同样的作者也在增加引用的几率。只是想模拟一下现实世界。你知道吗

我的问题是-如何才能做到这一点?可以用密码吗?或者我应该创建(即python)应用程序,以及如何构建它?或者我应该在CSV中创建一个列,然后像这样导入Neo4j:

id,title,url,abstract,date,categories,authors,cites
100,"Test",http://test.test,"Desc",2018-03-25,Phenomenology,"XYZ, John","0;4;15;25;60;69;89"

或者有什么工具可以帮我?还是我遗漏了什么?建立这种关系的最好方法(也许是最简单的方法)是什么?你知道吗


Tags: 文件csvabstractidhttpurldate关系
1条回答
网友
1楼 · 发布于 2024-10-02 04:27:01

你可以创建一个密码脚本来完成它。 对于每篇文章,你必须创建一个随机评分函数,以找到最好的其他城市。你知道吗

结果应该是这样的:

MATCH (a:Article) WHERE size((a)-[:CITES]->(:Article)) = 0
WITH a LIMIT 100
  MATCH (b:Article) WHERE b.date < a.date 
 WITH 
  a, 
  b,
  CASE 
    WHEN a.categories = b.categories THEN rand()
    ELSE 0
  END AS catScore,
  CASE 
    WHEN a.authors = b.authors THEN rand()
    ELSE 0
  END AS catAuthor
  WITH a, b, catScore + 2* catAuthor AS score ORDER BY score DESC LIMIT 1
    CREATE (a)-[:CITES]->(b)
    RETURN count(*)

您应该多次执行此查询,直到其结果等于0。(如果需要,在APOC中有一个程序)。你知道吗

此查询无法在数据模型上运行,因为日期是字符串。我建议您存储时间戳,而不是字符串date(还有一个APOC函数来解析date),并在其上创建索引。你知道吗

此外,我认为您的数据模型中有AuthorCategory节点,不是吗?所以您应该调整查询。你知道吗

相关问题 更多 >

    热门问题