Combine global and category words

This commit is contained in:
Ruud committed 2013-07-19 16:58:49 +02:00
1 parent 9e8a3bc701
commit 8b952d4be6
3 files changed
+27 -64

No files matched your search

+16 -11
View File
@@ -1,11 +1,12 @@
from couchpotato.core.event import addEvent from couchpotato.core.event import addEvent
from couchpotato.core.helpers.encoding import toUnicode from couchpotato.core.helpers.encoding import toUnicode
from couchpotato.core.helpers.variable import getTitle from couchpotato.core.helpers.variable import getTitle, splitString
from couchpotato.core.logger import CPLog from couchpotato.core.logger import CPLog
from couchpotato.core.plugins.base import Plugin from couchpotato.core.plugins.base import Plugin
from couchpotato.core.plugins.score.scores import nameScore, CatnameScore, nameRatioScore, \ from couchpotato.core.plugins.score.scores import nameScore, nameRatioScore, \
sizeScore, providerScore, duplicateScore, partialIgnoredScore, CatpartialIgnoredScore, namePositionScore, \ sizeScore, providerScore, duplicateScore, partialIgnoredScore, namePositionScore, \
halfMultipartScore halfMultipartScore
from couchpotato.environment import Env
log = CPLog(__name__) log = CPLog(__name__)
@@ -18,10 +19,12 @@ class Score(Plugin):
def calculate(self, nzb, movie): def calculate(self, nzb, movie):
''' Calculate the score of a NZB, used for sorting later ''' ''' Calculate the score of a NZB, used for sorting later '''
if movie and movie['category'] and movie['category']['preferred']: # Merge global and category
score = CatnameScore(toUnicode(nzb['name']), movie['library']['year'], movie['category']['preferred']) preferred_words = splitString(Env.setting('preferred_words', section = 'searcher').lower())
else: try: preferred_words = list(set(preferred_words + splitString(movie['category']['preferred'].lower())))
score = nameScore(toUnicode(nzb['name']), movie['library']['year']) except: pass
score = nameScore(toUnicode(nzb['name']), movie['library']['year'], preferred_words)
for movie_title in movie['library']['titles']: for movie_title in movie['library']['titles']:
score += nameRatioScore(toUnicode(nzb['name']), toUnicode(movie_title['title'])) score += nameRatioScore(toUnicode(nzb['name']), toUnicode(movie_title['title']))
@@ -43,11 +46,13 @@ class Score(Plugin):
# Duplicates in name # Duplicates in name
score += duplicateScore(nzb['name'], getTitle(movie['library'])) score += duplicateScore(nzb['name'], getTitle(movie['library']))
# Merge global and category
ignored_words = splitString(Env.setting('ignored_words', section = 'searcher').lower())
try: ignored_words = list(set(ignored_words + splitString(movie['category']['ignored'].lower())))
except: pass
# Partial ignored words # Partial ignored words
if movie and movie['category'] and movie['category']['ignored']: score += partialIgnoredScore(nzb['name'], getTitle(movie['library']), ignored_words)
score = CatpartialIgnoredScore(nzb['name'], getTitle(movie['library']), movie['category']['ignored'])
else:
score += partialIgnoredScore(nzb['name'], getTitle(movie['library']))
# Ignore single downloads from multipart # Ignore single downloads from multipart
score += halfMultipartScore(nzb['name']) score += halfMultipartScore(nzb['name'])
+2 -45
View File
@@ -23,7 +23,7 @@ name_scores = [
] ]
def nameScore(name, year): def nameScore(name, year, preferred_words):
''' Calculate score for words in the NZB name ''' ''' Calculate score for words in the NZB name '''
score = 0 score = 0
@@ -42,38 +42,10 @@ def nameScore(name, year):
# Contains preferred word # Contains preferred word
nzb_words = re.split('\W+', simplifyString(name)) nzb_words = re.split('\W+', simplifyString(name))
preferred_words = splitString(Env.setting('preferred_words', section = 'searcher'))
score += 100 * len(list(set(nzb_words) & set(preferred_words))) score += 100 * len(list(set(nzb_words) & set(preferred_words)))
return score return score
def CatnameScore(name, year, preferred):
''' Calculate score for words in the NZB name '''
score = 0
name = name.lower()
# give points for the cool stuff
for value in name_scores:
v = value.split(':')
add = int(v.pop())
if v.pop() in name:
score = score + add
# points if the year is correct
if str(year) in name:
score = score + 5
# Contains preferred word
nzb_words = re.split('\W+', simplifyString(name))
preferred_words = [x.strip() for x in preferred.split(',')]
for word in preferred_words:
if word.strip() and word.strip().lower() in nzb_words:
score = score + 100
return score
def nameRatioScore(nzb_name, movie_name): def nameRatioScore(nzb_name, movie_name):
nzb_words = re.split('\W+', fireEvent('scanner.create_file_identifier', nzb_name, single = True)) nzb_words = re.split('\W+', fireEvent('scanner.create_file_identifier', nzb_name, single = True))
movie_words = re.split('\W+', simplifyString(movie_name)) movie_words = re.split('\W+', simplifyString(movie_name))
@@ -160,13 +132,11 @@ def duplicateScore(nzb_name, movie_name):
return len(list(set(duplicates) - set(movie_words))) * -4 return len(list(set(duplicates) - set(movie_words))) * -4
def partialIgnoredScore(nzb_name, movie_name): def partialIgnoredScore(nzb_name, movie_name, ignored_words):
nzb_name = nzb_name.lower() nzb_name = nzb_name.lower()
movie_name = movie_name.lower() movie_name = movie_name.lower()
ignored_words = [x.strip().lower() for x in Env.setting('ignored_words', section = 'searcher').split(',')]
score = 0 score = 0
for ignored_word in ignored_words: for ignored_word in ignored_words:
if ignored_word in nzb_name and ignored_word not in movie_name: if ignored_word in nzb_name and ignored_word not in movie_name:
@@ -174,19 +144,6 @@ def partialIgnoredScore(nzb_name, movie_name):
return score return score
def CatpartialIgnoredScore(nzb_name, movie_name, ignored):
nzb_name = nzb_name.lower()
movie_name = movie_name.lower()
ignored_words = [x.strip().lower() for x in ignored.split(',')]
score = 0
for ignored_word in ignored_words:
if ignored_word in nzb_name and ignored_word not in movie_name:
score -= 5
return score
def halfMultipartScore(nzb_name): def halfMultipartScore(nzb_name):
+9 -8
View File
@@ -105,6 +105,7 @@ class Searcher(Plugin):
for movie in movies: for movie in movies:
movie_dict = movie.to_dict({ movie_dict = movie.to_dict({
'category': {},
'profile': {'types': {'quality': {}}}, 'profile': {'types': {'quality': {}}},
'releases': {'status': {}, 'quality': {}}, 'releases': {'status': {}, 'quality': {}},
'library': {'titles': {}, 'files':{}}, 'library': {'titles': {}, 'files':{}},
@@ -392,10 +393,10 @@ class Searcher(Plugin):
nzb_words = re.split('\W+', nzb_name) nzb_words = re.split('\W+', nzb_name)
# Make sure it has required words # Make sure it has required words
try: required_words = splitString(self.conf('required_words').lower())
required_words = splitString(movie['category']['required'].lower()) try: required_words = list(set(required_words + splitString(movie['category']['required'].lower())))
except: except: pass
required_words = splitString(self.conf('required_words').lower())
req_match = 0 req_match = 0
for req_set in required_words: for req_set in required_words:
req = splitString(req_set, '&') req = splitString(req_set, '&')
@@ -406,10 +407,10 @@ class Searcher(Plugin):
return False return False
# Ignore releases # Ignore releases
try: ignored_words = splitString(self.conf('ignored_words').lower())
ignored_words = splitString(movie['category']['ignored'].lower()) try: ignored_words = list(set(ignored_words + splitString(movie['category']['ignored'].lower())))
except: except: pass
ignored_words = splitString(self.conf('ignored_words').lower())
ignored_match = 0 ignored_match = 0
for ignored_set in ignored_words: for ignored_set in ignored_words:
ignored = splitString(ignored_set, '&') ignored = splitString(ignored_set, '&')