diff --git a/src/main/java/org/ahocorasick/Emit.java b/src/main/java/org/ahocorasick/Emit.java index 21565a3..dfc96fb 100644 --- a/src/main/java/org/ahocorasick/Emit.java +++ b/src/main/java/org/ahocorasick/Emit.java @@ -1,16 +1,22 @@ package org.ahocorasick; public class Emit { - private final int position; + private final int start; + private final int end; private final String keyword; - public Emit(final int position, final String keyword) { - this.position = position; + public Emit(final int start, final int end, final String keyword) { + this.start = start; + this.end = end; this.keyword = keyword; } - public int getPosition() { - return this.position; + public int getStart() { + return this.start; + } + + public int getEnd() { + return this.end; } public String getKeyword() { diff --git a/src/main/java/org/ahocorasick/Trie.java b/src/main/java/org/ahocorasick/Trie.java index 4ba2443..16d8e88 100644 --- a/src/main/java/org/ahocorasick/Trie.java +++ b/src/main/java/org/ahocorasick/Trie.java @@ -92,7 +92,7 @@ public class Trie { Collection emits = currentState.emit(); if (emits != null && !emits.isEmpty()) { for (String emit : emits) { - collectedEmits.add(new Emit(position, emit)); + collectedEmits.add(new Emit(position-emit.length()+1, position, emit)); } } } diff --git a/src/test/java/org/ahocorasick/TrieTest.java b/src/test/java/org/ahocorasick/TrieTest.java index 0aa9d9c..ac16471 100644 --- a/src/test/java/org/ahocorasick/TrieTest.java +++ b/src/test/java/org/ahocorasick/TrieTest.java @@ -15,7 +15,7 @@ public class TrieTest { trie.addKeyword("abc"); Collection emits = trie.parseText("abc"); Iterator iterator = emits.iterator(); - checkEmit(iterator.next(), 2, "abc"); + checkEmit(iterator.next(), 0, 2, "abc"); } @Test @@ -24,7 +24,7 @@ public class TrieTest { trie.addKeyword("abc"); Collection emits = trie.parseText(" abc"); Iterator iterator = emits.iterator(); - checkEmit(iterator.next(), 3, "abc"); + checkEmit(iterator.next(), 1, 3, "abc"); } @Test @@ -35,7 +35,7 @@ public class TrieTest { trie.addKeyword("cde"); Collection emits = trie.parseText("bcd"); Iterator iterator = emits.iterator(); - checkEmit(iterator.next(), 2, "bcd"); + checkEmit(iterator.next(), 0, 2, "bcd"); } @Test @@ -48,9 +48,9 @@ public class TrieTest { Collection emits = trie.parseText("ushers"); assertEquals(3, emits.size()); // she @ 3, he @ 3, hers @ 5 Iterator iterator = emits.iterator(); - checkEmit(iterator.next(), 3, "she"); - checkEmit(iterator.next(), 3, "he"); - checkEmit(iterator.next(), 5, "hers"); + checkEmit(iterator.next(), 1, 3, "she"); + checkEmit(iterator.next(), 2, 3, "he"); + checkEmit(iterator.next(), 2, 5, "hers"); } @Test @@ -59,7 +59,7 @@ public class TrieTest { trie.addKeyword("hers"); Collection emits = trie.parseText("h he her hers"); Iterator iterator = emits.iterator(); - checkEmit(iterator.next(), 12, "hers"); + checkEmit(iterator.next(), 9, 12, "hers"); } @Test @@ -71,14 +71,15 @@ public class TrieTest { trie.addKeyword("tomatoes"); Collection emits = trie.parseText("2 cauliflowers, 3 tomatoes, 4 slices of veal, 100g broccoli"); Iterator iterator = emits.iterator(); - checkEmit(iterator.next(), 12, "cauliflower"); - checkEmit(iterator.next(), 25, "tomatoes"); - checkEmit(iterator.next(), 43, "veal"); - checkEmit(iterator.next(), 58, "broccoli"); + checkEmit(iterator.next(), 2, 12, "cauliflower"); + checkEmit(iterator.next(), 18, 25, "tomatoes"); + checkEmit(iterator.next(), 40, 43, "veal"); + checkEmit(iterator.next(), 51, 58, "broccoli"); } - private void checkEmit(Emit next, int expectedPosition, String expectedKeyword) { - assertEquals(expectedPosition, next.getPosition()); + private void checkEmit(Emit next, int expectedStart, int expectedEnd, String expectedKeyword) { + assertEquals(expectedStart, next.getStart()); + assertEquals(expectedEnd, next.getEnd()); assertEquals(expectedKeyword, next.getKeyword()); }