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/&lt; *br *(?:\/ *)?&gt;/<\/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