Browse Source

Combine global and category words

pull/1980/merge
Ruud 12 years ago
parent
commit
8b952d4be6
  1. 27
      couchpotato/core/plugins/score/main.py
  2. 47
      couchpotato/core/plugins/score/scores.py
  3. 17
      couchpotato/core/plugins/searcher/main.py

27
couchpotato/core/plugins/score/main.py

@ -1,11 +1,12 @@
from couchpotato.core.event import addEvent
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.plugins.base import Plugin
from couchpotato.core.plugins.score.scores import nameScore, CatnameScore, nameRatioScore, \
sizeScore, providerScore, duplicateScore, partialIgnoredScore, CatpartialIgnoredScore, namePositionScore, \
from couchpotato.core.plugins.score.scores import nameScore, nameRatioScore, \
sizeScore, providerScore, duplicateScore, partialIgnoredScore, namePositionScore, \
halfMultipartScore
from couchpotato.environment import Env
log = CPLog(__name__)
@ -18,10 +19,12 @@ class Score(Plugin):
def calculate(self, nzb, movie):
''' Calculate the score of a NZB, used for sorting later '''
if movie and movie['category'] and movie['category']['preferred']:
score = CatnameScore(toUnicode(nzb['name']), movie['library']['year'], movie['category']['preferred'])
else:
score = nameScore(toUnicode(nzb['name']), movie['library']['year'])
# Merge global and category
preferred_words = splitString(Env.setting('preferred_words', section = 'searcher').lower())
try: preferred_words = list(set(preferred_words + splitString(movie['category']['preferred'].lower())))
except: pass
score = nameScore(toUnicode(nzb['name']), movie['library']['year'], preferred_words)
for movie_title in movie['library']['titles']:
score += nameRatioScore(toUnicode(nzb['name']), toUnicode(movie_title['title']))
@ -43,11 +46,13 @@ class Score(Plugin):
# Duplicates in name
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
if movie and movie['category'] and movie['category']['ignored']:
score = CatpartialIgnoredScore(nzb['name'], getTitle(movie['library']), movie['category']['ignored'])
else:
score += partialIgnoredScore(nzb['name'], getTitle(movie['library']))
score += partialIgnoredScore(nzb['name'], getTitle(movie['library']), ignored_words)
# Ignore single downloads from multipart
score += halfMultipartScore(nzb['name'])

47
couchpotato/core/plugins/score/scores.py

@ -23,7 +23,7 @@ name_scores = [
]
def nameScore(name, year):
def nameScore(name, year, preferred_words):
''' Calculate score for words in the NZB name '''
score = 0
@ -42,38 +42,10 @@ def nameScore(name, year):
# Contains preferred word
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)))
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):
nzb_words = re.split('\W+', fireEvent('scanner.create_file_identifier', nzb_name, single = True))
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
def partialIgnoredScore(nzb_name, movie_name):
def partialIgnoredScore(nzb_name, movie_name, ignored_words):
nzb_name = nzb_name.lower()
movie_name = movie_name.lower()
ignored_words = [x.strip().lower() for x in Env.setting('ignored_words', section = 'searcher').split(',')]
score = 0
for ignored_word in ignored_words:
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
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):

17
couchpotato/core/plugins/searcher/main.py

@ -105,6 +105,7 @@ class Searcher(Plugin):
for movie in movies:
movie_dict = movie.to_dict({
'category': {},
'profile': {'types': {'quality': {}}},
'releases': {'status': {}, 'quality': {}},
'library': {'titles': {}, 'files':{}},
@ -392,10 +393,10 @@ class Searcher(Plugin):
nzb_words = re.split('\W+', nzb_name)
# Make sure it has required words
try:
required_words = splitString(movie['category']['required'].lower())
except:
required_words = splitString(self.conf('required_words').lower())
required_words = splitString(self.conf('required_words').lower())
try: required_words = list(set(required_words + splitString(movie['category']['required'].lower())))
except: pass
req_match = 0
for req_set in required_words:
req = splitString(req_set, '&')
@ -406,10 +407,10 @@ class Searcher(Plugin):
return False
# Ignore releases
try:
ignored_words = splitString(movie['category']['ignored'].lower())
except:
ignored_words = splitString(self.conf('ignored_words').lower())
ignored_words = splitString(self.conf('ignored_words').lower())
try: ignored_words = list(set(ignored_words + splitString(movie['category']['ignored'].lower())))
except: pass
ignored_match = 0
for ignored_set in ignored_words:
ignored = splitString(ignored_set, '&')

Loading…
Cancel
Save