Fine-tune release group matching and cleanup

This commit is contained in:
Reinhard Pointner 2016-03-29 13:02:49 +00:00
parent 91ed090da1
commit d88fd57e9f
2 changed files with 23 additions and 7 deletions

View File

@ -95,19 +95,19 @@ public class ReleaseInfo {
return null; return null;
} }
public String getReleaseGroup(String... strings) throws Exception { public String getReleaseGroup(String... name) throws Exception {
// check file and folder for release group names // check file and folder for release group names
String[] groups = releaseGroup.get(); String[] groups = releaseGroup.get();
// try case-sensitive match // try case-sensitive match
String match = matchLast(getReleaseGroupPattern(true), groups, strings); String match = matchLast(getReleaseGroupPattern(true), groups, name);
if (match != null) { if (match != null) {
return match; return match;
} }
// try case-insensitive match // try case-insensitive match
return matchLast(getReleaseGroupPattern(false), groups, strings); return matchLast(getReleaseGroupPattern(false), groups, name);
} }
private Pattern languageTag; private Pattern languageTag;
@ -177,8 +177,8 @@ public class ReleaseInfo {
Pattern resolution = getResolutionPattern(); Pattern resolution = getResolutionPattern();
Pattern queryBlacklist = getBlacklistPattern(); Pattern queryBlacklist = getBlacklistPattern();
stopwords[b] = new Pattern[] { languageTag, videoSource, videoTags, videoFormat, resolution, stereoscopic3d, languageSuffix }; stopwords[b] = new Pattern[] { languageSuffix, languageTag, videoSource, videoTags, videoFormat, resolution, stereoscopic3d };
blacklist[b] = new Pattern[] { releaseGroupTrim, queryBlacklist, languageTag, clutterBracket, releaseGroup, videoSource, videoTags, videoFormat, resolution, stereoscopic3d, languageSuffix }; blacklist[b] = new Pattern[] { languageSuffix, releaseGroupTrim, queryBlacklist, languageTag, clutterBracket, releaseGroup, videoSource, videoTags, videoFormat, resolution, stereoscopic3d };
} }
return items.stream().map(it -> { return items.stream().map(it -> {
@ -324,8 +324,13 @@ public class ReleaseInfo {
} }
public Pattern getReleaseGroupPattern(boolean strict) throws Exception { public Pattern getReleaseGroupPattern(boolean strict) throws Exception {
// pattern matching any release group name enclosed in separators // match 1..N group patterns
return compile("((?<!\\p{Alnum})" + or(releaseGroup.get()) + "(?!\\p{Alnum}|[^\\p{Alnum}](19|20)\\d{2})($|[\\p{Punct}]))+", strict ? 0 : CASE_INSENSITIVE | UNICODE_CHARACTER_CLASS); String group = "((?<!\\p{Alnum})" + or(releaseGroup.get()) + "(?!\\p{Alnum})[\\p{Punct}]??)+";
// group pattern at beginning or ending of the string
String[] groupHeadTail = { "(?<=^[^\\p{Alnum}]*)" + group, group + "(?=[\\p{Alpha}\\p{Punct}]*$)" };
return compile(or(groupHeadTail), strict ? 0 : CASE_INSENSITIVE | UNICODE_CHARACTER_CLASS);
} }
public Pattern getReleaseGroupTrimPattern() throws Exception { public Pattern getReleaseGroupTrimPattern() throws Exception {

View File

@ -21,6 +21,17 @@ public class ReleaseInfoTest {
assertEquals("aXXo", info.getReleaseGroup("Jurassic.Park[1993]DvDrip-aXXo")); assertEquals("aXXo", info.getReleaseGroup("Jurassic.Park[1993]DvDrip-aXXo"));
} }
@Test
public void getReleaseGroupWithSubs() throws Exception {
assertEquals("aXXo", info.getReleaseGroup("Jurassic.Park[1993]DvDrip-aXXo.eng-forced"));
}
@Test
public void getReleaseGroupFalseNegative() throws Exception {
assertEquals(null, info.getReleaseGroup("The.aXXo.Movie.2005"));
assertEquals(null, info.getReleaseGroup("The aXXo Movie"));
}
@Test @Test
public void getClutterBracketPattern() throws Exception { public void getClutterBracketPattern() throws Exception {
assertEquals("John [2016] (ENG)", clean(info.getClutterBracketPattern(true), "John [2016] [Action, Drama] (ENG)")); assertEquals("John [2016] (ENG)", clean(info.getClutterBracketPattern(true), "John [2016] [Action, Drama] (ENG)"));