Emit now also contains the start position of the found keyword

This commit is contained in:
robert-bor 2014-01-30 09:36:53 +01:00
parent b689165eb9
commit 922da26965
3 changed files with 26 additions and 19 deletions

View File

@ -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() {

View File

@ -92,7 +92,7 @@ public class Trie {
Collection<String> 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));
}
}
}

View File

@ -15,7 +15,7 @@ public class TrieTest {
trie.addKeyword("abc");
Collection<Emit> emits = trie.parseText("abc");
Iterator<Emit> 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<Emit> emits = trie.parseText(" abc");
Iterator<Emit> 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<Emit> emits = trie.parseText("bcd");
Iterator<Emit> iterator = emits.iterator();
checkEmit(iterator.next(), 2, "bcd");
checkEmit(iterator.next(), 0, 2, "bcd");
}
@Test
@ -48,9 +48,9 @@ public class TrieTest {
Collection<Emit> emits = trie.parseText("ushers");
assertEquals(3, emits.size()); // she @ 3, he @ 3, hers @ 5
Iterator<Emit> 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<Emit> emits = trie.parseText("h he her hers");
Iterator<Emit> 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<Emit> emits = trie.parseText("2 cauliflowers, 3 tomatoes, 4 slices of veal, 100g broccoli");
Iterator<Emit> 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());
}