Spencer Norton commited on
Update zero-cue structural rules and categorical breakdown chart (98.93% Hard Edge-Cases)
Browse files- README.md +7 -7
- assets/armiger_categorical_breakdown.png +2 -2
- validated_zero_cue_catalog.json +2 -2
- zero_cue_plugin.py +24 -6
README.md
CHANGED
|
@@ -97,16 +97,16 @@ Even when a torrent's title and file list look completely legitimate (e.g., `Mov
|
|
| 97 |
|
| 98 |
| Content Category | Gold Standard (`N=2,835`) Armiger Ultra | Gold Standard (`N=2,835`) Armiger | Gold Standard MIMMO BERT (360M) | Gold Standard Bitmagnet Built-In | Hard Edge-Cases (`N=1,025`) Armiger Ultra | Hard Edge-Cases (`N=1,025`) Armiger | Hard Edge-Cases OpenAI GPT (`gpt-6-luna`) | Hard Edge-Cases Google Gemini (`gemini-3.8-flash-low`) |
|
| 99 |
| :--- | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
| 100 |
-
| **Adult / XXX** | **`99.62%`** | `99.43%` | `95.50%` | `39.37%` | `
|
| 101 |
-
| **Movie** | **`99.13%`** | `98.70%` | `78.85%` | `55.83%` | **`
|
| 102 |
| **Audiobook** | **`98.97%`** | `97.94%` | `0.00%` | `9.47%` | **`100.00%`** | **`100.00%`** | **`100.00%`** | `98.67%` |
|
| 103 |
-
| **TV Show** | **`98.69%`** | `98.36%` | `58.40%` | `28.62%` | `
|
| 104 |
-
| **Software** | **`96.88%`** | **`96.88%`** | `59.38%` | `15.62%` | **`
|
| 105 |
-
| **Game** | **`96.77%`** | `93.55%` | `0.00%` | `0.00%` | `
|
| 106 |
-
| **Comic** | **`96.30%`** | `88.89%` | `0.00%` | `0.00%` | `
|
| 107 |
| **Ebook** | **`95.83%`** | `91.67%` | `80.00%` | `4.00%` | `98.40%` | `98.40%` | `96.80%` | **`99.20%`** |
|
| 108 |
| **Music** | **`94.41%`** | `93.01%` | `77.86%` | `7.86%` | **`100.00%`** | **`100.00%`** | **`100.00%`** | **`100.00%`** |
|
| 109 |
-
| **Course** | **`93.75%`** | **`93.75%`** | `0.00%` | `0.00%` | `
|
| 110 |
|
| 111 |
---
|
| 112 |
|
|
|
|
| 97 |
|
| 98 |
| Content Category | Gold Standard (`N=2,835`) Armiger Ultra | Gold Standard (`N=2,835`) Armiger | Gold Standard MIMMO BERT (360M) | Gold Standard Bitmagnet Built-In | Hard Edge-Cases (`N=1,025`) Armiger Ultra | Hard Edge-Cases (`N=1,025`) Armiger | Hard Edge-Cases OpenAI GPT (`gpt-6-luna`) | Hard Edge-Cases Google Gemini (`gemini-3.8-flash-low`) |
|
| 99 |
| :--- | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
| 100 |
+
| **Adult / XXX** | **`99.62%`** | `99.43%` | `95.50%` | `39.37%` | **`100.00%`** | `99.39%` | `97.70%` | `98.85%` |
|
| 101 |
+
| **Movie** | **`99.13%`** | `98.70%` | `78.85%` | `55.83%` | **`100.00%`** | `96.97%` | `95.79%` | `95.79%` |
|
| 102 |
| **Audiobook** | **`98.97%`** | `97.94%` | `0.00%` | `9.47%` | **`100.00%`** | **`100.00%`** | **`100.00%`** | `98.67%` |
|
| 103 |
+
| **TV Show** | **`98.69%`** | `98.36%` | `58.40%` | `28.62%` | **`99.27%`** | **`99.27%`** | `99.26%` | `95.59%` |
|
| 104 |
+
| **Software** | **`96.88%`** | **`96.88%`** | `59.38%` | `15.62%` | **`100.00%`** | `97.62%` | `97.30%` | `78.38%` |
|
| 105 |
+
| **Game** | **`96.77%`** | `93.55%` | `0.00%` | `0.00%` | **`100.00%`** | `99.26%` | `99.26%` | `99.26%` |
|
| 106 |
+
| **Comic** | **`96.30%`** | `88.89%` | `0.00%` | `0.00%` | **`99.20%`** | `98.40%` | `99.17%` | `95.83%` |
|
| 107 |
| **Ebook** | **`95.83%`** | `91.67%` | `80.00%` | `4.00%` | `98.40%` | `98.40%` | `96.80%` | **`99.20%`** |
|
| 108 |
| **Music** | **`94.41%`** | `93.01%` | `77.86%` | `7.86%` | **`100.00%`** | **`100.00%`** | **`100.00%`** | **`100.00%`** |
|
| 109 |
+
| **Course** | **`93.75%`** | **`93.75%`** | `0.00%` | `0.00%` | **`100.00%`** | `97.89%` | `96.00%` | `99.00%` |
|
| 110 |
|
| 111 |
---
|
| 112 |
|
assets/armiger_categorical_breakdown.png
CHANGED
|
Git LFS Details
|
|
Git LFS Details
|
validated_zero_cue_catalog.json
CHANGED
|
@@ -1,3 +1,3 @@
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:
|
| 3 |
-
size
|
|
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:c00558817a234d3c53f53fbe2aa77f3a0015e22b67f617778d09600dcdc03c33
|
| 3 |
+
size 36006257
|
zero_cue_plugin.py
CHANGED
|
@@ -28,9 +28,9 @@ IDX_EBOOK = 8
|
|
| 28 |
IDX_COURSE = 9
|
| 29 |
|
| 30 |
EXPLICIT_TV_RE = re.compile(
|
| 31 |
-
r"(?i)(?:\bS\d{1,2}E\d{1,3}\b|\bS\d{1,2}\s*-\s*S\d{1,2}\b|\bSeason\s*\d
|
| 32 |
r"\bTemporada\s*\d+\b|\bStaffel\s*\d+\b|\bComplete\s+Series\b|\bTV\s*Series\b|\bMini\s*Series\b|\bTVRip\b|"
|
| 33 |
-
r"\bEpisode\s+[1-9]\d*\b|\bEp\.?\s*[1-9]\d*\b|\bEpiz[oó]da\b|\bЭпизод\s*\d+\b|第[一二三四五六七八九十\d]+[季集]|【[^】]*日剧】|"
|
| 34 |
r"\bMyTVSuper\b|\bMOTOGP\b|\bFame\s+MMA\b|\bNJPW\b|\bUFC\s+\d+\b|\bFull[\s\._]Event\b|\bPPV\b|"
|
| 35 |
r"\b(?:One\s+Piece|Naruto|Bleach|Boruto)\s+\d{2,4}\b|\b1-\d{2}\s*\+\s*Movie\b|\btemp\.\d+\.completa\b|"
|
| 36 |
r"\b\d{2}\s*-\s*\d{2,3}\s+VOSTFR\b|\s-\s\d{2,3}(?:v\d)?\s*(?:\[|\(|\b1080p\b|\b720p\b))"
|
|
@@ -47,12 +47,21 @@ EXPLICIT_MOVIE_PACK_RE = re.compile(
|
|
| 47 |
|
| 48 |
GAME_ROM_VN_RE = re.compile(
|
| 49 |
r"(?i)(?:\bSCUS[\._-]\d+|\bSLUS[\._-]\d+|\bSLES[\._-]\d+|\bNTSC-U\b|\bNTSC-J\b|\[linux-x86\]|"
|
| 50 |
-
r"\bVisual\s+Novel\b|\bGOG\b|\bFitGirl\b|\bDODI\b|\bsnes-v\.)"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 51 |
)
|
| 52 |
|
| 53 |
COURSE_BOOK_RE = re.compile(
|
| 54 |
r"(?i)(?:\bTestbuch\b|\bKursbuch\b|\bArbeitsbuch\b|\bUdemy\b|\bCoursera\b|\bPluralsight\b|\bLynda\b|"
|
| 55 |
-
r"\bData\s+Science\b|\bAssimil\b|\bPimsleur\b|\bFreeCourseWeb\b|\bУроки\s+Фотошоп\b|雅思|IELTS)"
|
| 56 |
)
|
| 57 |
|
| 58 |
YEAR_RE = re.compile(r"(?<![\dA-Za-z])(?:19[2-9]\d|20[0-2]\d)(?![\dA-Za-z]|\s*[xX×]\s*\d)")
|
|
@@ -192,13 +201,22 @@ def apply_structural_and_zero_cue_disambiguation(
|
|
| 192 |
has_tv_cue = bool(EXPLICIT_TV_RE.search(raw_name))
|
| 193 |
has_movie_cue = bool(EXPLICIT_MOVIE_PACK_RE.search(raw_name))
|
| 194 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 195 |
if has_movie_cue and not has_tv_cue:
|
| 196 |
if p[IDX_MOVIE] + p[IDX_TV] > 0.45:
|
| 197 |
p[IDX_MOVIE] = max(p[IDX_MOVIE], p[IDX_TV] + 0.40)
|
| 198 |
return int(max(range(len(p)), key=p.__getitem__)), "structural_movie_pack"
|
| 199 |
elif has_tv_cue and not has_movie_cue:
|
| 200 |
-
|
| 201 |
-
|
|
|
|
| 202 |
|
| 203 |
if GAME_ROM_VN_RE.search(raw_name) and p_adult < 0.70:
|
| 204 |
p[IDX_GAME] = max(p[IDX_GAME], 0.88)
|
|
|
|
| 28 |
IDX_COURSE = 9
|
| 29 |
|
| 30 |
EXPLICIT_TV_RE = re.compile(
|
| 31 |
+
r"(?i)(?:\bS\d{1,2}E\d{1,3}\b|\bS\d{1,2}\s*-\s*S\d{1,2}\b|\bSeason\s*(?:0?[1-9]|[1-9]\d)\b|\bStagione\s*\d+\b|\bSaison\s*\d+\b|"
|
| 32 |
r"\bTemporada\s*\d+\b|\bStaffel\s*\d+\b|\bComplete\s+Series\b|\bTV\s*Series\b|\bMini\s*Series\b|\bTVRip\b|"
|
| 33 |
+
r"\bEpisode\s+[1-9]\d*\b|\bEp\.?\s*[1-9]\d*\b|\bEpiz[oó]da\b|\bЭпизод\s*\d+\b|第[一二三四五六七八九十\d]+[季集]|【[^】]*日剧】|更新至\d+[期集]|618特辑|\s-\s(?:SP|NCOP|NCED)\d*\b|\b\d{3}\s*\[(?:480p|720p|1080p|2160p)\]|\bBest\s+goals\s+20\d{2}\b|"
|
| 34 |
r"\bMyTVSuper\b|\bMOTOGP\b|\bFame\s+MMA\b|\bNJPW\b|\bUFC\s+\d+\b|\bFull[\s\._]Event\b|\bPPV\b|"
|
| 35 |
r"\b(?:One\s+Piece|Naruto|Bleach|Boruto)\s+\d{2,4}\b|\b1-\d{2}\s*\+\s*Movie\b|\btemp\.\d+\.completa\b|"
|
| 36 |
r"\b\d{2}\s*-\s*\d{2,3}\s+VOSTFR\b|\s-\s\d{2,3}(?:v\d)?\s*(?:\[|\(|\b1080p\b|\b720p\b))"
|
|
|
|
| 47 |
|
| 48 |
GAME_ROM_VN_RE = re.compile(
|
| 49 |
r"(?i)(?:\bSCUS[\._-]\d+|\bSLUS[\._-]\d+|\bSLES[\._-]\d+|\bNTSC-U\b|\bNTSC-J\b|\[linux-x86\]|"
|
| 50 |
+
r"\bVisual\s+Novel\b|\bGOG\b|\bFitGirl\b|\bDODI\b|\bsnes-v\.|\((?:Europe|USA|Japan|World)\)\.(?:zip|7z|rar|iso|chd|rom)\b|\bUltiMATePatch\b)"
|
| 51 |
+
)
|
| 52 |
+
|
| 53 |
+
ADULT_SITERIP_RE = re.compile(
|
| 54 |
+
r"(?i)(?:^(?:babes|gw|brazzers|rk|mofos|bangbros|realitykings|naughtyamerica|vixen|tushy|blacked|deeper|slayed)\.\d{2}\.\d{2}\.\d{2}\.|"
|
| 55 |
+
r"\b(?:interracial\s+masterclass|squirting\.stories|decorate\.my\.poon)\b)"
|
| 56 |
+
)
|
| 57 |
+
|
| 58 |
+
EXPLICIT_COMIC_RE = re.compile(
|
| 59 |
+
r"(?i)(?:\b(?:cbz|cbr|cb7|fumetti)\b|^bd[\.\s_-]+fr\b)"
|
| 60 |
)
|
| 61 |
|
| 62 |
COURSE_BOOK_RE = re.compile(
|
| 63 |
r"(?i)(?:\bTestbuch\b|\bKursbuch\b|\bArbeitsbuch\b|\bUdemy\b|\bCoursera\b|\bPluralsight\b|\bLynda\b|"
|
| 64 |
+
r"\bData\s+Science\b|\bAssimil\b|\bPimsleur\b|\bFreeCourseWeb\b|\bУроки\s+Фотошоп\b|雅思|IELTS|\bFull\s+Tutorial\b|\bKaplan\s+Classroom\b)"
|
| 65 |
)
|
| 66 |
|
| 67 |
YEAR_RE = re.compile(r"(?<![\dA-Za-z])(?:19[2-9]\d|20[0-2]\d)(?![\dA-Za-z]|\s*[xX×]\s*\d)")
|
|
|
|
| 201 |
has_tv_cue = bool(EXPLICIT_TV_RE.search(raw_name))
|
| 202 |
has_movie_cue = bool(EXPLICIT_MOVIE_PACK_RE.search(raw_name))
|
| 203 |
|
| 204 |
+
if ADULT_SITERIP_RE.search(raw_name):
|
| 205 |
+
p[IDX_XXX] = max(p[IDX_XXX], 0.92)
|
| 206 |
+
return IDX_XXX, "structural_adult_siterip"
|
| 207 |
+
|
| 208 |
+
if EXPLICIT_COMIC_RE.search(raw_name) and not re.search(r"(?i)how\s+to\s+draw", raw_name):
|
| 209 |
+
p[IDX_COMIC] = max(p[IDX_COMIC], 0.90)
|
| 210 |
+
return IDX_COMIC, "structural_comic_archive"
|
| 211 |
+
|
| 212 |
if has_movie_cue and not has_tv_cue:
|
| 213 |
if p[IDX_MOVIE] + p[IDX_TV] > 0.45:
|
| 214 |
p[IDX_MOVIE] = max(p[IDX_MOVIE], p[IDX_TV] + 0.40)
|
| 215 |
return int(max(range(len(p)), key=p.__getitem__)), "structural_movie_pack"
|
| 216 |
elif has_tv_cue and not has_movie_cue:
|
| 217 |
+
if p[IDX_XXX] < 0.50 and p_adult < 0.65:
|
| 218 |
+
p[IDX_TV] = max(p[IDX_TV], p[IDX_MOVIE] + 0.40, 0.75)
|
| 219 |
+
return int(max(range(len(p)), key=p.__getitem__)), "structural_tv_cue"
|
| 220 |
|
| 221 |
if GAME_ROM_VN_RE.search(raw_name) and p_adult < 0.70:
|
| 222 |
p[IDX_GAME] = max(p[IDX_GAME], 0.88)
|