2017-11-23 37 views
0

サービス用のクローラを作成しました。ウェブサイト内の地域やコミュニティを自動的に検出したいと思います。私は、href(:LinksTo)の場合にURLが別のURLにリンクするモデルを作った。バックリンクがあるときは、:Connectedという余分な関係も作成します。Neo4jに格納されたWebグラフでコミュニティを検出する方法

私は、どのコミュニティが存在し、どの程度大きいのかを知りたいと思います。問題は、私は1つの巨大なコミュニティと少数の小さなコミュニティで結ばれ続けることです。私はここにこだわっています。

私はこれらのアルゴリズムをインストールしました:https://neo4j-contrib.github.io/neo4j-graph-algorithms/と私は三角の数とclustercoefficientで何かしようとしましたが、ノードの良いパーティションを作成することは不可能です。

誰かアイデア?

+0

私はこの時点でオーバーラップを見つけようとしています。 fromノード - from:〜〜:linksto〜〜to〜〜の部分が(somenode) - [:linksto]〜(to)と重なっている場合、最初のものはhome-somenode-fromの階層の一部になると思います。私はすでに(子:Url) - [:linksTo] - >(深い:Url)< - [:Linksto] - (:親)WHERE child.outGoing

答えて

1

あなたはLPAとLouvainコミュニティの検出を試したと思います。上記のアルゴリズムを使用して1つの大きなコミュニティといくつかの小さなコミュニティになるのを回避する1つの方法は、反復を制限しています。

もう1つのことは、リレーションシップの類似性のしきい値を定義しようとすることです。たとえば、2つのWebサイトに少なくとも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}) 
+0

ありがとう。ノードを余分な関係に似せることは決して考えなかった。 –

関連する問題