我为服务创建了一个抓取工具。我想自动检测网站中的地区/社区。我做了一个模型,其中一个url链接到另一个url,如果是href(:LinksTo
)。如果有回链接,我还会创建一个名为:Connected
的额外关系。
我想要哪些社区存在以及它们有多大。问题是我一直在与一个庞大的社区和少数小社区结束。我有点被困在这里。
我已经安装了这些算法:https://neo4j-contrib.github.io/neo4j-graph-algorithms/我试图用三角形计数和集群系数做一些事情,但是创建好的节点分区似乎是不可能的。
有人有想法吗?
答案 0 :(得分:1)
我猜你已经尝试过LPA和Louvain社区检测。避免使用上述算法进入一个大社区和一些小社区的一种方法是限制迭代。
您可以做的另一件事是尝试为关系定义相似性阈值,以便例如两个网站必须至少有5个公共连接,或者它们不相似(它们之间的关系下降)。
检查this blog series以获取更多详细信息。
这些系列中还记录了apoc.periodic.iterate
,它可以帮助您推断您在评论部分中描述的网络,以便您可以轻松地使用它。在你的情况下,声明将是一些类似的东西。这将推断并存储加权网络,以帮助您找到那些非常相似的网站。
CALL apoc.periodic.iterate(
"MATCH (child:Url)-[:linksTo]->(deeper:Url)<-[:Linksto]-(:parent)
where id(child) < id(parent)
RETURN p1,p2
","
MERGE (p1)-[r:SIMILAR]-(p2)
ON CREATE SET r.weight = 1
ON MATCH SET r.weight = r.weight + 1"
,{batchSize:5000, parallel:false,iterateList:true})