Combine global and category words
This commit is contained in:
1 parent
9e8a3bc701
commit
8b952d4be6
3 files changed
+27
-64
No files matched your search
@@ -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'])
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|
||||||
|
|||||||
@@ -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, '&')
|
||||||
|
|||||||
Reference in new issue
Block a user