aboutsummaryrefslogtreecommitdiff
path: root/test/uk/ac/ox/cs/data/sample/RandomWalk.java
diff options
context:
space:
mode:
Diffstat (limited to 'test/uk/ac/ox/cs/data/sample/RandomWalk.java')
-rw-r--r--test/uk/ac/ox/cs/data/sample/RandomWalk.java88
1 files changed, 0 insertions, 88 deletions
diff --git a/test/uk/ac/ox/cs/data/sample/RandomWalk.java b/test/uk/ac/ox/cs/data/sample/RandomWalk.java
deleted file mode 100644
index d9f5107..0000000
--- a/test/uk/ac/ox/cs/data/sample/RandomWalk.java
+++ /dev/null
@@ -1,88 +0,0 @@
1package uk.ac.ox.cs.data.sample;
2
3import java.util.HashSet;
4import java.util.Iterator;
5import java.util.List;
6import java.util.Random;
7import java.util.Set;
8import java.util.Stack;
9
10import org.openrdf.rio.RDFHandlerException;
11import org.openrdf.rio.turtle.TurtleWriter;
12
13import uk.ac.ox.cs.pagoda.util.Utility;
14
15public class RandomWalk extends Sampler {
16
17 public RandomWalk(RDFGraph graph, TurtleWriter writer) {
18 super(graph, writer);
19 }
20
21 protected Random rand = new Random();
22
23 protected int noOfStatements = 0, statementLimit = 0;
24 protected Set<Integer> visited = new HashSet<Integer>();
25
26 @Override
27 public void setLimit(int limit) {
28 statementLimit = limit;
29 }
30
31 @Override
32 public void sample() throws RDFHandlerException {
33 int u, v, pick, index;
34 RDFEdge edge;
35 List<RDFEdge> edges;
36 Stack<Integer> stack = new Stack<Integer>();
37 while (true) {
38 if (noOfStatements >= statementLimit) {
39 return ;
40 }
41 if (stack.isEmpty()) {
42 stack.add(v = rand.nextInt(m_graph.numberOfIndividuals));
43 Utility.logInfo("A new start: " + m_graph.getRawString(v));
44 visit(v);
45 }
46 u = stack.peek();
47 if (rand.nextInt(100) < 15) {
48 stack.pop();
49 continue;
50 }
51 if ((edges = m_graph.edges.get(u)) == null || edges.size() == 0) {
52 stack.clear();
53 continue;
54 }
55
56 index = 0;
57 pick = rand.nextInt(edges.size());
58 for (Iterator<RDFEdge> iter = edges.iterator(); iter.hasNext(); ++index) {
59 edge = iter.next();
60 if (index == pick) {
61 stack.add(v = edge.m_dst);
62 visit(v);
63 m_writer.handleStatement(m_graph.getStatement(u, edge.m_label, edge.m_dst));
64 ++noOfStatements;
65 iter.remove();
66 }
67
68 }
69 }
70 }
71
72 protected void visit(int node) throws RDFHandlerException {
73 if (visited.contains(node)) return ;
74 visited.add(node);
75 List<Integer> list = m_graph.labels.get(node);
76 if (list == null) return ;
77 for (Iterator<Integer> iter = list.iterator(); iter.hasNext(); )
78 m_writer.handleStatement(m_graph.getStatement(node, iter.next()));
79 noOfStatements += list.size();
80 }
81
82 @Override
83 public void dispose() {
84 visited.clear();
85 }
86
87
88}