changeset 24:71fe482aaf32 draft

fix LinkToNode.java
author one
date Tue, 28 Aug 2012 15:27:35 +0900
parents 21902773e530
children fbf0cf550b06
files src/wikigraph/LinkToNode.java src/wikigraph/ReadWikiLink.java
diffstat 2 files changed, 85 insertions(+), 37 deletions(-) [+]
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;
+	}
+	
 	
 }
--- a/src/wikigraph/ReadWikiLink.java	Tue Aug 28 14:38:13 2012 +0900
+++ b/src/wikigraph/ReadWikiLink.java	Tue Aug 28 15:27:35 2012 +0900
@@ -25,7 +25,6 @@
 
 		try {
 
-//			final long AllNodeNumber = ltn.searchPageTitleAllNodes();
 			final long AllNodeNumber = ltn.searchAllNodes();
 
 			long maxRelCount = 0;
@@ -53,8 +52,6 @@
 					if (ltn.isHasLink(rel))
 						count++;
 				}
-				w.setOutLink(count);
-
 				relHash.put(title, count);
 
 				if (maxRelCount < count) {
@@ -63,17 +60,25 @@
 				}
 				relKeyHash.put(count, id);
 			}
-			
+
+			/*
+			System.out.println("title: id: rank: inLink: outLink");
 			for (String title: wikiHash.keySet()) {
-				System.out.println(title);
+				WikiPage w = wikiHash.get(title);
+				long id = w.getId();
+				long rank = w.getRank();
+				long inLink = w.getInLink();
+				long outLink = w.getOutLink();
+				System.out.println(title + ": "+ id + ": "+ rank +": "+ inLink +": "+outLink);
 			}
+			*/
 			
 			System.out.println("AllNodeNumber = " + AllNodeNumber);
 			System.out.println("Most :\n" + tmpKey + ":" + maxRelCount);
 
 			String output = "";
-			Node n = graphDb.getNodeById(1);
-			Traverser hasLinkTraverser = ltn.getInHasLink(n);
+			Node n = graphDb.getNodeById(32868);
+			Traverser hasLinkTraverser = ltn.getOutHasLinkTraverser(n);
 			System.out.println(n.getProperty(LinkToNode.PAGE_TITLE));
 			for (Path hasLinkPath : hasLinkTraverser) {
 				if (hasLinkPath.length() > 1) break;
@@ -85,7 +90,13 @@
 				System.out.println(output);
 			}
 
-			System.out.println(output);
+			System.out.println("in = "+ltn.computeInHasLink(n));
+			System.out.println("out = " +ltn.computeOutHasLink(n));
+			
+			
+			
+			
+
 
 		} catch (Exception e) {
 			e.printStackTrace();