Spencer Norton commited on
Add CJK TV drama, anime SP/NCED, comic archive, and adult siterip disambiguation rules
Browse files- validated_zero_cue_catalog.json +2 -2
- zero_cue_plugin.py +24 -6
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)
|