From 56bab47cc82ca9a39b5906c496f4cec86782d50a Mon Sep 17 00:00:00 2001 From: Manuel Stoeckel Date: Mon, 25 Nov 2019 14:46:05 +0100 Subject: [PATCH] More fixes & tests --- pom.xml | 2 +- .../org/biofid/deep_eos/DeepEosTagger.java | 5 ++- src/main/resources/python/model.py | 2 +- src/test/java/TestDeepEosTagger.java | 45 ++++++++++++++++--- 4 files changed, 44 insertions(+), 10 deletions(-) diff --git a/pom.xml b/pom.xml index c9f0cd4..bf00d04 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.hucompute.textimager.uima deep-eos-uima - 1.1.1 + 1.1.2 UTF-8 diff --git a/src/main/java/org/biofid/deep_eos/DeepEosTagger.java b/src/main/java/org/biofid/deep_eos/DeepEosTagger.java index 882fd63..66d70bf 100644 --- a/src/main/java/org/biofid/deep_eos/DeepEosTagger.java +++ b/src/main/java/org/biofid/deep_eos/DeepEosTagger.java @@ -25,6 +25,7 @@ import java.util.Arrays; import java.util.Objects; import java.util.Properties; +import java.util.regex.Pattern; /** * Created on 09.10.19. @@ -109,7 +110,7 @@ public void process(CAS cas) throws AnalysisEngineProcessException { Sentence sentence = new Sentence(jCas, begin, Math.toIntExact(end) + 1); sentence.setId(String.valueOf(i)); jCas.addFsToIndexes(sentence); - begin = Math.toIntExact(end) + 1; + begin = Math.toIntExact(end) + 2; } Sentence sentence = new Sentence(jCas, begin, jCas.getDocumentText().length()); sentence.setId(String.valueOf(result.size())); @@ -119,7 +120,7 @@ public void process(CAS cas) throws AnalysisEngineProcessException { System.out.println(); for (Sentence sent : JCasUtil.select(jCas, Sentence.class)) { System.out.print(sent); - System.out.println(" text:" + sent.getCoveredText()); + System.out.println(" text: \"" + sent.getCoveredText() + "\""); } } } catch (JepException | ClassCastException e) { diff --git a/src/main/resources/python/model.py b/src/main/resources/python/model.py index b288402..0513f15 100644 --- a/src/main/resources/python/model.py +++ b/src/main/resources/python/model.py @@ -49,7 +49,7 @@ def tag(self, text) -> List[int]: features = np.array([i[1] for i in data_set]) predicted = self.deep_eos_model.predict(features) - for j in range(predicted.shape[0]): + for j in range(len(predicted) if type(predicted) is list else predicted.shape[0]): if predicted[j][0] >= 0.5: eos_pos.append(int(eos_positions[j])) diff --git a/src/test/java/TestDeepEosTagger.java b/src/test/java/TestDeepEosTagger.java index f56a78a..85be027 100644 --- a/src/test/java/TestDeepEosTagger.java +++ b/src/test/java/TestDeepEosTagger.java @@ -1,10 +1,15 @@ +import de.tudarmstadt.ukp.dkpro.core.api.segmentation.type.Sentence; import org.apache.uima.UIMAException; import org.apache.uima.analysis_engine.AnalysisEngine; import org.apache.uima.fit.factory.AnalysisEngineFactory; import org.apache.uima.fit.factory.JCasFactory; import org.apache.uima.fit.pipeline.SimplePipeline; +import org.apache.uima.fit.util.JCasUtil; import org.apache.uima.jcas.JCas; +import org.apache.uima.resource.ResourceInitializationException; import org.biofid.deep_eos.DeepEosTagger; +import org.junit.Before; +import org.junit.BeforeClass; import org.junit.Test; /** @@ -12,12 +17,40 @@ */ public class TestDeepEosTagger { - @Test - public void test() throws UIMAException { - JCas jCas = JCasFactory.createText("Psychotria viridis wächst als zwei bis vier Meter hoher Baum mit glatter Borke. Die gegenständigen Blätter sind sitzend oder bis zu acht Millimeter lang gestielt. Die Blattspreite ist elliptisch mit spitzem Ende und keilförmiger Basis. Im getrockneten Zustand werden sie rotbraun bis grünbraun. Die Nebenblätter sind eiförmig, leicht zugespitzt und im Zentrum dunkler. Sie fallen später ab und hinterlassen am Stängel Narben zwischen zwei benachbarten Blättern. Die Blütenstände sind dreifach verzweigte Rispen oder kompakte Zymen, die terminal oder scheinbar achselständig stehen. Dabei sind als charakteristisches Merkmal der Art alle sekundären Achsen außer den jeweils ersten zwei stark verkürzt. Die sitzenden Blüten haben einen becherförmigen Kelch von etwa 0,5 Millimetern Länge. Selten sind fünf Kelchblätter als Einzelblätter erkennbar. Die Blütenkrone ist als weiße, zylindrische Röhre von ein bis 1,5 Millimeter Länge ausgeprägt. Sie ist im Inneren stark behaart und endet in fünf lanzettlichen Spitzen. Fünf Staubgefäße erreichen ebenso wie der Griffel eine Länge von etwa 2,5 Millimetern. Die Frucht ist eine bei Reife rote Steinfrucht, die sich beim Trocknen rotbraun verfärbt. Sie wird vom Kelch gekrönt und weist auf der Oberseite vier bis fünf, auf der Unterseite zwei Furchen auf."); - AnalysisEngine analysisEngine = AnalysisEngineFactory.createEngine(DeepEosTagger.class, + private static AnalysisEngine engine; + + @BeforeClass + public static void setUpClass() throws ResourceInitializationException { + engine = AnalysisEngineFactory.createEngine(DeepEosTagger.class, DeepEosTagger.PARAM_MODEL_NAME, "biofid", DeepEosTagger.PARAM_VERBOSE, true); - SimplePipeline.runPipeline(jCas, analysisEngine); } -} + + @Test + public void test1() throws UIMAException { + JCas jCas = JCasFactory.createText("Psychotria viridis wächst als zwei bis vier Meter hoher Baum mit glatter Borke. Die gegenständigen Blätter sind sitzend oder bis zu acht Millimeter lang gestielt. Die Blattspreite ist elliptisch mit spitzem Ende und keilförmiger Basis. Im getrockneten Zustand werden sie rotbraun bis grünbraun. Die Nebenblätter sind eiförmig, leicht zugespitzt und im Zentrum dunkler. Sie fallen später ab und hinterlassen am Stängel Narben zwischen zwei benachbarten Blättern. Die Blütenstände sind dreifach verzweigte Rispen oder kompakte Zymen, die terminal oder scheinbar achselständig stehen. Dabei sind als charakteristisches Merkmal der Art alle sekundären Achsen außer den jeweils ersten zwei stark verkürzt. Die sitzenden Blüten haben einen becherförmigen Kelch von etwa 0,5 Millimetern Länge. Selten sind fünf Kelchblätter als Einzelblätter erkennbar. Die Blütenkrone ist als weiße, zylindrische Röhre von ein bis 1,5 Millimeter Länge ausgeprägt. Sie ist im Inneren stark behaart und endet in fünf lanzettlichen Spitzen. Fünf Staubgefäße erreichen ebenso wie der Griffel eine Länge von etwa 2,5 Millimetern. Die Frucht ist eine bei Reife rote Steinfrucht, die sich beim Trocknen rotbraun verfärbt. Sie wird vom Kelch gekrönt und weist auf der Oberseite vier bis fünf, auf der Unterseite zwei Furchen auf."); + SimplePipeline.runPipeline(jCas, engine); + assert JCasUtil.select(jCas, Sentence.class).size() == 15; + } + + @Test + public void test2() throws UIMAException { + JCas jCas = JCasFactory.createText("Psychotria viridis wächst als zwei bis vier Meter hoher Baum mit glatter Borke"); + SimplePipeline.runPipeline(jCas, engine); + assert JCasUtil.select(jCas, Sentence.class).size() == 1; + } + + @Test + public void test3() throws UIMAException { + JCas jCas = JCasFactory.createText("Psychotria viridis wächst als zwei bis vier Meter hoher Baum mit glatter Borke. Die gegenständigen Blätter sind sitzend oder bis zu acht Millimeter lang gestielt."); + SimplePipeline.runPipeline(jCas, engine); + assert JCasUtil.select(jCas, Sentence.class).size() == 2; + } + + @Test + public void test4() throws UIMAException { + JCas jCas = JCasFactory.createText("Psychotria viridis wächst als zwei bis vier Meter hoher Baum mit glatter Borke.. Die gegenständigen Blätter sind sitzend oder bis zu acht Millimeter lang gestielt."); + SimplePipeline.runPipeline(jCas, engine); + assert JCasUtil.select(jCas, Sentence.class).size() == 2; + } +} \ No newline at end of file