Closed PPPinson closed 11 months ago
Le problème semble venir du mode d'alignement: ça marche en remplaçant self.regex_matcher = RegexMatcher(attr=attr, alignment_mode="strict")
par self.regex_matcher = RegexMatcher(attr=attr, alignment_mode="expand")
dans edsnlp/pipelines/ner/scores/tnm/tnm.py
.
Je ne suis pas certain de bien comprendre le mode d'alignement spacy, qu'est ce qui a justifié de mettre "strict" pour le pipeline TNM ?
@etienneguevel une idée ?
Salut Pierre, Je ne suis pas à l'origine du pipeline eds.tnm et je ne sais pas pourquoi "strict" a été choisi à l'époque. J'ai testé ta proposition sur les cr anapathes de ma cohorte et je n'ai pas observé de nouveaux matchs incorrects. A part contre indication de @percevalw je serai assez pour intégrer ta proposition !
Le problème semble venir du mode d'alignement: ça marche en remplaçant
self.regex_matcher = RegexMatcher(attr=attr, alignment_mode="strict")
parself.regex_matcher = RegexMatcher(attr=attr, alignment_mode="expand")
dansedsnlp/pipelines/ner/scores/tnm/tnm.py
. Je ne suis pas certain de bien comprendre le mode d'alignement spacy, qu'est ce qui a justifié de mettre "strict" pour le pipeline TNM ? @etienneguevel une idée ?
Le mode d'alignement permet de dire à spaCy comment passer d'un tuple (start, end)
(extrait via regex) à un vrai objet Span
.
Dans le cas d'un alignement strict il faut que le tuple corresponde exactement à un Span, ce qui n'est pas toujours le cas.
avec alignment_mode=expand
cette contrainte est relaxée
Description
Le pipeline TNM ne renvoie pas les scores suivis par un espace. (match avec "aTxN1M0\nanything" mais pas avec "aTxN1M0 anything")
Plus généralement spacy n'a pas l'air ok avec les regex qui finissent par un espace ?
How to reproduce the bug
On peut simplifier le problème sous la forme:
Pourtant, un simple match de regex fonctionne:
quelle est la différence entre re et spacy qui justifie ce comportement ?
Your Environment