diff src/wikigraph/LinkToNode.java @ 24:71fe482aaf32 draft

fix LinkToNode.java
author one
date Tue, 28 Aug 2012 15:27:35 +0900
parents 21902773e530
children fbf0cf550b06
line wrap: on
line diff
--- a/src/wikigraph/LinkToNode.java	Tue Aug 28 14:38:13 2012 +0900
+++ b/src/wikigraph/LinkToNode.java	Tue Aug 28 15:27:35 2012 +0900
@@ -28,6 +28,7 @@
 	private HashMap<String,Long> pageRankTable = new HashMap<String,Long>();
 	
 	private HashMap<String,WikiPage> wikiPageHash = new HashMap<String,WikiPage>();
+	private long AllNodeNumber;
 
 	public enum RelTypes implements RelationshipType {
 		HAS_LINK
@@ -36,16 +37,19 @@
 	LinkToNode(GraphDatabaseService graphDb) {
 		this.graphDb = graphDb;
 		this.graphOpe = GlobalGraphOperations.at(graphDb);
+		AllNodeNumber = 0;
 	}
 	
 	LinkToNode(GraphDatabaseService graphDb, GlobalGraphOperations graphOpe) {
 		this.graphDb = graphDb;
 		this.graphOpe = graphOpe;
+		AllNodeNumber = 0;
 	}
 
 	void setGraphDb(GraphDatabaseService graphDb) {
 		this.graphDb = graphDb;
 		this.graphOpe = GlobalGraphOperations.at(graphDb);
+		AllNodeNumber = 0;
 	}
 
 	Long getId(String pageTitle) {
@@ -92,7 +96,6 @@
 		return node;
 	}
 	
-
 	Node getNode(String name) {
 		long id = pageIdTable.get(name);
 		return graphDb.getNodeById(id);
@@ -106,28 +109,25 @@
 		setRelationship(node1, node2, RelTypes.HAS_LINK);
 	}
 	
-	long searchPageTitleAllNodes() {
-		long AllNodeNumber = 0;
+	long searchAllNodes() {
+		AllNodeNumber = 0;
 		for (Node n: graphOpe.getAllNodes()) {
 			if (n.hasProperty(PAGE_TITLE)) {
+				WikiPage wiki = new WikiPage(n);
+				wikiPageHash.put((String)n.getProperty(PAGE_TITLE), wiki);
 				pageIdTable.put((String)n.getProperty(PAGE_TITLE), n.getId());
 				pageRankTable.put((String)n.getProperty(PAGE_TITLE), (Long) n.getProperty(PAGE_RANK));
+				wiki.setInLink(computeInHasLink(n));
+				wiki.setOutLink(computeOutHasLink(n));
+				
 				AllNodeNumber++;
 			}
 		}
 		return AllNodeNumber;
 	}
 	
-	long searchAllNodes() {
-		long AllNodeNumber = 0;
-		for (Node n: graphOpe.getAllNodes()) {
-			if (n.hasProperty(PAGE_TITLE)) {
-				WikiPage wiki = new WikiPage(n);
-				wikiPageHash.put((String)n.getProperty(PAGE_TITLE), wiki);
-				AllNodeNumber++;
-			}
-		}
-		return AllNodeNumber;
+	HashMap<String,WikiPage> getWikiPageHash() {
+		return wikiPageHash;
 	}
 	
 	HashMap<String,Long> getPageIdTable() {
@@ -138,10 +138,6 @@
 		return pageRankTable;
 	}	
 	
-	HashMap<String,WikiPage> getWikiPageHash() {
-		return wikiPageHash;
-	}
-	
 	public void printAllNodes() {
 		for (Node n: graphOpe.getAllNodes()) {
 			System.out.println("ID="+ n.getId());
@@ -157,28 +153,48 @@
 
 	}
 
-	public Traverser getInHasLink( final Node person) {
+	private Traverser getTraverser(final Node node, final Direction rel) {
 		TraversalDescription td = Traversal.description()
 				.breadthFirst()
-				.relationships( RelTypes.HAS_LINK, Direction.INCOMING )
+				.relationships( RelTypes.HAS_LINK, rel )
 				.evaluator( Evaluators.excludeStartPosition());
-		return td.traverse( person );
+		return td.traverse( node );
+		
+	}
+	
+	public Traverser getOutHasLinkTraverser( final Node node) {
+		return getTraverser(node, Direction.OUTGOING);
+	}
+	
+	public Traverser getInHasLinkTraverser( final Node node) {
+		return getTraverser(node, Direction.INCOMING);
+	}
+	
+	public long computeOutHasLink(final Node node) {
+		long count = 0;
+		Traverser hasLinkTraverser = getOutHasLinkTraverser(node);
+		for (Path hasLinkPath : hasLinkTraverser) {
+			if (hasLinkPath.length() > 1) break;
+			count++;
+		}
+		return count;
 	}
 
-	public Traverser getOutHasLink( final Node person) {
-		TraversalDescription td = Traversal.description()
-				.breadthFirst()
-				.relationships( RelTypes.HAS_LINK, Direction.OUTGOING )
-				.evaluator( Evaluators.excludeStartPosition());
-		return td.traverse( person );
+	public long computeInHasLink(final Node node) {
+		long count = 0;
+		Traverser hasLinkTraverser = getInHasLinkTraverser(node);
+		for (Path hasLinkPath : hasLinkTraverser) {
+			if (hasLinkPath.length() > 1) break;
+			count++;
+		}
+		return count;
 	}
-	
-	
+
 
 	public void searchHasLinkOut(final Node node) {
 		int numberOfLinkPages = 0;
 		String output = node.getProperty(PAGE_TITLE) + " have link pages:\n";
-		Traverser hasLinkTraverser = getOutHasLink( node );
+		Traverser hasLinkTraverser = getOutHasLinkTraverser( node );
 		for ( Path hasLinkPath : hasLinkTraverser) {
 			output += "At depth " + hasLinkPath.length() + " => "
 					+ hasLinkPath.endNode()
@@ -188,5 +204,26 @@
 		output += "Number of link pages: " + numberOfLinkPages + "\n";
 		System.out.println(output);
 	}
+
+	public long computePageRank(Node node) {
+		long sum = 0;
+		long pageRank = 0;
+		String title = getPageTitle(node);
+		WikiPage wiki = wikiPageHash.get(title);
+		
+		Traverser hasLinkTraverser = getInHasLinkTraverser(node);
+		for (Path hasLinkPath: hasLinkTraverser) {
+			if (hasLinkPath.length() > 1) break;
+			Node n = hasLinkPath.endNode();
+			sum += (Long)n.getProperty(PAGE_RANK);
+		}
+		pageRank = (long) (sum/wiki.getInLink() * 0.85 
+				+ 1 / AllNodeNumber * 0.15);
+				
+		wiki.setRank(pageRank);
+		node.setProperty(PAGE_RANK, pageRank);
+		return pageRank;
+	}
+	
 	
 }