This is an automated email from the ASF dual-hosted git repository.
mawiesne pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/opennlp.git
The following commit(s) were added to refs/heads/main by this push:
new d455e330 OPENNLP-1163 Sentence detector doesn't spot abbreviations
next to punctuation (#570)
d455e330 is described below
commit d455e330bab2883d35038bbe64ce11da78c27479
Author: Martin Wiesner <[email protected]>
AuthorDate: Mon Dec 25 18:46:20 2023 +0100
OPENNLP-1163 Sentence detector doesn't spot abbreviations next to
punctuation (#570)
- enhances Italian corpus from OPENNLP-1163 with further examples for use
of "nell'art."
- adds related test case to SentenceDetectorMEItalianTest to verify
abbreviated "articolo" (art.) is handled correctly
---
.../sentdetect/SentenceDetectorMEItalianTest.java | 49 ++++++++++++++++++++++
.../opennlp/tools/sentdetect/Sentences_IT.txt | 7 +++-
.../tools/sentdetect/Test-Sample_OPENNLP-1163.txt | 3 ++
3 files changed, 58 insertions(+), 1 deletion(-)
diff --git
a/opennlp-tools/src/test/java/opennlp/tools/sentdetect/SentenceDetectorMEItalianTest.java
b/opennlp-tools/src/test/java/opennlp/tools/sentdetect/SentenceDetectorMEItalianTest.java
index 1f46a024..24330727 100644
---
a/opennlp-tools/src/test/java/opennlp/tools/sentdetect/SentenceDetectorMEItalianTest.java
+++
b/opennlp-tools/src/test/java/opennlp/tools/sentdetect/SentenceDetectorMEItalianTest.java
@@ -18,6 +18,10 @@
package opennlp.tools.sentdetect;
import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
import java.util.Locale;
import org.junit.jupiter.api.Assertions;
@@ -27,6 +31,9 @@ import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
import opennlp.tools.dictionary.Dictionary;
+import opennlp.tools.formats.ResourceAsStreamFactory;
+import opennlp.tools.util.InputStreamFactory;
+import opennlp.tools.util.PlainTextByLineStream;
/**
* Tests for the {@link SentenceDetectorME} class.
@@ -90,4 +97,46 @@ public class SentenceDetectorMEItalianTest extends
AbstractSentenceDetectorTest
Assertions.assertEquals(2, probs.length);
}
+ /*
+ * Verifies OPENNLP-1163,
+ * see: https://issues.apache.org/jira/browse/OPENNLP-1163
+ *
+ * Original problem:
+ * "Even though the abbreviation "art." was included in the XML file,
+ * the sentence detector breaks the sentence on instances of this
+ * abbreviation preceded by article and apostrophe
+ * (e.g. nell'art., dall'art., dell'art.)"
+ *
+ * This test demonstrates it is working, with "art." in the abbreviations
xml file.
+ */
+ @Test
+ void testSentDetectOpenNLP1163() throws IOException {
+ final SentenceDetectorME sentDetect = new
SentenceDetectorME(sentdetectModel);
+
+ final String testResource =
"/opennlp/tools/sentdetect/Test-Sample_OPENNLP-1163.txt";
+ InputStreamFactory in = new ResourceAsStreamFactory(
+ AbstractSentenceDetectorTest.class, testResource);
+ List<String> detectedSentences = new ArrayList<>();
+ try (PlainTextByLineStream stream = new PlainTextByLineStream(in,
StandardCharsets.UTF_8)) {
+ StringBuilder text = new StringBuilder();
+ String line;
+ do {
+ line = stream.read();
+ text.append(line);
+ } while (line != null);
+
+ String[] sents = sentDetect.sentDetect(text.toString());
+ detectedSentences.addAll(Arrays.asList(sents));
+ }
+
+ // Test
+ Assertions.assertEquals(11, detectedSentences.size());
+ for (String sent : detectedSentences) {
+ Assertions.assertFalse(hasMisplacedAbbreviationAtEnd(sent));
+ }
+ }
+
+ private boolean hasMisplacedAbbreviationAtEnd(String sent) {
+ return sent.endsWith("dell'art.") || sent.endsWith("dall'art.") ||
sent.endsWith("nell'art.");
+ }
}
diff --git
a/opennlp-tools/src/test/resources/opennlp/tools/sentdetect/Sentences_IT.txt
b/opennlp-tools/src/test/resources/opennlp/tools/sentdetect/Sentences_IT.txt
index 9aed65a2..25ac103c 100644
--- a/opennlp-tools/src/test/resources/opennlp/tools/sentdetect/Sentences_IT.txt
+++ b/opennlp-tools/src/test/resources/opennlp/tools/sentdetect/Sentences_IT.txt
@@ -488,4 +488,9 @@ L' abbandono delle fertilissime campagne ( la piana campana
è riconosciuta tra
Anche se l'impianto del paese restava sostanzialmente quello medievale,
sorsero nuovi fabbricati e numerose chiese: Matrice ( riedificata ), San Luca (
abbazia 1514 ), San Marco ( monastero, riedificato nel 1593 ), San Michele
Arcangelo, Sant' Oliva, Maria SS. d' Itria, Madonna della Catena, San
Sebastiano, Santa Caterina, Sant' Antonio Abate, San Francesco ( convento dei
Cappuccini 1579 ), Maria SS. dei Poveri, San Nicolò Magno, Santo Stefano (
ossia Crocefisso ), Santa Marina, Maria SS [...]
La chiesa parrocchiale dei SS. Gervasio e Protasio fu realizzata su una chiesa
pre-esistente negli anni 1771-1772 e presenta numerose testimonianze di
architettura, pittura e scultura della fine del XVIII secolo.
Festa patronale Maria Ss. del Pane
-Si tratta di una festa antica ( nel 2007, infatti, si festeggia il terzo
centenario del miracolo della SS. Madonna del Pane a Novoli ) ed anche molto
sentita dai novolesi, legati alla Vergine del Pane che salvò, secondo la
leggenda, la comunità da una grave epidemia nel lontano 1707.
\ No newline at end of file
+Si tratta di una festa antica ( nel 2007, infatti, si festeggia il terzo
centenario del miracolo della SS. Madonna del Pane a Novoli ) ed anche molto
sentita dai novolesi, legati alla Vergine del Pane che salvò, secondo la
leggenda, la comunità da una grave epidemia nel lontano 1707.
+Sempre nell'art. 81 ritroviamo che nel caso la legge non venisse approvata
enbtro 31/12 c'è la possibilità di applicare un bilancio provvisorio ma solo
per i 4 mesi successivi al 31/12, questo accade quando l'intervento del governo
potrebbe provocare gravi scompensi al paese, oppure quando la maggioranza
parlamentare che ha dato la fiducia viene meno.
+La rivalutazione è destinata ai "soggetti indicati nell'art. 73, co. 1,
lettere a) e b)".
+Pertanto, delle due l'una: o la locuzione "atto pubblico" inserita nell'art.
483 c.p. è un elemento descrittivo della fattispecie ovvero è un elemento
normativo della medesima.
+Il Gruppo ad hoc non ha neppure ritenuto necessario inserire nell'art. 6 n. 1
una disposizione intesa ad escludere l'applicazione della norma al convenuto
che abbia stipulato con l'attore una clausola attributiva di competenza
conforme all'art. 23 della Convenzione.
+Invariato l'enunciato, le interpretazioni si sono gradualmente evolute:
l'accostamento tra le nozioni, operato nell'art. 9 Cost., ha permesso invero di
attualizzare il testo costituzionale, estendendo la tutela non al solo
paesaggio quale creazione originaria ed eminente della natura, ma al prodotto
dell'interazione storica tra uomo e natura, con la correlata esigenza di
"regolazione conformativa globale del territorio".
\ No newline at end of file
diff --git
a/opennlp-tools/src/test/resources/opennlp/tools/sentdetect/Test-Sample_OPENNLP-1163.txt
b/opennlp-tools/src/test/resources/opennlp/tools/sentdetect/Test-Sample_OPENNLP-1163.txt
new file mode 100644
index 00000000..126e296f
--- /dev/null
+++
b/opennlp-tools/src/test/resources/opennlp/tools/sentdetect/Test-Sample_OPENNLP-1163.txt
@@ -0,0 +1,3 @@
+Il referto, in diritto italiano, è l'atto col quale l'esercente una
professione sanitaria riferisce all'autorità giudiziaria di avere prestato la
propria assistenza od opera in casi che possono presentare i caratteri di un
delitto perseguibile d'ufficio. È un atto di natura puramente informativa, ma
la cui presentazione è obbligatoria per legge, avente ad oggetto gli interventi
professionali concernente delitti a perseguibilità d'ufficio. L'obbligo di
accertare se il caso che ha richiest [...]
+le generalità della persona assistita;
+il luogo in cui il medico ha prestato soccorso; le notizie che servono a
stabilire le circostanze del fatto, i mezzi e gli effetti che ha causato o che
può causare (bisogna essere certi dell'avvenuto fatto delittuoso, la denuncia
non contiene dati biologici). L'art. 365 del codice penale italiano rubricato
"Omissione del referto" dispone: "chiunque, avendo nell'esercizio di una
professione sanitaria prestato la propria assistenza od opera in casi che
possono presentare i caratteri di un [...]
\ No newline at end of file