From 9b0806f01f01ebb25517e25a1b2c9bbb83f30f2f Mon Sep 17 00:00:00 2001 From: Reinhard Pointner Date: Sun, 18 Jan 2015 08:57:37 +0000 Subject: [PATCH] * fine-tune seriesName/aliasNames based matching --- .../net/filebot/format/MediaBindingBean.java | 9 ++++++-- .../filebot/similarity/EpisodeMetrics.java | 17 ++++++++------- source/net/filebot/web/AnidbClient.java | 2 +- source/net/filebot/web/Episode.java | 21 +++++++++++++++++++ source/net/filebot/web/EpisodeUtilities.java | 5 ----- source/net/filebot/web/TheTVDBClient.java | 3 ++- 6 files changed, 40 insertions(+), 17 deletions(-) diff --git a/source/net/filebot/format/MediaBindingBean.java b/source/net/filebot/format/MediaBindingBean.java index 29445d45..c6909571 100644 --- a/source/net/filebot/format/MediaBindingBean.java +++ b/source/net/filebot/format/MediaBindingBean.java @@ -17,6 +17,7 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.util.ArrayList; import java.util.Date; +import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashSet; import java.util.List; @@ -1011,17 +1012,21 @@ public class MediaBindingBean { } private List getKeywords() { - List keys = new ArrayList(); + // collect key information + Set keys = new HashSet(); keys.add(getName()); keys.add(getYear()); keys.addAll(getAliasNames()); + if (infoObject instanceof Episode) { for (Episode it : getEpisodes()) { + keys.addAll(it.getSeriesNames()); keys.add(it.getTitle()); } } - List words = new ArrayList(); + // word list for exclude pattern + List words = new ArrayList(keys.size()); for (Object it : keys) { String w = normalizePunctuation(normalizeSpace(Objects.toString(it, ""), " ")); if (w != null && w.length() > 0) { diff --git a/source/net/filebot/similarity/EpisodeMetrics.java b/source/net/filebot/similarity/EpisodeMetrics.java index 31a4db6f..d46b2686 100644 --- a/source/net/filebot/similarity/EpisodeMetrics.java +++ b/source/net/filebot/similarity/EpisodeMetrics.java @@ -207,10 +207,10 @@ public enum EpisodeMetrics implements SimilarityMetric { protected Object[] fields(Object object) { if (object instanceof Episode) { Episode episode = (Episode) object; - LinkedHashSet keywords = new LinkedHashSet(4); + Set keywords = new LinkedHashSet(); keywords.add(removeTrailingBrackets(episode.getSeriesName())); keywords.add(removeTrailingBrackets(episode.getTitle())); - for (String it : episode.getSeriesInfo().getAliasNames()) { + for (String it : episode.getSeriesNames()) { keywords.add(removeTrailingBrackets(it)); } @@ -275,7 +275,7 @@ public enum EpisodeMetrics implements SimilarityMetric { protected List getEffectiveIdentifiers(Object object) { if (object instanceof Episode) { - return ((Episode) object).getSeriesInfo().getAliasNames(); + return ((Episode) object).getSeriesNames(); } else if (object instanceof Movie) { return ((Movie) object).getEffectiveNames(); } else if (object instanceof File) { @@ -344,7 +344,7 @@ public enum EpisodeMetrics implements SimilarityMetric { List names = null; if (object instanceof Episode) { - names = ((Episode) object).getSeriesInfo().getAliasNames(); + names = ((Episode) object).getSeriesNames(); } else if (object instanceof File) { File file = (File) object; @@ -594,9 +594,11 @@ public enum EpisodeMetrics implements SimilarityMetric { public Set getHint(Object o) { if (o instanceof Episode) { - Matcher m = hint.matcher(((Episode) o).getSeriesName()); - if (m.find()) { - return singleton(m.group(1).trim().toLowerCase()); + for (String sn : ((Episode) o).getSeriesNames()) { + Matcher m = hint.matcher(sn); + if (m.find()) { + return singleton(m.group(1).trim().toLowerCase()); + } } } else if (o instanceof File) { Set h = new HashSet(); @@ -605,7 +607,6 @@ public enum EpisodeMetrics implements SimilarityMetric { String n = f.getName(); String sn = seriesNameMatcher.matchByEpisodeIdentifier(n); - // tokenize String[] tokens = punctuation.split(sn != null ? sn : n); for (String s : tokens) { if (s.length() > 0) { diff --git a/source/net/filebot/web/AnidbClient.java b/source/net/filebot/web/AnidbClient.java index b0e2d58d..abaeb2b6 100644 --- a/source/net/filebot/web/AnidbClient.java +++ b/source/net/filebot/web/AnidbClient.java @@ -169,7 +169,7 @@ public class AnidbClient extends AbstractEpisodeListProvider { } // make sure episodes are in ordered correctly - sortEpisodes(episodes); + sort(episodes, episodeComparator()); // sanity check if (episodes.isEmpty()) { diff --git a/source/net/filebot/web/Episode.java b/source/net/filebot/web/Episode.java index 5debe927..9e67127e 100644 --- a/source/net/filebot/web/Episode.java +++ b/source/net/filebot/web/Episode.java @@ -1,8 +1,11 @@ package net.filebot.web; import java.io.Serializable; +import java.util.ArrayList; import java.util.Arrays; +import java.util.LinkedHashSet; import java.util.List; +import java.util.Set; public class Episode implements Serializable { @@ -82,6 +85,24 @@ public class Episode implements Serializable { return Arrays.asList(season, episode, special); } + public List getSeriesNames() { + Set names = new LinkedHashSet(); + if (seriesName != null) { + names.add(seriesName); + } + if (seriesInfo != null) { + if (seriesInfo.name != null) { + names.add(seriesInfo.name); + } + if (seriesInfo.aliasNames != null) { + for (String it : seriesInfo.aliasNames) { + names.add(it); + } + } + } + return new ArrayList(names); + } + @Override public boolean equals(Object obj) { if (obj instanceof Episode) { diff --git a/source/net/filebot/web/EpisodeUtilities.java b/source/net/filebot/web/EpisodeUtilities.java index 93e1bd33..c876f3fc 100644 --- a/source/net/filebot/web/EpisodeUtilities.java +++ b/source/net/filebot/web/EpisodeUtilities.java @@ -1,7 +1,6 @@ package net.filebot.web; import java.util.ArrayList; -import java.util.Collections; import java.util.Comparator; import java.util.List; @@ -33,10 +32,6 @@ public final class EpisodeUtilities { return lastSeason; } - public static void sortEpisodes(List episodes) { - Collections.sort(episodes, episodeComparator()); - } - public static Comparator episodeComparator() { return new Comparator() { diff --git a/source/net/filebot/web/TheTVDBClient.java b/source/net/filebot/web/TheTVDBClient.java index c67a3c40..34093465 100644 --- a/source/net/filebot/web/TheTVDBClient.java +++ b/source/net/filebot/web/TheTVDBClient.java @@ -1,6 +1,7 @@ package net.filebot.web; import static java.util.Arrays.*; +import static java.util.Collections.*; import static net.filebot.util.XPathUtilities.*; import static net.filebot.web.EpisodeUtilities.*; import static net.filebot.web.WebRequest.*; @@ -209,7 +210,7 @@ public class TheTVDBClient extends AbstractEpisodeListProvider { } // episodes my not be ordered by DVD episode number - sortEpisodes(episodes); + sort(episodes, episodeComparator()); // add specials at the end episodes.addAll(specials);