diff --git a/.gitignore b/.gitignore index 942a5d3..7b0cbc7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ .idea *.iml -src/main/java/Main.java \ No newline at end of file +src/main/java/Main.java +*.txt +docs \ No newline at end of file diff --git a/src/main/java/org/ahocorasick/interval/Interval.java b/src/main/java/org/ahocorasick/interval/Interval.java index b457500..c43dd7c 100644 --- a/src/main/java/org/ahocorasick/interval/Interval.java +++ b/src/main/java/org/ahocorasick/interval/Interval.java @@ -52,6 +52,13 @@ public class Interval implements Intervalable { return -1; } Intervalable other = (Intervalable)o; - return this.start - other.getStart(); + int comparison = this.start - other.getStart(); + return comparison != 0 ? comparison : this.end - other.getEnd(); } + + @Override + public String toString() { + return this.start + ":" + this.end; + } + } diff --git a/src/main/java/org/ahocorasick/trie/Emit.java b/src/main/java/org/ahocorasick/trie/Emit.java index d6644ef..60c1f9e 100644 --- a/src/main/java/org/ahocorasick/trie/Emit.java +++ b/src/main/java/org/ahocorasick/trie/Emit.java @@ -16,4 +16,9 @@ public class Emit extends Interval implements Intervalable { return this.keyword; } + @Override + public String toString() { + return super.toString() + "=" + this.keyword; + } + } diff --git a/src/test/java/org/ahocorasick/trie/TrieTest.java b/src/test/java/org/ahocorasick/trie/TrieTest.java index 17019f9..5802544 100644 --- a/src/test/java/org/ahocorasick/trie/TrieTest.java +++ b/src/test/java/org/ahocorasick/trie/TrieTest.java @@ -102,12 +102,33 @@ public class TrieTest { trie.addKeyword("cba"); trie.addKeyword("ababc"); Collection emits = trie.parseText("ababcbab"); + assertEquals(2, emits.size()); Iterator iterator = emits.iterator(); // With overlaps: ab@1, ab@3, ababc@4, cba@6, ab@7 checkEmit(iterator.next(), 0, 4, "ababc"); checkEmit(iterator.next(), 6, 7, "ab"); } + @Test + public void startOfChurchillSpeech() { + Trie trie = new Trie().removeOverlaps(); + trie.addKeyword("T"); + trie.addKeyword("u"); + trie.addKeyword("ur"); + trie.addKeyword("r"); + trie.addKeyword("urn"); + trie.addKeyword("ni"); + trie.addKeyword("i"); + trie.addKeyword("in"); + trie.addKeyword("n"); + trie.addKeyword("urning"); + Collection emits = trie.parseText("Turning"); + for (Emit emit : emits) { + System.out.println(emit.getStart()+":"+emit.getEnd()+"="+emit.getKeyword()); + } + assertEquals(2, emits.size()); + } + private void checkEmit(Emit next, int expectedStart, int expectedEnd, String expectedKeyword) { assertEquals(expectedStart, next.getStart()); assertEquals(expectedEnd, next.getEnd());