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

Reply via email to