fix(performers): drugie kryterium smieciowych performerow (tag przytlacza osobe)
Klasa "prawdziwy performer o pospolitej nazwie" okazala sie zawierac 211 rekordow, ktore w ogole nie sa osobami, tylko kategoriami z refem kanonicznym: "Big Tits" (931 scen), "Big Ass" (640), "Hardcore" (222), "Blonde" (238), "Masturbation". TPDB i StashDB SAME zawieraja takie wpisy, wiec ref kanoniczny ich nie oczyszcza. Kryterium promiskuitycznosci z poprzedniego commita tu NIE dziala i sprawdzenie tego bylo kluczowe: w tej populacji obcy mierzy popularnosc, nie smieciowosc. Przy wartosciach 50-59 stoja Adriana Chechik (4201 scen), Lauren Phillips, Jane Wilde i Jordi El Nino Polla. Moja wczesniejsza walidacja progu 50 byla obciazona, bo grupa bez refa to sami malo znani. Rozstrzyga stosunek scen-z-tagiem do scen-performera, i to z uzasadnienia, nie z probki: nazwisko uzyte jako wlasny tag daje stosunek ~1 Z DEFINICJI, bo tag siedzi dokladnie na jej scenach. Potwierdzone na markach osobistych: Hotwifevictoria 1,02, Rossmexicana 0,99, Sexwithmilfstella 0,87. Wielkie gwiazdy jeszcze nizej, maksimum 0,35 wsrod 921 pewnych osob. Kategorie: Hardcore 1720, Masturbation 1570, Blonde 770. Prog 2 + wymog >=50 scen (ponizej stosunek jest szumem). Skasowane 211 rekordow / ~32 tys. przypisan w dwoch przebiegach. Job idempotentny. Ogon klasy jest zdrowy: z 8116 pozostalych 92% miesci sie ponizej 0,35. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
02ff9c7ff1
commit
7ad94448a4
1 changed files with 58 additions and 3 deletions
|
|
@ -25,8 +25,33 @@ właścicielem i partnerami ze sceny, kategoria z całym katalogiem. Zmierzone:
|
|||
Próg 50 leży ponad dwukrotnie powyżej najwyższej prawdziwej osoby. Dodatkowo chronimy
|
||||
nazwy w formacie „Imię Nazwisko", bo sygnał studia (odrzucony) wciągał marki osobiste.
|
||||
|
||||
**Drugie kryterium: tag przytłacza performera.** Promiskuityczność zawodzi dla śmieci,
|
||||
które mają ref kanoniczny — bo TPDB i StashDB SAME zawierają wpisy „Hardcore", „Blonde",
|
||||
„Masturbation", „Amateur". Co gorsza, `obcy` mierzy tam popularność, nie śmieciowość:
|
||||
przy wartości 50-59 stoją Adriana Chechik (4201 scen), Lauren Phillips i Jane Wilde.
|
||||
|
||||
Rozstrzyga stosunek `scen z tagiem / scen performera`. Nazwisko-tag siedzi głównie na
|
||||
scenach swojej właścicielki, więc stosunek jest ułamkiem; kategoria wisi na całym
|
||||
katalogu, więc idzie w setki:
|
||||
|
||||
Hardcore 1720,6 Masturbation 1570,4 Blonde 770,0 Anal Creampie 31,4
|
||||
najwyższy wśród 921 PEWNYCH osób (ref kanoniczny + ≥500 scen): **0,35**
|
||||
|
||||
**Próg 2 wynika z zasady, nie z próbki.** Nazwisko użyte jako własny tag daje stosunek
|
||||
≈1 Z DEFINICJI, bo tag siedzi dokładnie na scenach swojej właścicielki — potwierdzone na
|
||||
twórcach z własną marką: Hotwifevictoria 1,02, Rossmexicana 0,99, Sexwithmilfstella 0,87.
|
||||
Wielkie gwiazdy mają jeszcze mniej (tuby tagują tylko część ich scen). Stosunek ≥2
|
||||
oznacza więc, że słowo jest doklejane do scen, które do tej osoby nie należą.
|
||||
|
||||
Wymóg ≥50 scen odcina szum przy małych liczbach (przy 11 scenach „Denzel" wychodził na
|
||||
161, ale to za mało danych, żeby przesądzać). Przy progu 2 na 78 trafień dwa są
|
||||
dyskusyjne („Teddy", „Grey" mogą być nazwiskami) — ale i one mają tag rozlany na 3×
|
||||
więcej scen, niż mają przypisań, więc ich atrybucje i tak są w większości słowne.
|
||||
|
||||
Job, nie bramka w `resolve_performer`: kasowanie cyklem nie dotyka gorącej ścieżki
|
||||
ingestu, a śmieci i tak odrastają wolno. Ta sama logika co przy [[phash_blacklist]].
|
||||
ingestu, a śmieci i tak odrastają wolno. Dotyczy to zwłaszcza tego drugiego kryterium,
|
||||
bo tamte rekordy odtwarza sam ingest TPDB/StashDB. Ta sama logika co przy
|
||||
[[phash_blacklist]].
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
|
|
@ -40,6 +65,11 @@ log = logging.getLogger(__name__)
|
|||
#: Ponad 2× powyżej najwyższej zmierzonej prawdziwej osoby (Julia Reaves, 20).
|
||||
DEFAULT_MIN_FOREIGN_PERFORMERS = 50
|
||||
|
||||
#: 2× powyżej naturalnej wartości dla nazwiska użytego jako własny tag (≈1).
|
||||
DEFAULT_MIN_TAG_RATIO = 2
|
||||
#: Poniżej tego stosunek jest szumem — za mało scen, żeby cokolwiek przesądzać.
|
||||
DEFAULT_MIN_SCENES_FOR_RATIO = 50
|
||||
|
||||
_SELECT_SQL = """
|
||||
WITH junk AS (
|
||||
SELECT pf.id, pf.canonical_name, pf.slug
|
||||
|
|
@ -63,8 +93,33 @@ WHERE (
|
|||
"""
|
||||
|
||||
|
||||
def find_junk_performers(session: Session, *, min_foreign: int = DEFAULT_MIN_FOREIGN_PERFORMERS):
|
||||
return [r[0] for r in session.execute(text(_SELECT_SQL), {"min_foreign": min_foreign})]
|
||||
_RATIO_SQL = """
|
||||
SELECT pf.id
|
||||
FROM performers pf
|
||||
WHERE EXISTS (SELECT 1 FROM tags t WHERE t.slug = pf.slug)
|
||||
AND (SELECT count(*) FROM scene_performers sp WHERE sp.performer_id = pf.id) >= :min_scenes
|
||||
AND (SELECT count(*) FROM scene_tags st JOIN tags t ON t.id = st.tag_id WHERE t.slug = pf.slug)::numeric
|
||||
/ NULLIF((SELECT count(*) FROM scene_performers sp WHERE sp.performer_id = pf.id), 0) >= :min_ratio
|
||||
"""
|
||||
|
||||
|
||||
def find_junk_performers(
|
||||
session: Session,
|
||||
*,
|
||||
min_foreign: int = DEFAULT_MIN_FOREIGN_PERFORMERS,
|
||||
min_ratio: int = DEFAULT_MIN_TAG_RATIO,
|
||||
min_scenes: int = DEFAULT_MIN_SCENES_FOR_RATIO,
|
||||
):
|
||||
"""Suma dwóch niezależnych kryteriów — pierwsze łapie śmieci bez refa kanonicznego,
|
||||
drugie te, które ref mają (bo TPDB/StashDB też zawierają „Hardcore" czy „Blonde")."""
|
||||
ids = {r[0] for r in session.execute(text(_SELECT_SQL), {"min_foreign": min_foreign})}
|
||||
ids |= {
|
||||
r[0]
|
||||
for r in session.execute(
|
||||
text(_RATIO_SQL), {"min_ratio": min_ratio, "min_scenes": min_scenes}
|
||||
)
|
||||
}
|
||||
return list(ids)
|
||||
|
||||
|
||||
def run_junk_performer_cleanup(
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue