Add --pad option to optionally add padding symbols at text edges
1 ich ich PPER PPER _ _ _ _ 1
2 bin sein VAFIN VAFIN _ _ _ _ 1.000000
3 alex alex NE NE _ _ _ _ 0.565630
4 . . $. $. _ _ _ _ 1.000000
# text_id = TST_TST.00001
1 alex alex NE NE _ _ _ _ 0.565630
2 bin sein VAFIN VAFIN _ _ _ _ 1.000000
3 ich ich PPER PPER _ _ _ _ 1
4 . . $. $. _ _ _ _ 1.000000
# text_id = TST_TST.00002
1 ich ich PPER PPER _ _ _ _ 1
2 heiße heißen VAFIN VAFIN _ _ _ _ 1.000000
3 alex alex NE NE _ _ _ _ 0.565630
4 . . $. $. _ _ _ _ 1.000000
---->
. «END» «END» 3
«END» «END» «END» 3
«START» «START» «START» 3
«START» «START» ich 2
alex . «END» 2
«START» «START» alex 1
«START» alex bin 1
«START» ich bin 1
«START» ich heiße 1
alex bin ich 1
bin alex . 1
bin ich . 1
heiße alex . 1
ich . «END» 1
ich bin alex 1
ich heiße alex 1
Change-Id: Ib4826400da657787940805c616a0000ac089120d
diff --git a/src/test/java/org/ids_mannheim/WorkerTest.java b/src/test/java/org/ids_mannheim/WorkerTest.java
index c4d8758..5e0623f 100644
--- a/src/test/java/org/ids_mannheim/WorkerTest.java
+++ b/src/test/java/org/ids_mannheim/WorkerTest.java
@@ -6,6 +6,9 @@
import org.junit.jupiter.api.Test;
import java.io.*;
+import java.nio.file.FileSystems;
+import java.nio.file.Files;
+import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Map;
import java.util.Objects;
@@ -13,10 +16,12 @@
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.logging.Logger;
+import java.util.stream.Collectors;
import static org.junit.jupiter.api.Assertions.*;
class WorkerTest {
+ public static final String splitFreqlistRegex = "\\t(?=[0-9]+$)";
private ByteArrayOutputStream errContent;
private final PrintStream originalErr = System.err;
Worker worker;
@@ -68,7 +73,7 @@
false,
new WorkerNodePool(""),
new Progressbar(tempFile.length()),
- Logger.getLogger(TotalNGrams.class.getSimpleName()));
+ Logger.getLogger(TotalNGrams.class.getSimpleName()), false);
queue.add(0);
queue.add(-1);
@@ -118,7 +123,8 @@
true,
new WorkerNodePool(""),
new Progressbar(tempFile.length()),
- Logger.getLogger(TotalNGrams.class.getSimpleName()));
+ Logger.getLogger(TotalNGrams.class.getSimpleName()),
+ false);
queue.add(0);
queue.add(-1);
@@ -163,7 +169,8 @@
false,
new WorkerNodePool(""),
new Progressbar(tempFile.length()),
- Logger.getLogger(TotalNGrams.class.getSimpleName()));
+ Logger.getLogger(TotalNGrams.class.getSimpleName()),
+ false);
queue.add(0);
queue.add(-1);
@@ -208,7 +215,8 @@
false,
new WorkerNodePool(""),
new Progressbar(tempFile.length()),
- Logger.getLogger(TotalNGrams.class.getSimpleName()));
+ Logger.getLogger(TotalNGrams.class.getSimpleName()),
+ false);
queue.add(0);
queue.add(-1);
@@ -216,4 +224,53 @@
gold.forEach((key, value) -> assertEquals(value, map.get(key).intValue()));
}
+ @Test
+ void paddingWorks() throws IOException {
+ File tempFile = File.createTempFile("simple", ".conllu");
+ tempFile.deleteOnExit();
+ try (FileOutputStream out = new FileOutputStream(tempFile)) {
+ IOUtils.copy(Objects.requireNonNull(Thread.currentThread().getContextClassLoader()
+ .getResourceAsStream("simple.conllu")), out);
+ }
+
+ for (boolean with_lemma_and_pos : new boolean[]{false, true}) {
+ for (int n = 1; n <= 3; n++) {
+ ArrayList<String> fnames = new ArrayList<>();
+ fnames.add(tempFile.getAbsolutePath());
+
+ File tempFreqFile = File.createTempFile("simple", ".freq");
+ tempFreqFile.deleteOnExit();
+ try (FileOutputStream out = new FileOutputStream(tempFreqFile)) {
+ IOUtils.copy(Objects.requireNonNull(Thread.currentThread().getContextClassLoader()
+ .getResourceAsStream("simple_" + n + (with_lemma_and_pos ? "lp" : "") + "gram_padded.freq")), out);
+ }
+
+ Path path = FileSystems.getDefault().getPath(tempFreqFile.getAbsolutePath());
+ Map<String, Integer> gold = Files.lines(path)
+ .filter(s -> s.matches(splitFreqlistRegex))
+ .collect(Collectors.toMap(k -> k.split(splitFreqlistRegex)[0], v -> Integer.parseInt(v.split(splitFreqlistRegex)[1])));
+
+ map = new ConcurrentHashMap<>();
+ LinkedBlockingQueue<Integer> queue = new LinkedBlockingQueue<>(2);
+ worker = new Worker(
+ queue,
+ fnames,
+ n,
+ 1,
+ 1,
+ map,
+ with_lemma_and_pos,
+ false,
+ new WorkerNodePool(""),
+ new Progressbar(tempFile.length()),
+ Logger.getLogger(TotalNGrams.class.getSimpleName()),
+ true);
+
+ queue.add(0);
+ queue.add(-1);
+ worker.run();
+ gold.forEach((key, value) -> assertEquals(value, map.get(key).intValue()));
+ }
+ }
+ }
}
diff --git a/src/test/resources/simple.conllu b/src/test/resources/simple.conllu
new file mode 100644
index 0000000..2e52539
--- /dev/null
+++ b/src/test/resources/simple.conllu
@@ -0,0 +1,17 @@
+# text_id = TST_TST.00000
+1 ich ich PPER PPER _ _ _ _ 1
+2 bin sein VAFIN VAFIN _ _ _ _ 1.000000
+3 alex alex NE NE _ _ _ _ 0.565630
+4 . . $. $. _ _ _ _ 1.000000
+
+# text_id = TST_TST.00001
+1 alex alex NE NE _ _ _ _ 0.565630
+2 bin sein VAFIN VAFIN _ _ _ _ 1.000000
+3 ich ich PPER PPER _ _ _ _ 1
+4 . . $. $. _ _ _ _ 1.000000
+
+# text_id = TST_TST.00002
+1 ich ich PPER PPER _ _ _ _ 1
+2 heiße heißen VAFIN VAFIN _ _ _ _ 1.000000
+3 alex alex NE NE _ _ _ _ 0.565630
+4 . . $. $. _ _ _ _ 1.000000
diff --git a/src/test/resources/simple_1gram_padded.freq b/src/test/resources/simple_1gram_padded.freq
new file mode 100644
index 0000000..54522cb
--- /dev/null
+++ b/src/test/resources/simple_1gram_padded.freq
@@ -0,0 +1,7 @@
+. 3
+«END» 3
+«START» 3
+alex 3
+ich 3
+bin 2
+heiße 1
diff --git a/src/test/resources/simple_1lpgram_padded.freq b/src/test/resources/simple_1lpgram_padded.freq
new file mode 100644
index 0000000..ff8c4f7
--- /dev/null
+++ b/src/test/resources/simple_1lpgram_padded.freq
@@ -0,0 +1,7 @@
+. . $. 3
+alex alex NE 3
+ich ich PPER 3
+«END» «END» «STARTEND» 3
+«START» «START» «STARTEND» 3
+bin sein VAFIN 2
+heiße heißen VAFIN 1
diff --git a/src/test/resources/simple_2gram_padded.freq b/src/test/resources/simple_2gram_padded.freq
new file mode 100644
index 0000000..ba04a3a
--- /dev/null
+++ b/src/test/resources/simple_2gram_padded.freq
@@ -0,0 +1,13 @@
+. «END» 3
+«END» «END» 3
+«START» «START» 3
+«START» ich 2
+alex . 2
+«START» alex 1
+alex bin 1
+bin alex 1
+bin ich 1
+heiße alex 1
+ich . 1
+ich bin 1
+ich heiße 1
diff --git a/src/test/resources/simple_2lpgram_padded.freq b/src/test/resources/simple_2lpgram_padded.freq
new file mode 100644
index 0000000..7b1bd84
--- /dev/null
+++ b/src/test/resources/simple_2lpgram_padded.freq
@@ -0,0 +1,13 @@
+. . $. «END» «END» «STARTEND» 3
+«END» «END» «STARTEND» «END» «END» «STARTEND» 3
+«START» «START» «STARTEND» «START» «START» «STARTEND» 3
+alex alex NE . . $. 2
+«START» «START» «STARTEND» ich ich PPER 2
+alex alex NE bin sein VAFIN 1
+bin sein VAFIN alex alex NE 1
+bin sein VAFIN ich ich PPER 1
+heiße heißen VAFIN alex alex NE 1
+ich ich PPER . . $. 1
+ich ich PPER bin sein VAFIN 1
+ich ich PPER heiße heißen VAFIN 1
+«START» «START» «STARTEND» alex alex NE 1
diff --git a/src/test/resources/simple_3gram_padded.freq b/src/test/resources/simple_3gram_padded.freq
new file mode 100644
index 0000000..f54eede
--- /dev/null
+++ b/src/test/resources/simple_3gram_padded.freq
@@ -0,0 +1,16 @@
+. «END» «END» 3
+«END» «END» «END» 3
+«START» «START» «START» 3
+«START» «START» ich 2
+alex . «END» 2
+«START» «START» alex 1
+«START» alex bin 1
+«START» ich bin 1
+«START» ich heiße 1
+alex bin ich 1
+bin alex . 1
+bin ich . 1
+heiße alex . 1
+ich . «END» 1
+ich bin alex 1
+ich heiße alex 1
diff --git a/src/test/resources/simple_3lpgram_padded.freq b/src/test/resources/simple_3lpgram_padded.freq
new file mode 100644
index 0000000..19b899c
--- /dev/null
+++ b/src/test/resources/simple_3lpgram_padded.freq
@@ -0,0 +1,16 @@
+. . $. «END» «END» «STARTEND» «END» «END» «STARTEND» 3
+«END» «END» «STARTEND» «END» «END» «STARTEND» «END» «END» «STARTEND» 3
+«START» «START» «STARTEND» «START» «START» «STARTEND» «START» «START» «STARTEND» 3
+alex alex NE . . $. «END» «END» «STARTEND» 2
+«START» «START» «STARTEND» «START» «START» «STARTEND» ich ich PPER 2
+alex alex NE bin sein VAFIN ich ich PPER 1
+bin sein VAFIN alex alex NE . . $. 1
+bin sein VAFIN ich ich PPER . . $. 1
+heiße heißen VAFIN alex alex NE . . $. 1
+ich ich PPER . . $. «END» «END» «STARTEND» 1
+ich ich PPER bin sein VAFIN alex alex NE 1
+ich ich PPER heiße heißen VAFIN alex alex NE 1
+«START» «START» «STARTEND» alex alex NE bin sein VAFIN 1
+«START» «START» «STARTEND» ich ich PPER bin sein VAFIN 1
+«START» «START» «STARTEND» ich ich PPER heiße heißen VAFIN 1
+«START» «START» «STARTEND» «START» «START» «STARTEND» alex alex NE 1