comparison 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
comparison
equal deleted inserted replaced
23:21902773e530 24:71fe482aaf32
26 public final static String PAGE_RANK = "page_rank"; 26 public final static String PAGE_RANK = "page_rank";
27 private HashMap<String,Long> pageIdTable = new HashMap<String,Long>(); 27 private HashMap<String,Long> pageIdTable = new HashMap<String,Long>();
28 private HashMap<String,Long> pageRankTable = new HashMap<String,Long>(); 28 private HashMap<String,Long> pageRankTable = new HashMap<String,Long>();
29 29
30 private HashMap<String,WikiPage> wikiPageHash = new HashMap<String,WikiPage>(); 30 private HashMap<String,WikiPage> wikiPageHash = new HashMap<String,WikiPage>();
31 private long AllNodeNumber;
31 32
32 public enum RelTypes implements RelationshipType { 33 public enum RelTypes implements RelationshipType {
33 HAS_LINK 34 HAS_LINK
34 } 35 }
35 36
36 LinkToNode(GraphDatabaseService graphDb) { 37 LinkToNode(GraphDatabaseService graphDb) {
37 this.graphDb = graphDb; 38 this.graphDb = graphDb;
38 this.graphOpe = GlobalGraphOperations.at(graphDb); 39 this.graphOpe = GlobalGraphOperations.at(graphDb);
40 AllNodeNumber = 0;
39 } 41 }
40 42
41 LinkToNode(GraphDatabaseService graphDb, GlobalGraphOperations graphOpe) { 43 LinkToNode(GraphDatabaseService graphDb, GlobalGraphOperations graphOpe) {
42 this.graphDb = graphDb; 44 this.graphDb = graphDb;
43 this.graphOpe = graphOpe; 45 this.graphOpe = graphOpe;
46 AllNodeNumber = 0;
44 } 47 }
45 48
46 void setGraphDb(GraphDatabaseService graphDb) { 49 void setGraphDb(GraphDatabaseService graphDb) {
47 this.graphDb = graphDb; 50 this.graphDb = graphDb;
48 this.graphOpe = GlobalGraphOperations.at(graphDb); 51 this.graphOpe = GlobalGraphOperations.at(graphDb);
52 AllNodeNumber = 0;
49 } 53 }
50 54
51 Long getId(String pageTitle) { 55 Long getId(String pageTitle) {
52 return pageIdTable.get(pageTitle); 56 return pageIdTable.get(pageTitle);
53 } 57 }
90 Node setPageRank(Node node, long rank) { 94 Node setPageRank(Node node, long rank) {
91 node.setProperty(PAGE_RANK, rank); 95 node.setProperty(PAGE_RANK, rank);
92 return node; 96 return node;
93 } 97 }
94 98
95
96 Node getNode(String name) { 99 Node getNode(String name) {
97 long id = pageIdTable.get(name); 100 long id = pageIdTable.get(name);
98 return graphDb.getNodeById(id); 101 return graphDb.getNodeById(id);
99 } 102 }
100 103
104 107
105 void setHasLink(Node node1, Node node2) { 108 void setHasLink(Node node1, Node node2) {
106 setRelationship(node1, node2, RelTypes.HAS_LINK); 109 setRelationship(node1, node2, RelTypes.HAS_LINK);
107 } 110 }
108 111
109 long searchPageTitleAllNodes() {
110 long AllNodeNumber = 0;
111 for (Node n: graphOpe.getAllNodes()) {
112 if (n.hasProperty(PAGE_TITLE)) {
113 pageIdTable.put((String)n.getProperty(PAGE_TITLE), n.getId());
114 pageRankTable.put((String)n.getProperty(PAGE_TITLE), (Long) n.getProperty(PAGE_RANK));
115 AllNodeNumber++;
116 }
117 }
118 return AllNodeNumber;
119 }
120
121 long searchAllNodes() { 112 long searchAllNodes() {
122 long AllNodeNumber = 0; 113 AllNodeNumber = 0;
123 for (Node n: graphOpe.getAllNodes()) { 114 for (Node n: graphOpe.getAllNodes()) {
124 if (n.hasProperty(PAGE_TITLE)) { 115 if (n.hasProperty(PAGE_TITLE)) {
125 WikiPage wiki = new WikiPage(n); 116 WikiPage wiki = new WikiPage(n);
126 wikiPageHash.put((String)n.getProperty(PAGE_TITLE), wiki); 117 wikiPageHash.put((String)n.getProperty(PAGE_TITLE), wiki);
118 pageIdTable.put((String)n.getProperty(PAGE_TITLE), n.getId());
119 pageRankTable.put((String)n.getProperty(PAGE_TITLE), (Long) n.getProperty(PAGE_RANK));
120 wiki.setInLink(computeInHasLink(n));
121 wiki.setOutLink(computeOutHasLink(n));
122
127 AllNodeNumber++; 123 AllNodeNumber++;
128 } 124 }
129 } 125 }
130 return AllNodeNumber; 126 return AllNodeNumber;
127 }
128
129 HashMap<String,WikiPage> getWikiPageHash() {
130 return wikiPageHash;
131 } 131 }
132 132
133 HashMap<String,Long> getPageIdTable() { 133 HashMap<String,Long> getPageIdTable() {
134 return pageIdTable; 134 return pageIdTable;
135 } 135 }
136 136
137 HashMap<String,Long> getPageRankTable() { 137 HashMap<String,Long> getPageRankTable() {
138 return pageRankTable; 138 return pageRankTable;
139 } 139 }
140
141 HashMap<String,WikiPage> getWikiPageHash() {
142 return wikiPageHash;
143 }
144 140
145 public void printAllNodes() { 141 public void printAllNodes() {
146 for (Node n: graphOpe.getAllNodes()) { 142 for (Node n: graphOpe.getAllNodes()) {
147 System.out.println("ID="+ n.getId()); 143 System.out.println("ID="+ n.getId());
148 for (String key: n.getPropertyKeys()) { 144 for (String key: n.getPropertyKeys()) {
155 System.out.println("--"); 151 System.out.println("--");
156 } 152 }
157 153
158 } 154 }
159 155
160 public Traverser getInHasLink( final Node person) { 156 private Traverser getTraverser(final Node node, final Direction rel) {
161 TraversalDescription td = Traversal.description() 157 TraversalDescription td = Traversal.description()
162 .breadthFirst() 158 .breadthFirst()
163 .relationships( RelTypes.HAS_LINK, Direction.INCOMING ) 159 .relationships( RelTypes.HAS_LINK, rel )
164 .evaluator( Evaluators.excludeStartPosition()); 160 .evaluator( Evaluators.excludeStartPosition());
165 return td.traverse( person ); 161 return td.traverse( node );
166 } 162
167 163 }
168 public Traverser getOutHasLink( final Node person) { 164
169 TraversalDescription td = Traversal.description() 165 public Traverser getOutHasLinkTraverser( final Node node) {
170 .breadthFirst() 166 return getTraverser(node, Direction.OUTGOING);
171 .relationships( RelTypes.HAS_LINK, Direction.OUTGOING ) 167 }
172 .evaluator( Evaluators.excludeStartPosition()); 168
173 return td.traverse( person ); 169 public Traverser getInHasLinkTraverser( final Node node) {
174 } 170 return getTraverser(node, Direction.INCOMING);
175 171 }
176 172
173 public long computeOutHasLink(final Node node) {
174 long count = 0;
175 Traverser hasLinkTraverser = getOutHasLinkTraverser(node);
176 for (Path hasLinkPath : hasLinkTraverser) {
177 if (hasLinkPath.length() > 1) break;
178 count++;
179 }
180 return count;
181 }
182
183 public long computeInHasLink(final Node node) {
184 long count = 0;
185 Traverser hasLinkTraverser = getInHasLinkTraverser(node);
186 for (Path hasLinkPath : hasLinkTraverser) {
187 if (hasLinkPath.length() > 1) break;
188 count++;
189 }
190 return count;
191 }
192
177 193
178 public void searchHasLinkOut(final Node node) { 194 public void searchHasLinkOut(final Node node) {
179 int numberOfLinkPages = 0; 195 int numberOfLinkPages = 0;
180 String output = node.getProperty(PAGE_TITLE) + " have link pages:\n"; 196 String output = node.getProperty(PAGE_TITLE) + " have link pages:\n";
181 Traverser hasLinkTraverser = getOutHasLink( node ); 197 Traverser hasLinkTraverser = getOutHasLinkTraverser( node );
182 for ( Path hasLinkPath : hasLinkTraverser) { 198 for ( Path hasLinkPath : hasLinkTraverser) {
183 output += "At depth " + hasLinkPath.length() + " => " 199 output += "At depth " + hasLinkPath.length() + " => "
184 + hasLinkPath.endNode() 200 + hasLinkPath.endNode()
185 .getProperty(PAGE_TITLE) + "\n"; 201 .getProperty(PAGE_TITLE) + "\n";
186 numberOfLinkPages++; 202 numberOfLinkPages++;
187 } 203 }
188 output += "Number of link pages: " + numberOfLinkPages + "\n"; 204 output += "Number of link pages: " + numberOfLinkPages + "\n";
189 System.out.println(output); 205 System.out.println(output);
190 } 206 }
207
208 public long computePageRank(Node node) {
209 long sum = 0;
210 long pageRank = 0;
211 String title = getPageTitle(node);
212 WikiPage wiki = wikiPageHash.get(title);
213
214 Traverser hasLinkTraverser = getInHasLinkTraverser(node);
215 for (Path hasLinkPath: hasLinkTraverser) {
216 if (hasLinkPath.length() > 1) break;
217 Node n = hasLinkPath.endNode();
218 sum += (Long)n.getProperty(PAGE_RANK);
219 }
220 pageRank = (long) (sum/wiki.getInLink() * 0.85
221 + 1 / AllNodeNumber * 0.15);
222
223 wiki.setRank(pageRank);
224 node.setProperty(PAGE_RANK, pageRank);
225 return pageRank;
226 }
227
191 228
192 } 229 }