From 703045ff2e42d00a47bb1b59deb3ac3114325ea6 Mon Sep 17 00:00:00 2001 From: mivan Date: Thu, 23 Feb 2017 12:36:57 +0100 Subject: [PATCH] #23: no sentence break between date and hyphen followed by an uppercase letter --- src/quex_modules/definitions.qx | 9 ++++++++- src/quex_modules/snt.qx | 22 +++++++++++++++++----- test/test_default_snt_boundary.txt | 15 ++++++++++++++- 3 files changed, 39 insertions(+), 7 deletions(-) diff --git a/src/quex_modules/definitions.qx b/src/quex_modules/definitions.qx index 4213c67..03282b3 100644 --- a/src/quex_modules/definitions.qx +++ b/src/quex_modules/definitions.qx @@ -245,6 +245,8 @@ define { // SNTBEGINCHR: mondatkezdő karakter (pont is lehet, pl. a ".hu vita a // neten.") // TODO: whitespace karaktereket megadni rendesen!!! + // ENDPAR: zaro zarojelek + // ENDQUO: zaro idezojelek // ENDQUOPAR: záró záró- és idézőjelek // Ez a régi: ("\""|"''"|"'"|")"|"]") // Megj.: mondathatár (BOUNDARY) után is következhetnek (l. SNTEND) @@ -321,7 +323,12 @@ define { SNTBEGINCHR [: difference( {BASE_CLASS}, union([?!], {WSPACE}) ) :] - ENDQUOPAR [: intersection( {BASE_CLASS}, ["'\)\]] ) :] + ENDPAR [: intersection( {BASE_CLASS}, [\)\]}] ) :] + + ENDQUO [: intersection( {BASE_CLASS}, ["'”’] ) :] + + ENDQUOPAR [: union( {ENDQUO}, {ENDPAR} ) :] + /* ENDQUOPAR [: intersection( {BASE_CLASS}, ["'\)\]] ) :] */ INPARENTCHR [: intersection( {BASE_CLASS}, difference([^.!?\)], {NEWLINECHAR}) ) :] diff --git a/src/quex_modules/snt.qx b/src/quex_modules/snt.qx index 6ba631e..e3fd2c2 100644 --- a/src/quex_modules/snt.qx +++ b/src/quex_modules/snt.qx @@ -25,9 +25,11 @@ define { // \n\n már paragrafus törésnek számít, a mondat végét // is jelenti. A mondathatároló (.?!) csak opcionális a // mondat végén. - // SNTEND: mondat végződés + // SNTEND: mondatvegi opcionalis zarojelek es idezojelek // INPARENT: BRACKET_PART szabályhoz a zárójelen belüli karakterek között // megengedhető sortörések kezelése + // HYPHEN_OR_DASH: idezo- es kotojeles szabalynal a gondolatjelet is + // megengedjuk, esetleges szokozokkel egyutt CHARINSNTN {CHARINSNT}*{NEWLINE}?{CHARINSNT}* @@ -35,10 +37,13 @@ define { SIMPLESNT ({NEWLINE}?{SNTCHAR}+)* - SNTEND ({NEWLINE}?{SPACE}*({ENDQUOPAR}|{BOUNDARY}))?({SPACE}*({ENDQUOPAR}|{BOUNDARY}))* + /* SNTEND ({NEWLINE}?{SPACE}*({ENDPAR}|{BOUNDARY}))?({SPACE}*({ENDPAR}|{BOUNDARY}))* */ + /* SNTEND ({NEWLINE}?{SPACE}*({ENDQUOPAR}|{BOUNDARY}))?({SPACE}*({ENDQUOPAR}|{BOUNDARY}))* */ + SNTEND ({NEWLINE}?({ENDQUO}|({SPACE}*({ENDPAR}|{BOUNDARY}))))?({ENDQUO}|({SPACE}*({ENDPAR}|{BOUNDARY})))* INPARENT ({INPARENTCHR}{NEWLINE}?)* + HYPHEN_OR_DASH " "?("-"|"–")" "? // Mondatrészek szabályai: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // 0. Egyszerű mondat: megenged egyszeres sortöréseket a mondaton belül, de @@ -56,7 +61,7 @@ define { // Az egyszerű mondat ilyen szerkezetű: {SNTBEGIN}{SIMPLESNT}{SNTEND} // Minden összetettebb esetben az SNTBEGIN után következhet valamilyen // részmondat szerűség. Ezek lesznek itt definiálva: - // Megj.: a definíciók utáni kommentes definíciók az eredeti, BOUDARY-t + // Megj.: a definíciók utáni kommentes definíciók az eredeti, BOUNDARY-t // tartalmazó SIMPLESNT hatását állítják helyre // 1. Mondathatár túllépés: mondatzáró után kis betű @@ -77,11 +82,17 @@ define { // LOWERCASE_PART ({SIMPLESNT}{BOUNDARY}{SNTEND}{CHARINSNTN}{LOWER}) LOWERCASE_PART ({SIMPLESNT}{BOUNDARY}+{SNTEND}?{CHARINSNTN}{LOWER}) - // 2. Mondatzáró után idéző- vagy kötő jel. + // 2. Mondatzáró után idézőjel (esetleg kotojel is). // BE: A "Ne már!"-ral az a baj. // KI: A "Ne már!"-ral az a baj. // QUOTATIONMARK_PART ({SIMPLESNT}{BOUNDARY}{SNTEND}"-"{WORDCHAR}) - QUOTATIONMARK_PART ({SIMPLESNT}{BOUNDARY}+{SNTEND}"-"{WORDCHAR}) + QUOTATIONMARK_PART ({SIMPLESNT}{BOUNDARY}+"\""[\- ]?{LOWER}) + + // 2/b. Szam - kotojel - nagybetu + // BE: Januar 2. - Budapest + // KI: Januar 2. - Budapest + // QUOTATIONMARK_PART ({SIMPLESNT}{BOUNDARY}{SNTEND}"-"{WORDCHAR}) + HYPHEN_PART ({SIMPLESNT}[0-9]"."{HYPHEN_OR_DASH}{UPPER}) // 3. Pont után közvetlenül szóalkotó karakter a pontot magát leszámítva. // BE: A WWW.AKARMI.HU. @@ -109,6 +120,7 @@ mode PROGRAM { // egységesen kezelve {SNTBEGIN}(({LOWERCASE_PART} |{QUOTATIONMARK_PART} + |{HYPHEN_PART} |{WORDCHAR_PART} |{COMMA_PART} |{BRACKET_PART} diff --git a/test/test_default_snt_boundary.txt b/test/test_default_snt_boundary.txt index a4057e8..950a155 100644 --- a/test/test_default_snt_boundary.txt +++ b/test/test_default_snt_boundary.txt @@ -23,10 +23,23 @@ IN : - Szia Péterkém! Holnap találkozunk - mondta Gizi. OUT: - Szia Péterkém! Holnap találkozunk - mondta Gizi. -2. Mondatzáró után idéző- vagy kötő jel. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +2. Mondatzáró után idézőjel, esetleg kötőjellel. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +IN : A "Ne már!" után nincs mondatvég. +OUT: A "Ne már!" után nincs mondatvég. + IN : A "Ne már!"-ral az a baj. OUT: A "Ne már!"-ral az a baj. +# kontrol +IN : Elso. "Masodik." Harmadik. +OUT: Elso. "Masodik." Harmadik. + +2/b. Szam-kotojel-nagybetu +IN : Született: január 2. - Budapest. +OUT: Született: január 2. - Budapest. +IN : Született: január 2. – Budapest. +OUT: Született: január 2. – Budapest. + 3. Pont után közvetlenül szóalkotó karakter a pontot magát leszámítva. ~~~~~~~~ IN : A WWW.AKARMI.HU.