fix(performers): czlon <3 znaki degenerowal filtr slug-matchu (over-attribution)
Some checks are pending
Backend tests / test (push) Waiting to run
Some checks are pending
Backend tests / test (push) Waiting to run
Bug-report 986d3018 ('O co chodzi z tym Lady Vi? To wcale nie jest aktorka z tych
filmow'). Search-scrapery filtruja wyniki po tokenach nazwy >=3 znaki, wiec czlon
2-znakowy wypada: 'Lady Vi' -> {lady}, i degeneruje sie do 'slug zawiera
lady' = KAZDA scena z tym slowem. Dla nazw gdzie WSZYSTKIE czlony sa krotkie
('Jj Jj', 'Mi Su') zbior tokenow jest PUSTY, a
przepuszcza wtedy absolutnie wszystko.
Audyt: Lady Vi miala 116 przypisan z tube, z czego 115 pasowalo tylko przez 'lady'
a realnie o niej byla 1. Wyczyszczone (zostaly kanoniczne stashdb + 1 trafione).
Fix: gdy nazwa ma czlon <3 znaki, wymagamy dodatkowo CALEJ nazwy sklejonej bez
separatorow ('lady-vi-...' -> 'ladyvi'). Zweryfikowane: lady-vi-hot-scene przyjmie,
lady-sonia-milf i busty-lady-next-door odrzuci.
This commit is contained in:
parent
140764bfc5
commit
7a40ff70ba
2 changed files with 17 additions and 0 deletions
|
|
@ -49,6 +49,11 @@ class HDPorn92Scraper(BaseDirectTubeScraper):
|
|||
return
|
||||
|
||||
query_tokens = {tok for tok in query.lower().split() if len(tok) >= 3}
|
||||
# Człon <3 znaki ("Lady Vi", "Mia Li") wypada z tokenów → zostaje sam pospolity
|
||||
# człon i filtr łapie każdą scenę z tym słowem (audit 2026-07-28, over-attribution
|
||||
# Lady Vi). Wtedy wymagamy CAŁEJ nazwy sklejonej bez separatorów.
|
||||
_compact = re.sub(r"[^a-z0-9]", "", query.lower())
|
||||
_needs_compact = any(len(tok) < 3 for tok in query.lower().split()) and len(_compact) >= 4
|
||||
|
||||
seen: set[str] = set()
|
||||
yielded = 0
|
||||
|
|
@ -64,6 +69,8 @@ class HDPorn92Scraper(BaseDirectTubeScraper):
|
|||
slug_lower = slug.lower()
|
||||
if query_tokens and not any(tok in slug_lower for tok in query_tokens):
|
||||
continue
|
||||
if _needs_compact and _compact not in re.sub(r"[^a-z0-9]", "", slug_lower):
|
||||
continue
|
||||
|
||||
title = slug.replace("-", " ").strip()
|
||||
|
||||
|
|
|
|||
|
|
@ -54,6 +54,14 @@ class HQPornerScraper(BaseDirectTubeScraper):
|
|||
# bug-report 2026-06-07). `all` wymaga pełnego dopasowania nazwy → precyzja.
|
||||
# Pojedyncze nazwy ("Belladonna") nadal działają (jeden token musi być).
|
||||
query_tokens = {tok for tok in query.lower().split() if len(tok) >= 3}
|
||||
# Człon <3 znaki ("Lady Vi", "Mia Li", "Ai Uehara") wypada z `query_tokens`, więc
|
||||
# zostaje sam pospolity człon i `all` degeneruje się do „slug zawiera 'lady'" —
|
||||
# czyli KAŻDA scena z tym słowem (audit 2026-07-28: Lady Vi miała 116 przypisań
|
||||
# z tube, z czego 115 tylko przez „lady", realnie o niej 1). Gdy nazwa ma taki
|
||||
# człon, wymagamy dodatkowo CAŁEJ nazwy sklejonej bez separatorów (slug
|
||||
# „lady-vi-…" → „ladyvi…"), co przywraca precyzję bez gubienia trafień.
|
||||
_compact = re.sub(r"[^a-z0-9]", "", query.lower())
|
||||
_needs_compact = any(len(tok) < 3 for tok in query.lower().split()) and len(_compact) >= 4
|
||||
|
||||
seen_urls: set[str] = set()
|
||||
yielded = 0
|
||||
|
|
@ -69,6 +77,8 @@ class HQPornerScraper(BaseDirectTubeScraper):
|
|||
slug_lower = slug_part.lower()
|
||||
if query_tokens and not all(tok in slug_lower for tok in query_tokens):
|
||||
continue
|
||||
if _needs_compact and _compact not in re.sub(r"[^a-z0-9]", "", slug_lower):
|
||||
continue
|
||||
|
||||
title = slug_part.replace("_", " ").replace("-", " ").strip()
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue