fr_arches_ner / entity_punctuation_removal.py
a-menu's picture
Update spaCy pipeline
3513e26 verified
raw
history blame
1.11 kB
import spacy
from spacy.language import Language
import regex
@Language.component("entity_punctuation_removal")
def entity_punctuation_removal(doc):
# On liste nos entités
ents = list(doc.ents)
i = 0
while i < len(ents):
current_ent = ents[i]
# On attrape l'entité si :
# - Elle consiste en un unique signe de ponctuation
# - Et que son tag IOB est B (début d'entité)
# - Et qu'elle n'est pas suivie par une entité de tag IOB I (suite d'entité) OU qu'elle n'est suivie par aucun token
# Si l'entité est attrapée, elle est supprimée du doc
if i + 1 < len(ents) and regex.match(r'^\p{P}$', current_ent.text) and current_ent.root.ent_iob_ == "B" :
ents.pop(i)
elif i == len(ents) - 1 and regex.match(r'^\p{P}$', current_ent.text) and current_ent.root.ent_iob_ == "B" :
ents.pop(i)
else:
i += 1
# On met à jour le doc avec les entités modifiées
doc.ents = tuple(ents)
return doc
Language.component("entity_punctuation_removal", func=entity_punctuation_removal)