use of org.trie4j.Node in project trie4j by takawitter.
the class TestWikipedia method main.
public static void main(String[] args) throws Exception {
System.out.println("--- building patricia trie ---");
Trie trie = new PatriciaTrie();
// Trie trie = new TailPatriciaTrie(new ConcatTailBuilder());
int c = 0;
LapTimer t1 = new LapTimer();
for (String word : new WikipediaTitles()) {
trie.insert(word);
c++;
if (c == maxCount)
break;
}
System.out.println("done in " + t1.lapMillis() + " millis.");
System.out.println(c + "entries in ja wikipedia titles.");
System.out.println("-- building double array.");
t1.reset();
// Trie da = new TailDoubleArray(trie, 65536, new ConcatTailBuilder());
// Trie da = new DoubleArray(trie, 65536);
Trie da = trie;
trie = null;
System.out.println("done in " + t1.lapMillis() + " millis.");
final AtomicInteger count = new AtomicInteger();
Algorithms.traverseByBreadth(da.getRoot(), new NodeVisitor() {
@Override
public boolean visit(Node node, int nest) {
count.incrementAndGet();
return true;
}
});
System.out.println(count + " nodes in trie.");
da.dump(new PrintWriter(System.out));
verify(da);
System.out.println("---- common prefix search ----");
System.out.println("-- for 東京国際フォーラム");
for (String s : da.commonPrefixSearch("東京国際フォーラム")) {
System.out.println(s);
}
System.out.println("-- for 大阪城ホール");
for (String s : da.commonPrefixSearch("大阪城ホール")) {
System.out.println(s);
}
System.out.println("---- predictive search ----");
System.out.println("-- for 大阪城");
for (String s : da.predictiveSearch("大阪城")) {
System.out.println(s);
}
System.out.println("---- done ----");
Thread.sleep(10000);
da.contains("hello");
}
use of org.trie4j.Node in project trie4j by takawitter.
the class LongsConstantTimeSelect0TailLOUDSTrieWithConcatTailArrayTest method test_save_load.
@Test
public void test_save_load() throws Exception {
String[] words = { "こんにちは", "さようなら", "おはよう", "おおきなかぶ", "おおやまざき" };
Trie trie = new PatriciaTrie();
for (String w : words) trie.insert(w);
TailLOUDSTrie lt = new TailLOUDSTrie(trie);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
lt.writeExternal(oos);
oos.flush();
lt = new TailLOUDSTrie();
lt.readExternal(new ObjectInputStream(new ByteArrayInputStream(baos.toByteArray())));
for (String w : words) {
Assert.assertTrue(lt.contains(w));
}
Assert.assertFalse(lt.contains("おやすみなさい"));
StringBuilder b = new StringBuilder();
Node[] children = lt.getRoot().getChildren();
for (Node n : children) {
char[] letters = n.getLetters();
b.append(letters[0]);
}
Assert.assertEquals("おこさ", b.toString());
}
use of org.trie4j.Node in project trie4j by takawitter.
the class Algorithms method traverseByDepth.
public static void traverseByDepth(Node root, NodeVisitor visitor) {
Deque<Pair<Node, Integer>> nodeAndNests = new LinkedList<Pair<Node, Integer>>();
nodeAndNests.offer(Pair.create(root, 0));
Pair<Node, Integer> nodeAndNest = null;
while ((nodeAndNest = nodeAndNests.poll()) != null) {
Node node = nodeAndNest.getFirst();
int nest = nodeAndNest.getSecond();
if (!visitor.visit(node, nest))
return;
nest++;
Node[] children = node.getChildren();
int n = children.length;
for (int i = n - 1; i >= 0; i--) {
nodeAndNests.offerFirst(Pair.create(children[i], nest));
}
}
}
use of org.trie4j.Node in project trie4j by takawitter.
the class Algorithms method traverseByBreadth.
public static void traverseByBreadth(Node root, NodeVisitor visitor) {
Queue<Pair<Node, Integer>> nodeAndNests = new LinkedList<Pair<Node, Integer>>();
nodeAndNests.offer(Pair.create(root, 0));
Pair<Node, Integer> nodeAndNest = null;
while ((nodeAndNest = nodeAndNests.poll()) != null) {
Node node = nodeAndNest.getFirst();
int nest = nodeAndNest.getSecond();
if (!visitor.visit(node, nest))
return;
nest++;
for (Node child : node.getChildren()) {
nodeAndNests.offer(Pair.create(child, nest));
}
}
}
use of org.trie4j.Node in project trie4j by takawitter.
the class Algorithms method commonPrefixSearch.
public Iterable<String> commonPrefixSearch(Node root, String query) {
List<String> ret = new ArrayList<String>();
char[] queryChars = query.toCharArray();
int cur = 0;
Node node = root;
while (node != null) {
char[] letters = node.getLetters();
if (letters.length > (queryChars.length - cur))
return ret;
for (int i = 0; i < letters.length; i++) {
if (letters[i] != queryChars[cur + i])
return ret;
}
if (node.isTerminate()) {
ret.add(new String(queryChars, 0, cur + letters.length));
}
cur += letters.length;
if (queryChars.length == cur)
return ret;
node = node.getChild(queryChars[cur]);
}
return ret;
}
Aggregations