Search in sources :

Example 1 with Node

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");
}
Also used : AtomicInteger(java.util.concurrent.atomic.AtomicInteger) PatriciaTrie(org.trie4j.patricia.PatriciaTrie) Node(org.trie4j.Node) WikipediaTitles(org.trie4j.test.WikipediaTitles) Trie(org.trie4j.Trie) PatriciaTrie(org.trie4j.patricia.PatriciaTrie) LapTimer(org.trie4j.test.LapTimer) NodeVisitor(org.trie4j.NodeVisitor) PrintWriter(java.io.PrintWriter)

Example 2 with Node

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());
}
Also used : PatriciaTrie(org.trie4j.patricia.PatriciaTrie) Node(org.trie4j.Node) ByteArrayOutputStream(java.io.ByteArrayOutputStream) ObjectOutputStream(java.io.ObjectOutputStream) ByteArrayInputStream(java.io.ByteArrayInputStream) PatriciaTrie(org.trie4j.patricia.PatriciaTrie) Trie(org.trie4j.Trie) ObjectInputStream(java.io.ObjectInputStream) Test(org.junit.Test) AbstractTermIdTrieTest(org.trie4j.AbstractTermIdTrieTest)

Example 3 with Node

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));
        }
    }
}
Also used : AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Node(org.trie4j.Node) LinkedList(java.util.LinkedList) Pair(org.trie4j.util.Pair)

Example 4 with Node

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));
        }
    }
}
Also used : AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Node(org.trie4j.Node) LinkedList(java.util.LinkedList) Pair(org.trie4j.util.Pair)

Example 5 with Node

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;
}
Also used : Node(org.trie4j.Node) ArrayList(java.util.ArrayList)

Aggregations

Node (org.trie4j.Node)31 Test (org.junit.Test)15 AbstractTermIdTrieTest (org.trie4j.AbstractTermIdTrieTest)13 Trie (org.trie4j.Trie)10 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)9 ByteArrayInputStream (java.io.ByteArrayInputStream)8 ByteArrayOutputStream (java.io.ByteArrayOutputStream)8 ObjectInputStream (java.io.ObjectInputStream)8 ObjectOutputStream (java.io.ObjectOutputStream)8 NodeVisitor (org.trie4j.NodeVisitor)8 PatriciaTrie (org.trie4j.patricia.PatriciaTrie)6 LinkedList (java.util.LinkedList)3 PrintWriter (java.io.PrintWriter)2 ArrayList (java.util.ArrayList)2 AbstractImmutableTrieTest (org.trie4j.AbstractImmutableTrieTest)2 LapTimer (org.trie4j.test.LapTimer)2 WikipediaTitles (org.trie4j.test.WikipediaTitles)2 Pair (org.trie4j.util.Pair)2 OutputStreamWriter (java.io.OutputStreamWriter)1 HashMap (java.util.HashMap)1