view src/wikigraph/ReadWikiLink.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 source

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 {

	public static void main(String[] args) {

		GraphDatabaseService graphDb = new EmbeddedGraphDatabase("wikiLinkDB");
		GlobalGraphOperations graphOpe = GlobalGraphOperations.at(graphDb);
		LinkToNode ltn = new LinkToNode(graphDb, graphOpe);
		Transaction tx = graphDb.beginTx();

		try {

			final long AllNodeNumber = ltn.searchAllNodes();

			long maxRelCount = 0;
			String tmpKey = "";
			// relHash record number of relationships of each node.
			// Key: page_title value: number of relationships
			HashMap<String, Long> relHash = new HashMap<String, Long>();

			// relKeyHash
			// key: number of relationships value: ID
			HashMap<Long, Long> relKeyHash = new HashMap<Long, Long>();

			HashMap<String,WikiPage> wikiHash = ltn.getWikiPageHash();

			for (String title: wikiHash.keySet()) {
				WikiPage w = wikiHash.get(title);
				long id = w.getId();
				
				Node node = graphDb.getNodeById(id);
	
				Iterable<Relationship> relIter = node.getRelationships();
				long count = 0;
				// compute number of relationship.
				for (Relationship rel : relIter) {
					if (ltn.isHasLink(rel))
						count++;
				}
				relHash.put(title, count);

				if (maxRelCount < count) {
					maxRelCount = count;
					tmpKey = title;
				}
				relKeyHash.put(count, id);
			}

			/*
			System.out.println("title: id: rank: inLink: outLink");
			for (String title: wikiHash.keySet()) {
				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(32868);
			Traverser hasLinkTraverser = ltn.getOutHasLinkTraverser(n);
			System.out.println(n.getProperty(LinkToNode.PAGE_TITLE));
			for (Path hasLinkPath : hasLinkTraverser) {
				if (hasLinkPath.length() > 1) break;
				output = "At depth"
						+ hasLinkPath.length()
						+ " => "
						+ hasLinkPath.endNode().getProperty(
								LinkToNode.PAGE_TITLE) + "\n";
				System.out.println(output);
			}

			System.out.println("in = "+ltn.computeInHasLink(n));
			System.out.println("out = " +ltn.computeOutHasLink(n));
			
			
			
			


		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			tx.success();
			tx.finish();
			graphDb.shutdown();
		}

	}

}