pyprocessors-coreference
Processor grouping the mentions of the same entity.
Ce dépôt enregistre un processeur dans le groupe d'entry-points pyprocessors.plugins :
| Plugin | Classe |
|---|---|
coreference |
pyprocessors_coreference.coreference:CoreferenceProcessor |
Il regroupe les mentions d'une même entité avant le linking, pour qu'elles soient
liées une seule fois, à partir de leur forme la plus longue. C'est l'étape de
regroupement des mentions de l'ADR-0001 de pyannotators_entityfishing
(docs/adr/), palier 1 :
les noms seulement.
Ce qu'il fait
Pour chaque document, entre mentions de même label :
- même surface normalisée → même groupe. La normalisation ignore la casse, les espaces, le style des apostrophes, et les civilités en tête d'un nom de personne (« M. », « Mme », « Dr »…) ;
- tous les labels de personne forment une seule famille : le
persondu NER et l'afppersondes lexiques AFP annotent le même span, et vont dans le même groupe ; - un nom partiel de personne rejoint le nom complet dont il est la fin, que le nom complet soit avant ou après lui dans le document : « Macron » et « M. Macron » rejoignent « Emmanuel Macron » ;
- un prénom seul ne rejoint jamais un nom complet : « Emmanuel » reste à part ;
- un nom partiel ambigu n'est pas fusionné : avec « Emmanuel Macron » et « Brigitte Macron » dans le texte, « Macron » garde son propre groupe, et liste les groupes possibles pour que l'étape de linking tranche ;
- la règle du nom partiel ne vaut que pour les personnes : « Airbus » ne rejoint pas « Airbus Defence and Space ».
Sur chaque annotation d'un label regroupé, il écrit dans properties :
| Propriété | Valeur |
|---|---|
entity_group |
l'identifiant du groupe dans le document : g1, g2… dans l'ordre de première apparition |
canonical_form |
la forme la plus longue du groupe, sans civilité : c'est elle qu'on cherche dans la base de connaissances |
mention_type |
name (les périphrases et les pronoms, nominal et pronoun, viendront avec les paliers 2 et 3) |
entity_group_candidates |
seulement sur un nom partiel ambigu : les groupes auxquels il peut appartenir |
Les autres propriétés de l'annotation sont gardées, et traiter deux fois un document donne le même résultat. La portée est le document entier, ce qui convient à une dépêche ; les documents longs sont une question ouverte (SHERPA-3048).
Requirements
- Python 3.12+
pymultirole_plugins(>=1.6.0,<1.7.0)
Installation
pip install pyprocessors-coreference
Usage
from pymultirole_plugins.v1.schema import Annotation, Document
from pyprocessors_coreference.coreference import CoreferenceParameters, CoreferenceProcessor
text = "Emmanuel Macron est arrivé. M. Macron a parlé."
document = Document(
text=text,
annotations=[
Annotation(start=0, end=15, labelName="person", text="Emmanuel Macron"),
Annotation(start=28, end=37, labelName="person", text="M. Macron"),
],
)
[document] = CoreferenceProcessor().process([document], CoreferenceParameters())
# Both annotations: entity_group "g1", canonical_form "Emmanuel Macron".
Parameters
| Paramètre | Défaut | Description |
|---|---|---|
labels |
vide | Labels des mentions à regrouper. Vide : tous les labels. |
person_labels |
vide | Labels de personne : ils forment une seule famille, et la règle du nom partiel s'y applique. Vide : tout label dont le nom contient « person » (person, afpperson…). |
honorifics |
M., Mme, Dr, Mr… |
Civilités ignorées en tête d'un nom de personne. Paramètre avancé. |
Development
Le build est piloté par Task et uv,
les stages venant du submodule python-archetype :
git submodule update --init
task stages # les stages du pipeline, dans l'ordre
task # tout sauf le dernier stage — donc tout sauf la publication
task -- --skip-tests # idem, sans le stage de test
task up-to -- py:lint
task jenkins # tout, exactement ce que joue Jenkins
task --list
uv.lock n'est pas versionné ici, donc py:sync résout les dépendances à neuf.
Release files for pyprocessors-coreference 1.6.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pyprocessors_coreference-1.6.1.tar.gz | 36.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pyprocessors_coreference-1.6.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 42.8 kB
Release files / pyprocessors_coreference-1.6.1.tar.gz
| Download URL | pyprocessors_coreference-1.6.1.tar.gz |
|---|---|
| Size | 36.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f41171a79798a98c34ad164d25b2252a71377c945c5463d1c9e878396a3bb21a
|
|
BLAKE2b-256 checksum How to use checksums |
37d7105a3b1f49fa18055e4dd3e5d40df9aa264c2f2743a1d4b2dc089fee7298
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.9 {"installer":{"name":"uv","version":"0.12.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"22.04","id":"jammy","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / pyprocessors_coreference-1.6.1-py3-none-any.whl
| Download URL | pyprocessors_coreference-1.6.1-py3-none-any.whl |
|---|---|
| Size | 6.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8c37bfc653e2e7646342c8bb43db14c21407eb5dd68a952f212b9f3684060051
|
|
BLAKE2b-256 checksum How to use checksums |
f4fdb40443b534162cac527ec55864ee196b09ac16251c02ddfcc7e190d83d81
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.9 {"installer":{"name":"uv","version":"0.12.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"22.04","id":"jammy","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|