changeset 21:f9ef906676eb draft

modify LinkToNode.java
author one
date Tue, 28 Aug 2012 14:04:15 +0900
parents 2c3a10047ec6
children 2be3358689cb
files src/wikigraph/LinkConvertGraph.java src/wikigraph/LinkToNode.java src/wikigraph/ReadWikiLink.java
diffstat 3 files changed, 114 insertions(+), 47 deletions(-) [+]
line wrap: on
line diff
--- a/src/wikigraph/LinkConvertGraph.java	Mon Aug 27 04:30:53 2012 +0900
+++ b/src/wikigraph/LinkConvertGraph.java	Tue Aug 28 14:04:15 2012 +0900
@@ -94,7 +94,7 @@
 
 
 		try {
-
+			
 			lcg = new LinkConvertGraph(filename);
 
 			lcg.parseXml();
@@ -105,10 +105,13 @@
 
 			HashMap<String,HashSet<String>> hash = lcg.getHash();
 
-			GraphDatabaseService graphDb = new EmbeddedGraphDatabase("wikiLinkDB_");
+			GraphDatabaseService graphDb = new EmbeddedGraphDatabase("wikiLinkDB");
 			LinkToNode ltn = new LinkToNode(graphDb);
 			
 			Transaction tx = graphDb. beginTx();
+			
+			Node delNode = graphDb.getNodeById(0);
+			delNode.delete();
 
 			for (Map.Entry<String,HashSet<String>> map : hash.entrySet()) {
 				String pageTitle = map.getKey();
@@ -124,6 +127,7 @@
 					Node linkNode;
 					if ( ltn.getId(linkPageTitle) == null) {
 						linkNode = ltn.createNodeWithPageTitle(linkPageTitle);
+						ltn.setPageRank(linkNode, 0);
 					} else {
 						linkNode = ltn.getNode(linkPageTitle);
 					}
--- a/src/wikigraph/LinkToNode.java	Mon Aug 27 04:30:53 2012 +0900
+++ b/src/wikigraph/LinkToNode.java	Tue Aug 28 14:04:15 2012 +0900
@@ -14,15 +14,19 @@
 import org.neo4j.kernel.Traversal;
 import org.neo4j.tooling.GlobalGraphOperations;
 
+import wikigraph.Neo4jTest.RelTypes;
+
 
 public class LinkToNode {
 
 	GraphDatabaseService graphDb;
 	GlobalGraphOperations graphOpe;
 
-	public final String PAGE_TITLE = "page_title";
+	public final static String PAGE_TITLE = "page_title";
+	public final static String PAGE_RANK = "page_rank";
 //	private HashSet<String> names = new HashSet<String>();
-	private HashMap<String,Long> namesTable = new HashMap<String,Long>();
+	private HashMap<String,Long> pageIdTable = new HashMap<String,Long>();
+	private HashMap<String,Long> pageRankTable = new HashMap<String,Long>();
 	
 	public enum RelTypes implements RelationshipType {
 		HAS_LINK
@@ -33,13 +37,22 @@
 		this.graphOpe = GlobalGraphOperations.at(graphDb);
 	}
 	
+	LinkToNode(GraphDatabaseService graphDb, GlobalGraphOperations graphOpe) {
+		this.graphDb = graphDb;
+		this.graphOpe = graphOpe;
+	}
+
 	void setGraphDb(GraphDatabaseService graphDb) {
 		this.graphDb = graphDb;
 		this.graphOpe = GlobalGraphOperations.at(graphDb);
 	}
 
 	Long getId(String pageTitle) {
-		return namesTable.get(pageTitle);
+		return pageIdTable.get(pageTitle);
+	}
+	
+	boolean isHasLink(Relationship rel) {
+		return rel.isType(RelTypes.HAS_LINK);
 	}
 	
 	private Node createNode() {
@@ -52,14 +65,35 @@
 		return node;
 	}
 	
+	void initAllNodePageRank() {
+		for (Node node : graphOpe.getAllNodes()) {
+			setPageRank(node, 0);
+		}
+	}
+	
+	
+	String getPageTitle(Node node) {
+		return (String) node.getProperty(PAGE_TITLE);
+	}
+	
+	Long getPageRank(Node node) {
+		return (Long) node.getProperty(PAGE_RANK);
+	}
+	
 	Node createNodeWithPageTitle(String pageTitle){
 		Node node = createNodeWithProperty(PAGE_TITLE, pageTitle);
-		namesTable.put(pageTitle,  node.getId());
+		pageIdTable.put(pageTitle,  node.getId());
 		return node;
 	}
+	
+	Node setPageRank(Node node, long rank) {
+		node.setProperty(PAGE_RANK, rank);
+		return node;
+	}
+	
 
 	Node getNode(String name) {
-		long id = namesTable.get(name);
+		long id = pageIdTable.get(name);
 		return graphDb.getNodeById(id);
 	}
 	
@@ -71,16 +105,25 @@
 		setRelationship(node1, node2, RelTypes.HAS_LINK);
 	}
 	
-	void searchPageTitleAllNodes() {
+	long searchPageTitleAllNodes() {
+		long AllNodeNumber = 0;
 		for (Node n: graphOpe.getAllNodes()) {
-			if (n.hasProperty(PAGE_TITLE))
-				namesTable.put((String)n.getProperty(PAGE_TITLE), n.getId());
+			if (n.hasProperty(PAGE_TITLE)) {
+				pageIdTable.put((String)n.getProperty(PAGE_TITLE), n.getId());
+				pageRankTable.put((String)n.getProperty(PAGE_TITLE), (Long) n.getProperty(PAGE_RANK));
+				AllNodeNumber++;
+			}
 		}
+		return AllNodeNumber;
 	}
 	
-	HashMap<String,Long> getNamesTable() {
-		return namesTable;
+	HashMap<String,Long> getPageIdTable() {
+		return pageIdTable;
 	}
+
+	HashMap<String,Long> getPageRankTable() {
+		return pageRankTable;
+	}	
 	
 	public void printAllNodes() {
 		for (Node n: graphOpe.getAllNodes()) {
@@ -97,18 +140,28 @@
 
 	}
 
-	public Traverser getHasLink( final Node person) {
+	public Traverser getInHasLink( final Node person) {
+		TraversalDescription td = Traversal.description()
+				.breadthFirst()
+				.relationships( RelTypes.HAS_LINK, Direction.INCOMING )
+				.evaluator( Evaluators.excludeStartPosition());
+		return td.traverse( person );
+	}
+
+	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 void searchHasLink(final Node node) {
+	public void searchHasLinkOut(final Node node) {
 		int numberOfLinkPages = 0;
 		String output = node.getProperty(PAGE_TITLE) + " have link pages:\n";
-		Traverser hasLinkTraverser = getHasLink( node );
+		Traverser hasLinkTraverser = getOutHasLink( node );
 		for ( Path hasLinkPath : hasLinkTraverser) {
 			output += "At depth " + hasLinkPath.length() + " => "
 					+ hasLinkPath.endNode()
--- a/src/wikigraph/ReadWikiLink.java	Mon Aug 27 04:30:53 2012 +0900
+++ b/src/wikigraph/ReadWikiLink.java	Tue Aug 28 14:04:15 2012 +0900
@@ -1,12 +1,18 @@
 package wikigraph;
 
 import java.util.HashMap;
+import java.util.Map;
 
 import org.neo4j.graphdb.GraphDatabaseService;
 import org.neo4j.graphdb.Node;
+import org.neo4j.graphdb.Path;
 import org.neo4j.graphdb.Relationship;
 import org.neo4j.graphdb.Transaction;
+import org.neo4j.graphdb.traversal.Traverser;
 import org.neo4j.kernel.EmbeddedGraphDatabase;
+import org.neo4j.tooling.GlobalGraphOperations;
+
+import wikigraph.LinkToNode.RelTypes;
 
 public class ReadWikiLink {
 
@@ -15,23 +21,19 @@
 		
 
 		GraphDatabaseService graphDb = new EmbeddedGraphDatabase("wikiLinkDB");
-		LinkToNode ltn = new LinkToNode(graphDb);
+		GlobalGraphOperations graphOpe =  GlobalGraphOperations.at(graphDb);
+		LinkToNode ltn = new LinkToNode(graphDb, graphOpe);
 		Transaction tx = graphDb. beginTx();		
-		
-//		ltn.printAllNodes();
-		
-		ltn.searchPageTitleAllNodes();
-		HashMap<String,Long> hash = ltn.getNamesTable();
-		
+
+		try {
+			
+		final long AllNodeNumber = ltn.searchPageTitleAllNodes();
 		
-		long lastNodeId = 0;
-		// Print out page title and ID of All Node.  
-		for (String key : hash.keySet()) {
-//			System.out.println("page title = "+key + "\nID = " + hash.get(key));
-			lastNodeId = Math.max(hash.get(key), lastNodeId);
-		}
+		// Key: page_title  value: Node ID
+		HashMap<String,Long> pageIdHash = ltn.getPageIdTable();
+		HashMap<String,Long> pageRankHash = ltn.getPageRankTable();
 		
-		long relCount = 0;
+		long maxRelCount = 0;
 		String tmpKey="";
 		// relHash record number of relationships of each node.
 		// Key: page_title  value: number of relationships
@@ -41,41 +43,49 @@
 		// key: number of relationships  value: ID
 		HashMap<Long,Long> relKeyHash = new HashMap<Long,Long>();
 		
-		for (String key : hash.keySet()) {
-			long id = hash.get(key);
+		for (String key : pageIdHash.keySet()) {
+			long id = pageIdHash.get(key);
 			Node node = graphDb.getNodeById(id);
 			
 			Iterable<Relationship> relIter = node.getRelationships();
 			long count = 0;
 			for (Relationship rel : relIter) {
-				count++;
+				if ( ltn.isHasLink(rel))
+					count++;
 			}
 			relHash.put(key, count);
 
-			if (relCount < count ) {
-				relCount = count;
+			if (maxRelCount < count ) {
+				maxRelCount = count;
 				tmpKey = key;
 			}
 			relKeyHash.put(count, id);
 		}
 		
-		for (String key : relHash.keySet()) {
-//			System.out.println(key + ":"+relHash.get(key));
-		}
-		System.out.println("lastNodeId = "+ lastNodeId);
-		System.out.println("Most :\n"+tmpKey+":"+relCount);
+		System.out.println("AllNodeNumber = "+ AllNodeNumber);
+		System.out.println("Most :\n"+tmpKey+":"+maxRelCount);
 		
 
-		for (long i = relKeyHash.size()-1 ; i>0 ; i-- ) {
-			long id = relKeyHash.get(i);
-			Node node = graphDb.getNodeById(id);
-			System.out.prinln();
+		
+		String output = "";
+		Node n = graphDb.getNodeById(1);
+		Traverser hasLinkTraverser = ltn.getInHasLink( n );
+		System.out.println(n.getProperty(LinkToNode.PAGE_TITLE));
+		for (Path hasLinkPath : hasLinkTraverser) {
+			output = "At depth" + hasLinkPath.length() + " => "
+					+ hasLinkPath.endNode().getProperty(LinkToNode.PAGE_TITLE) + "\n";
+			System.out.println(output);
 		}
 		
-		
-		tx.success();
-		tx.finish();
-		graphDb.shutdown();
+		System.out.println(output);
+
+		} catch (Exception e) {
+			e.printStackTrace();
+		} finally {
+			tx.success();
+			tx.finish();
+			graphDb.shutdown();
+		}
 		
 	}