Skip to content

Commit 5c70c8a

Browse files
committed
OPENNLP-1163 Sentence detector doesn't spot abbreviations next to punctuation
- 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
1 parent b74c6df commit 5c70c8a

File tree

3 files changed

+58
-1
lines changed

3 files changed

+58
-1
lines changed

opennlp-tools/src/test/java/opennlp/tools/sentdetect/SentenceDetectorMEItalianTest.java

+49
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@
1818
package opennlp.tools.sentdetect;
1919

2020
import java.io.IOException;
21+
import java.nio.charset.StandardCharsets;
22+
import java.util.ArrayList;
23+
import java.util.Arrays;
24+
import java.util.List;
2125
import java.util.Locale;
2226

2327
import org.junit.jupiter.api.Assertions;
@@ -27,6 +31,9 @@
2731
import org.junit.jupiter.params.provider.ValueSource;
2832

2933
import opennlp.tools.dictionary.Dictionary;
34+
import opennlp.tools.formats.ResourceAsStreamFactory;
35+
import opennlp.tools.util.InputStreamFactory;
36+
import opennlp.tools.util.PlainTextByLineStream;
3037

3138
/**
3239
* Tests for the {@link SentenceDetectorME} class.
@@ -90,4 +97,46 @@ void testSentDetectWithInlineAbbreviationsResultsInTwoSentences() {
9097
Assertions.assertEquals(2, probs.length);
9198
}
9299

100+
/*
101+
* Verifies OPENNLP-1163,
102+
* see: https://issues.apache.org/jira/browse/OPENNLP-1163
103+
*
104+
* Original problem:
105+
* "Even though the abbreviation "art." was included in the XML file,
106+
* the sentence detector breaks the sentence on instances of this
107+
* abbreviation preceded by article and apostrophe
108+
* (e.g. nell'art., dall'art., dell'art.)"
109+
*
110+
* This test demonstrates it is working, with "art." in the abbreviations xml file.
111+
*/
112+
@Test
113+
void testSentDetectOpenNLP1163() throws IOException {
114+
final SentenceDetectorME sentDetect = new SentenceDetectorME(sentdetectModel);
115+
116+
final String testResource = "/opennlp/tools/sentdetect/Test-Sample_OPENNLP-1163.txt";
117+
InputStreamFactory in = new ResourceAsStreamFactory(
118+
AbstractSentenceDetectorTest.class, testResource);
119+
List<String> detectedSentences = new ArrayList<>();
120+
try (PlainTextByLineStream stream = new PlainTextByLineStream(in, StandardCharsets.UTF_8)) {
121+
StringBuilder text = new StringBuilder();
122+
String line;
123+
do {
124+
line = stream.read();
125+
text.append(line);
126+
} while (line != null);
127+
128+
String[] sents = sentDetect.sentDetect(text.toString());
129+
detectedSentences.addAll(Arrays.asList(sents));
130+
}
131+
132+
// Test
133+
Assertions.assertEquals(11, detectedSentences.size());
134+
for (String sent : detectedSentences) {
135+
Assertions.assertFalse(hasMisplacedAbbreviationAtEnd(sent));
136+
}
137+
}
138+
139+
private boolean hasMisplacedAbbreviationAtEnd(String sent) {
140+
return sent.endsWith("dell'art.") || sent.endsWith("dall'art.") || sent.endsWith("nell'art.");
141+
}
93142
}

opennlp-tools/src/test/resources/opennlp/tools/sentdetect/Sentences_IT.txt

+6-1
Original file line numberDiff line numberDiff line change
@@ -488,4 +488,9 @@ L' abbandono delle fertilissime campagne ( la piana campana è riconosciuta tra
488488
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. della Pietà.
489489
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.
490490
Festa patronale Maria Ss. del Pane
491-
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.
491+
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.
492+
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.
493+
La rivalutazione è destinata ai "soggetti indicati nell'art. 73, co. 1, lettere a) e b)".
494+
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.
495+
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.
496+
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".
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
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 richiesto l'intervento professionale possa rientrare in una fatti specie che presenti i caratteri di un delitto perseguibile d'ufficio spetta al medico. Differente dal referto è rapporto, atto col quale il pubblico ufficiale o l'incaricato di pubblico servizio denuncia all'autorità giudiziaria un reato (delitto o contravvenzione) perseguibili d'ufficio, di cui abbia avuto notizia nell'esercizio o a causa delle sue funzioni o del servizio. Ad esso sono tenuti quindi tutti i sanitari con qualifica di pubblici ufficiali o incaricati di un pubblico servizio, è obbligatorio per tutti i reati, ed è un atto che fa fede sino a prova contraria. L'obbligo di referto è stabilito dall'art. 365 del codice penale. Riguarda specificamente il medico esercente attività da libero professionista (medici, psicologi, biologi, veterinari, ostetrica, infermiere, ecc.), ma anche il medico pubblico dipendente, nel momento in cui presta la sua assistenza privatamente, cioè quando abbiano effettuato una prestazione personale nei confronti di terzi quale l'assistenza, attività diagnostico-terapeutica, ovvero attività di tipo certificatorio. Il referto dovrà contenere:
2+
le generalità della persona assistita;
3+
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 delitto pel quale si debba procedere d'ufficio, ometta o ritarda di riferirne all'Autorità indicata nell'art. 361 è punito con la multa fino € 516.". Il secondo comma dello stesso articolo tuttavia afferma che la disposizione non si applica quando il referto esporrebbe l'assistito ad un procedimento penale. Il fatto che il medico, e in generale l'esercente una professione sanitaria, svolga la sua attività nell'ambito di istituzioni pubbliche non estingue i suo dovere, postulato dall'art. 32.1 Cost., di favorire l'accesso alle cure sanitarie pure a chi abbia qualche motivo per temere la giustizia penale.

0 commit comments

Comments
 (0)