diff --git a/languagetool-server/src/main/java/org/languagetool/server/RemoteSynthesizer.java b/languagetool-server/src/main/java/org/languagetool/server/RemoteSynthesizer.java new file mode 100644 index 000000000000..958033b17804 --- /dev/null +++ b/languagetool-server/src/main/java/org/languagetool/server/RemoteSynthesizer.java @@ -0,0 +1,31 @@ +package org.languagetool.server; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import org.languagetool.AnalyzedToken; +import org.languagetool.Language; +import org.languagetool.Languages; +import org.languagetool.synthesis.Synthesizer; + +public class RemoteSynthesizer { + + protected List synthesize(String languageCode, String lemma, String postagRegexp) throws IOException { + Language lang = null; + lang = Languages.getLanguageForShortCode(languageCode); + Synthesizer synth = lang.getSynthesizer(); + AnalyzedToken at = new AnalyzedToken(lemma, postagRegexp, lemma); + String[] synthesizedForms = synth.synthesize(at, postagRegexp, true); + // removing duplicates. TODO: de-duplicate in the original synthesizer (?) + List results = new ArrayList<>(); + for (String s : synthesizedForms) { + if (!results.contains(s)) { + results.add(s); + } + } + return results; + + } + +} diff --git a/languagetool-server/src/test/java/org/languagetool/server/RemoteSynthesizerTest.java b/languagetool-server/src/test/java/org/languagetool/server/RemoteSynthesizerTest.java new file mode 100644 index 000000000000..f365e4618a62 --- /dev/null +++ b/languagetool-server/src/test/java/org/languagetool/server/RemoteSynthesizerTest.java @@ -0,0 +1,29 @@ +package org.languagetool.server; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +public class RemoteSynthesizerTest { + + @Test + public void testSynthesis() throws Exception { + RemoteSynthesizer remoteSynth = new RemoteSynthesizer(); + + assertEquals(remoteSynth.synthesize("de", "Äußerung","SUB:NOM:PLU:FEM").toString(), "[Äußerungen]"); + // Removing duplicates! + assertEquals(remoteSynth.synthesize("de", "Äußerung","SUB:.*:PLU:FEM").toString(), "[Äußerungen]"); + assertEquals(remoteSynth.synthesize("pt", "resolver","VMIS3S0").toString(), "[resolveu]"); + assertEquals(remoteSynth.synthesize("es", "cantar","VMIP1S0").toString(), "[canto]"); + assertEquals(remoteSynth.synthesize("es", "señor","NC.P.*").toString(), "[señoras, señores]"); + assertEquals(remoteSynth.synthesize("fr", "monde","N m p").toString(), "[mondes]"); + assertEquals(remoteSynth.synthesize("fr", "chanter","V ppa.*").toString(), "[chantées, chantée, chantés, chanté]"); + assertEquals(remoteSynth.synthesize("en", "be","VBZ").toString(), "[is]"); + assertEquals(remoteSynth.synthesize("en-US", "be","VBZ").toString(), "[is]"); + assertEquals(remoteSynth.synthesize("en-GB", "be","VBZ").toString(), "[is]"); + assertEquals(remoteSynth.synthesize("en", "be","V.*").toString(), "[be, was, were, being, been, are, is]"); + assertEquals(remoteSynth.synthesize("en", "be","N.*").toString(), "[]"); + + } + +}