fix(torznab): une élision française séparée n'est plus rejetée comme hors-sujet (FOXA-2842) #36

Merged
foXaCe merged 2 commits from fix/torznab-elisions-fr-2842 into main 2026-10-02 08:05:05 +02:00
Owner

Défaut

Le filtre anti-pollution de pertinence Torznab ne calculait ses tokens qu'avec la convention fusionnée (apostrophe retirée sans espace) — la convention scène du génitif anglais. Une élision française suit la convention inverse : la scène écrit le mot séparé au point (L.Arene, D.Artagnan), jamais LArene.

Un résultat trouvé par recherche par identifiant se faisait donc rejeter en silence comme « repli hors-sujet », sans que l'écran ne signale rien : un vrai résultat supprimé, sur un foyer francophone où la forme est la règle.

Correctif

wastream/scrapers/torznab/base.py — _relevance_tokens prend la convention d'apostrophe en paramètre ("" fusion, " " séparation) et _is_relevant teste les deux, la fusion d'abord :

  • le calcul de la fusion est rigoureusement inchangé, donc un résultat accepté avant ne peut pas échouer après (différentiel sur 715 couples : 0 régression, 4 nouvellement acceptés, tous les quatre réellement le même film) ;
  • les deux jeux de tokens ne sont jamais mélangés dans un même ratio : la forme séparée dilue la fusionnée et les deux stratégies échoueraient ensemble.

Aucun patch amont recopié : dydy13014/wacustom a5c3c24 traite le même cas et conclut de même ; ici une seule fonction paramétrée au lieu de deux fonctions jumelles.

Preuve

Avant, sur l'arbre de base 21dd7be, les tests neufs seuls échouent :

FAILED tests/test_torznab_relevance.py::test_french_elision_title_matches_release_with_split_apostrophe
FAILED tests/test_torznab_relevance.py::test_french_elision_with_d_apostrophe
FAILED tests/test_torznab_relevance.py::test_french_elision_with_curly_apostrophe
3 failed, 8 passed in 0.19s

Après : pytest -q → 489 passed (31 suites, +6 tests, aucun retrait).

Récit : JOURNAL.md, référence de porte : CLAUDE.md.

Déploiement non fait : scripts/deployer.sh vise origin/main, et la fusion reste à l'opérateur pour ce dépôt.

## Défaut Le filtre anti-pollution de pertinence Torznab ne calculait ses tokens qu'avec la convention **fusionnée** (apostrophe retirée sans espace) — la convention scène du génitif anglais. Une élision française suit la convention inverse : la scène écrit le mot **séparé au point** (`L.Arene`, `D.Artagnan`), jamais `LArene`. Un résultat trouvé par recherche par identifiant se faisait donc rejeter en silence comme « repli hors-sujet », sans que l'écran ne signale rien : un vrai résultat supprimé, sur un foyer francophone où la forme est la règle. ## Correctif `wastream/scrapers/torznab/base.py` — `_relevance_tokens` prend la convention d'apostrophe en paramètre (`""` fusion, `" "` séparation) et `_is_relevant` teste les deux, la fusion **d'abord** : - le calcul de la fusion est rigoureusement inchangé, donc un résultat accepté avant ne peut pas échouer après (différentiel sur 715 couples : 0 régression, 4 nouvellement acceptés, tous les quatre réellement le même film) ; - les deux jeux de tokens ne sont **jamais** mélangés dans un même ratio : la forme séparée dilue la fusionnée et les deux stratégies échoueraient ensemble. Aucun patch amont recopié : `dydy13014/wacustom` `a5c3c24` traite le même cas et conclut de même ; ici une seule fonction paramétrée au lieu de deux fonctions jumelles. ## Preuve Avant, sur l'arbre de base `21dd7be`, les tests neufs seuls échouent : ``` FAILED tests/test_torznab_relevance.py::test_french_elision_title_matches_release_with_split_apostrophe FAILED tests/test_torznab_relevance.py::test_french_elision_with_d_apostrophe FAILED tests/test_torznab_relevance.py::test_french_elision_with_curly_apostrophe 3 failed, 8 passed in 0.19s ``` Après : `pytest -q` → **489 passed** (31 suites, +6 tests, aucun retrait). Récit : `JOURNAL.md`, référence de porte : `CLAUDE.md`. Déploiement non fait : `scripts/deployer.sh` vise `origin/main`, et la fusion reste à l'opérateur pour ce dépôt.
Le filtre anti-pollution de pertinence Torznab ne calculait ses tokens
qu'avec la convention fusionnée (le génitif anglais : "Charlie's Angels"
-> "Charlies.Angels"). Une élision française suit la convention scène
inverse : les noms de release l'écrivent séparée au point ("L.Arene",
"D.Artagnan"), jamais fusionnée ("LArene"). Un résultat trouvé par
recherche par identifiant se faisait donc rejeter en silence comme
"repli hors-sujet", sans que l'écran ne signale rien — un vrai résultat
supprimé, sur un foyer francophone où la forme est la règle.

Les deux conventions sont désormais testées l'une après l'autre, et on
accepte dès que l'une des deux passe le seuil. La fusion passe en premier
et son calcul est inchangé : aucun résultat accepté auparavant ne peut
échouer maintenant. Les deux jeux de tokens ne sont jamais mélangés dans
un même ratio, ce qui ferait échouer les deux stratégies artificiellement.

Sept cas ajoutés à tests/test_torznab_relevance.py (5 suites / 5 tests ->
5 suites / 12 tests) : élision séparée au point, élision "D'", apostrophe
typographique, élision fusionnée par le tracker, et deux hors-sujet qui
doivent rester rejetés — l'élargissement des conventions ne rend pas le
filtre permissif.
docs: la référence de porte wacustom passe à 31 / 489, et le journal raconte l'élision
All checks were successful
Porte / porte (pull_request) Successful in 19s
faf9973e21
CLAUDE.md : 483 -> 489 tests, mesuré sur la tête de branche, avec l'écart
et le récit. JOURNAL.md : le défaut mesuré (3 échecs avant, 0 après), le
différentiel anti-régression (0 régression sur 715 couples), et pourquoi on
n'a pas recopié le patch amont.
foXaCe merged commit 037613f5b2 into main 2026-10-02 08:05:05 +02:00
foXaCe deleted branch fix/torznab-elisions-fr-2842 2026-10-02 08:05:06 +02:00
Sign in to join this conversation.
No reviewers
No labels
montee-majeure
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
foXaCe/wacustom!36
No description provided.