Spencer Norton commited on
Commit
04e64cd
·
verified ·
1 Parent(s): ca955ff

Add CJK TV drama, anime SP/NCED, comic archive, and adult siterip disambiguation rules

Browse files
validated_zero_cue_catalog.json CHANGED
@@ -1,3 +1,3 @@
1
  version https://git-lfs.github.com/spec/v1
2
- oid sha256:e30f10ee99b89798b879a7c305099005ac48fc8fa8febebcaf10be154930b999
3
- size 36004794
 
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+\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]+[季集]|【[^】]*日剧】|"
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
- p[IDX_TV] = max(p[IDX_TV], p[IDX_MOVIE] + 0.40, 0.75)
201
- return int(max(range(len(p)), key=p.__getitem__)), "structural_tv_cue"
 
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)