changeset 26:cfbab7d87188 draft

Page Rank in ascendiang order in ReadWikiLin.java
author one
date Fri, 31 Aug 2012 20:17:49 +0900
parents fbf0cf550b06
children 4c0b10bb5192
files src/wikigraph/LinkToNode.java src/wikigraph/ReadWikiLink.java src/wikigraph/WikiPage.java
diffstat 3 files changed, 113 insertions(+), 52 deletions(-) [+]
line wrap: on
line diff
--- a/src/wikigraph/LinkToNode.java	Thu Aug 30 23:23:24 2012 +0900
+++ b/src/wikigraph/LinkToNode.java	Fri Aug 31 20:17:49 2012 +0900
@@ -14,8 +14,6 @@
 import org.neo4j.kernel.Traversal;
 import org.neo4j.tooling.GlobalGraphOperations;
 
-import wikigraph.Neo4jTest.RelTypes;
-
 public class LinkToNode {
 
 	GraphDatabaseService graphDb;
@@ -117,16 +115,13 @@
 	long searchAllNodes() {
 		AllNodeNumber = 0;
 		for (Node n : graphOpe.getAllNodes()) {
-
-			n.setProperty(PAGE_RANK,(double)0.0);
-
 			if (n.hasProperty(PAGE_TITLE) || n.hasProperty(PAGE_RANK)) {
 				WikiPage wiki = new WikiPage(n);
 				pageIdTable.put((String) n.getProperty(PAGE_TITLE), n.getId());
 				pageRankTable.put((String) n.getProperty(PAGE_TITLE),
 						(Double) n.getProperty(PAGE_RANK));
-				wiki.setInLink(computeInHasLink(n));
-				wiki.setOutLink(computeOutHasLink(n));
+				wiki.setInHasLink(computeInHasLink(n));
+				wiki.setOutHasLink(computeOutHasLink(n));
 				wikiPageHash.put((String) n.getProperty(PAGE_TITLE), wiki);
 				AllNodeNumber++;
 			}
@@ -141,8 +136,8 @@
 			pageIdTable.put((String) n.getProperty(PAGE_TITLE), n.getId());
 			pageRankTable.put((String) n.getProperty(PAGE_TITLE),
 					(Double) n.getProperty(PAGE_RANK));
-			wiki.setInLink(computeInHasLink(n));
-			wiki.setOutLink(computeOutHasLink(n));
+			wiki.setInHasLink(computeInHasLink(n));
+			wiki.setOutHasLink(computeOutHasLink(n));
 			wikiPageHash.put((String) n.getProperty(PAGE_TITLE), wiki);
 			AllNodeNumber++;
 		}
@@ -214,17 +209,36 @@
 		return count;
 	}
 
-	public void searchHasLinkOut(final Node node) {
+	public void printOutHasLink(final Node node, int depth) {
 		int numberOfLinkPages = 0;
-		String output = node.getProperty(PAGE_TITLE) + " have link pages:\n";
+		String output = node.getProperty(PAGE_TITLE) + " outHasLink pages:";
+		System.out.println(output);
 		Traverser hasLinkTraverser = getOutHasLinkTraverser(node);
 		for (Path hasLinkPath : hasLinkTraverser) {
-			output += "At depth " + hasLinkPath.length() + " => "
-					+ hasLinkPath.endNode().getProperty(PAGE_TITLE) + "\n";
+			if (depth < hasLinkPath.length()) break;
+			String depthOutput = "At depth " + hasLinkPath.length() + " => "
+					+ hasLinkPath.endNode().getProperty(PAGE_TITLE);
+			System.out.println(depthOutput);
 			numberOfLinkPages++;
 		}
-		output += "Number of link pages: " + numberOfLinkPages + "\n";
+		String numOutput = "Number of link pages: " + numberOfLinkPages;
+		System.out.println(numOutput);
+	}
+
+	public void printInHasLink(final Node node, int depth) {
+		int numberOfLinkPages = 0;
+		String output = node.getProperty(PAGE_TITLE) + " inHasLink pages:";
 		System.out.println(output);
+		Traverser hasLinkTraverser = getInHasLinkTraverser(node);
+		for (Path hasLinkPath : hasLinkTraverser) {
+			if (depth < hasLinkPath.length()) break;
+			String depthOutput = "At depth " + hasLinkPath.length() + " => "
+					+ hasLinkPath.endNode().getProperty(PAGE_TITLE);
+			System.out.println(depthOutput);
+			numberOfLinkPages++;
+		}
+		String numOutput = "Number of link pages: " + numberOfLinkPages + "\n";
+		System.out.println(numOutput);
 	}
 
 	public double computePageRank(Node node) {
@@ -240,10 +254,10 @@
 			Node n = hasLinkPath.endNode();
 			sum += (Double) n.getProperty(PAGE_RANK);
 		}
-		if (wiki.getOutLink() == 0) {
+		if (wiki.getOutHasLink() == 0) {
 			pageRank = (double) ((double) 1 / AllNodeNumber * weight2);
 		} else {
-			pageRank = (double) ((double)sum / wiki.getOutLink() * weight1)
+			pageRank = (double) ((double)sum / wiki.getOutHasLink() * weight1)
 					+ (double) ((double) 1 / AllNodeNumber * weight2);
 		}
 
@@ -251,5 +265,20 @@
 		node.setProperty(PAGE_RANK, pageRank);
 		return pageRank;
 	}
+	
+	public void printNodeInfo(int nodeId) {
+		Node node = graphDb.getNodeById(nodeId);
+		String title = getPageTitle(node);
+		double rank = getPageRank(node);
+		long inHasLink = computeInHasLink(node);
+		long outHasLink = computeOutHasLink(node);
+		
+		System.out.println("id:"+nodeId+" title:"+title+" rank:"+rank);
+		System.out.println("inHasLink:"+inHasLink+" outHasLink:"+outHasLink);
+
+		printInHasLink(node, 1);
+		printOutHasLink(node, 1);
+	
+	}
 
 }
--- a/src/wikigraph/ReadWikiLink.java	Thu Aug 30 23:23:24 2012 +0900
+++ b/src/wikigraph/ReadWikiLink.java	Fri Aug 31 20:17:49 2012 +0900
@@ -2,6 +2,9 @@
 
 import java.io.FileOutputStream;
 import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.Map;
@@ -28,13 +31,44 @@
 
 		try {
 
+			// initALlNodePageRank();
 			final long AllNodeNumber = ltn.searchAllNodes();
 			HashMap<String, WikiPage> wikiHash = ltn.getWikiPageHash();
 
+//			ltn.printNodeInfo(2);
 
-			int nodeIds[] = {1, 2, 3};
+			
+			WikiPage maxW = new WikiPage();
+			ArrayList<WikiPage> list = new ArrayList<WikiPage>();
+			for (String title : wikiHash.keySet()) {
+				WikiPage w = wikiHash.get(title);
+				list.add(w);
+				if (maxW.getRank() < w.getRank() ) {
+					maxW = w;
+				}
+			}
+
+			Collections.sort(list, new Comparator<WikiPage>(){
+ 				public int compare(WikiPage w1, WikiPage w2) {
+					return (int)(w2.getRank()*Math.pow(10, 6)) - (int)(w1.getRank()*Math.pow(10,6));
+ 				}
+			});
+			
+			FileOutputStream fos = new FileOutputStream("./resource/wikipage2.log");
+			
+			for (WikiPage w : list) {
+				w.printInfo(fos);
+			}
+			fos.close();
+
+			System.out.println("\nMax Page Rank");
+			maxW.printInfo();
+			
+
+			
+/*
+			final int nodeIds[] = {4, 5, 6};
 			LinkedList<FileOutputStream> fosList = new LinkedList<FileOutputStream>();
-
 			for (int i: nodeIds) {
 				String filename = String.format("./resource/NodeId_%d.dat", i);
 				FileOutputStream fos = new FileOutputStream(filename);
@@ -53,26 +87,11 @@
 				}
 				
 			}
-
 			for (FileOutputStream fos: fosList) {
 				fos.close();
 			}
-			/*			
-			String title = "ブラックホール";
-			FileOutputStream fos = new FileOutputStream("./resource/nodePageRank.dat");
-			fos.write(("# page title: "+title+"\n").getBytes());
-						
-			WikiPage w = wikiHash.get(title);
-			for (int i = 0; i < 50; i++) {
-				for (Node node : graphOpe.getAllNodes()) {
-					ltn.computePageRank(node);
-				}
-				double rank = w.getRank();
-				printPageRankLog(fos, i, rank);
-				fos.flush();
-			}
-			fos.close();
-*/
+			*/
+
 		} catch (Exception e) {
 			e.printStackTrace();
 		} finally {
--- a/src/wikigraph/WikiPage.java	Thu Aug 30 23:23:24 2012 +0900
+++ b/src/wikigraph/WikiPage.java	Fri Aug 31 20:17:49 2012 +0900
@@ -1,5 +1,8 @@
 package wikigraph;
 
+import java.io.FileOutputStream;
+import java.io.IOException;
+
 import org.neo4j.graphdb.Node;
 
 public class WikiPage {
@@ -7,32 +10,31 @@
 	private String title;
 	private long id;
 	private Double rank;
-	private long outLink;
-	private long inLink;
+	private long outHasLink;
+	private long inHasLink;
 	
 	WikiPage() {
 		this.title = null;
 		this.id = -1;
 		this.rank = -1.0;
-		this.outLink = 0;
-		this.inLink = 0;
+		this.outHasLink = 0;
+		this.inHasLink = 0;
 	}
 	
 	WikiPage(Node node) {
 		this.title = (String) node.getProperty(LinkToNode.PAGE_TITLE);
 		this.id = node.getId();
 		this.rank = (Double)node.getProperty(LinkToNode.PAGE_RANK);
-		this.rank = 0.0;
-		this.outLink = 0;
-		this.inLink = 0;
+		this.outHasLink = 0;
+		this.inHasLink = 0;
 	}
 
 	WikiPage(String title, long id, Double rank) {
 		this.title = title;
 		this.id = id;
 		this.rank = rank;
-		this.outLink = 0;
-		this.inLink = 0;
+		this.outHasLink = 0;
+		this.inHasLink = 0;
 	}
 	
 	String getTitle() {
@@ -47,12 +49,12 @@
 		return rank;
 	}
 	
-	long getOutLink() {
-		return outLink;
+	long getOutHasLink() {
+		return outHasLink;
 	}
 
-	long getInLink() {
-		return inLink;
+	long getInHasLink() {
+		return inHasLink;
 	}
 	
 	void setTitle(String title) {
@@ -67,12 +69,23 @@
 		this.rank = rank;
 	}
 	
-	void setOutLink(long num) {
-		this.outLink = num;
+	void setOutHasLink(long num) {
+		this.outHasLink = num;
+	}
+	
+	void setInHasLink(long num) {
+		this.inHasLink = num;
 	}
 	
-	void setInLink(long num) {
-		this.inLink = num;
+	void printInfo() {
+		System.out.println("id:"+id+" title:"+title+" rank:"+rank);
+		System.out.println("outHasLink:"+outHasLink+" inHasLink:"+inHasLink);
+	}
+
+	void printInfo(FileOutputStream fos) throws IOException {
+		fos.write(("id:"+id+" title:"+title+" rank:"+rank+"\n").getBytes());
+		fos.write(("outHasLink:"+outHasLink+" inHasLink:"+inHasLink+"\n").getBytes());
+		fos.flush();
 	}
 
 }