From 8782fc34f14a78009172d0d94a0257fd592385f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9mence=20Laurent?= <clemence@opensquare.eu> Date: Thu, 5 Jan 2023 16:14:32 +0100 Subject: [PATCH] =?UTF-8?q?debug=20perl=20regex=20listes=20+=20ajouts=20po?= =?UTF-8?q?ur=20g=C3=A9rer=20diff=C3=A9rents=20cas=20d'effets=20de=20liste?= =?UTF-8?q?s=20+=20modifs=20r=C3=A9perctut=C3=A9es=20en=20python?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- alSentenceSplitting.pm | 15 ++++++++++++++- alSentenceSplitting.py | 9 ++++++++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/alSentenceSplitting.pm b/alSentenceSplitting.pm index 0fcd955..9604ae5 100644 --- a/alSentenceSplitting.pm +++ b/alSentenceSplitting.pm @@ -63,6 +63,7 @@ sub altok_split_sentences { $s =~ s/< *br *(?:\/ *)?>/<\/s><s type=\"br\">/g; + if ($lang =~ /^(ja|zh|tw)(_|$)/) { $s =~ s/([â‘ -â‘«â—※*■◆→⇒◇◎★☆〇·•])/<l\/>$1/g; $s =~ s/(?<![1-91-9〇零一二三四五å…七八ä¹â—‹å百åƒè¬å„„兆万亿])( +)(â—‹ +)(?![1-91-9〇零一二三四五å…七八ä¹â—‹å百åƒè¬å„„兆万亿])/$1<l\/>$2/g; @@ -92,6 +93,7 @@ sub altok_split_sentences { $s =~ s/([^ ])( +)<l\/>/$1<\/s>$2<s type=\"li\">/g; $s =~ s/<l\/>//g; + #TODO check, j'ai ajouté un espace entre <s et type="br,li" pour bien detokeniser ensuite $s =~ s/<s type="br"><\/s>( *)<s type="li">/$1<s type="br,li">/g; @@ -141,18 +143,29 @@ sub altok_split_sentences { } } } + - if (/( - .*){8,}/) { # à partir de 8 (choisi au plus juste), on va considérer qu'on est face à une liste + if ($s =~ /( - .*?){8,}/) { # à partir de 8 (choisi au plus juste), on va considérer qu'on est face à une liste #ajout d'un espace en plus entre s et type $s =~ s/ - /<\/s> <s type=\"li\">- /g; } + + $s =~ s/<s>( *)<\/s>/$1/g; + $s =~ s/<s[^<>]*>$//; $s =~ s/^<\/s>//; $s =~ /^ ([^ ])/ || die "ERROR [enqiTokeniser]: Internal error on '$s'"; $s =~ /([^ ]) $/ || die "ERROR [enqiTokeniser]: Internal error on '$s'"; $s =~ s/^ ([^ ])/ <s>$1/ unless $s =~ /^ +<s/; $s =~ s/([^ ]) $/$1<\/s> / unless $s =~ /<\/s> +$/; + + #ajouts pour gérer quand on a détecté des listes mais que les nombres sont séparés du tiret + gérer après quand on a des br seuls + $s =~ s/<s>(\d+)<\/s> <s type="li">-/<s type="li">$1 -/g; + $s =~ s/<s type="((?:br,)?li)">(\d+)<\/s> <s type="li">-/<s type="$1">$2 -/g; + $s =~ s/<s type="br">\s*<\/s>\s*<s type="li">-/<s type="br,li">-/g; + $s =~ s/<s type="br">\s*<\/s>\s*<s type="(?:br,)?li">/<s type="br,li">/g; + if ($noxml) { $s =~ s/<\/s> *<s[^>]*>/\n/gs; $s =~ s/^ *<s[^>]*> *//gs; diff --git a/alSentenceSplitting.py b/alSentenceSplitting.py index 11678cf..1e1a030 100644 --- a/alSentenceSplitting.py +++ b/alSentenceSplitting.py @@ -3,6 +3,8 @@ import regex as re +#import sys + rom1_10 = re.compile(r"(?:III?|I?V|VIII?|VI|I?X|I)") rom2_10 = re.compile(r"(?:III?|I?V|VIII?|VI|I?X)") rom10_maxrom = re.compile(r"(?:(?:M+(?:C?D)?)?(?:X{1,4}|X?L|LX{1,4}|X?C{1,4}))") @@ -139,7 +141,6 @@ def altok_split_sentences(s, lang, weak_sbound = 0, less_lists = 0, noxml = 0, a #QUESTION ici erreur ça devrait être reference group 1 plutôt que 2 comme en perl ? OU c'est parce que c'est le groupe 2 de la première substitution dans le if du dessus ? s = re.sub(r" \.( )", r" \.</s>\1<s>", s) # cas des langues sans majuscules.. - if re.search(r"( - .*){8,}", s): # à partir de 8 (choisi au plus juste), on va considérer qu'on est face à une liste #ajout d'un espace en plus entre s et type s = re.sub(r" - ", r'</s> <s type="li">- ', s) @@ -158,6 +159,12 @@ def altok_split_sentences(s, lang, weak_sbound = 0, less_lists = 0, noxml = 0, a s = re.sub(r"^ ([^ ])", r" <s>\1", s) if not re.search(r"</s> +$", s): s = re.sub(r"([^ ]) $", r"\1</s> ", s) + + #ajouts pour gérer quand on a détecté des listes mais que les nombres sont séparés du tiret + gérer après quand on a des br seuls + s = re.sub(r'<s>(\d+)<\/s> <s type="li">-', r'<s type="li">\1 -', s) + s = re.sub(r'<s type="((?:br,)?li)">(\d+)<\/s> <s type="li">-', r'<s type="\1">\2 -', s) + s = re.sub(r'<s type="br">\s*<\/s>\s*<s type="li">-', r'<s type="br,li">-', s) + s = re.sub(r'<s type="br">\s*<\/s>\s*<s type="(?:br,)?li">', r'<s type="br,li">', s) if noxml: s = re.sub(r"</s> *<s[^>]*>", r"\n", s, flags = re.DOTALL) -- GitLab