mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Add merging of identify results if they have a common identifier. Turned off for now
This commit is contained in:
parent
a244767f49
commit
73ef5b9991
@ -114,8 +114,12 @@ class ISBNMerge(object):
|
|||||||
|
|
||||||
return self.results
|
return self.results
|
||||||
|
|
||||||
def merge_metadata_results(self):
|
def merge_metadata_results(self, merge_on_identifiers=False):
|
||||||
' Merge results with identical title and authors '
|
'''
|
||||||
|
Merge results with identical title and authors or an identical
|
||||||
|
identifier
|
||||||
|
'''
|
||||||
|
# First title/author
|
||||||
groups = {}
|
groups = {}
|
||||||
for result in self.results:
|
for result in self.results:
|
||||||
title = lower(result.title if result.title else '')
|
title = lower(result.title if result.title else '')
|
||||||
@ -135,6 +139,44 @@ class ISBNMerge(object):
|
|||||||
result = rgroup[0]
|
result = rgroup[0]
|
||||||
self.results.append(result)
|
self.results.append(result)
|
||||||
|
|
||||||
|
if merge_on_identifiers:
|
||||||
|
# Now identifiers
|
||||||
|
groups, empty = {}, []
|
||||||
|
for result in self.results:
|
||||||
|
key = set()
|
||||||
|
for typ, val in result.identifiers.iteritems():
|
||||||
|
if typ and val:
|
||||||
|
key.add((typ, val))
|
||||||
|
if key:
|
||||||
|
key = frozenset(key)
|
||||||
|
match = None
|
||||||
|
for candidate in list(groups):
|
||||||
|
if candidate.intersection(key):
|
||||||
|
# We have at least one identifier in common
|
||||||
|
match = candidate.union(key)
|
||||||
|
results = groups.pop(candidate)
|
||||||
|
results.append(result)
|
||||||
|
groups[match] = results
|
||||||
|
break
|
||||||
|
if match is None:
|
||||||
|
groups[key] = [result]
|
||||||
|
else:
|
||||||
|
empty.append(result)
|
||||||
|
|
||||||
|
if len(groups) != len(self.results):
|
||||||
|
self.results = []
|
||||||
|
for rgroup in groups.itervalues():
|
||||||
|
rel = [r.average_source_relevance for r in rgroup]
|
||||||
|
if len(rgroup) > 1:
|
||||||
|
result = self.merge(rgroup, None, do_asr=False)
|
||||||
|
result.average_source_relevance = sum(rel)/len(rel)
|
||||||
|
elif rgroup:
|
||||||
|
result = rgroup[0]
|
||||||
|
self.results.append(result)
|
||||||
|
|
||||||
|
if empty:
|
||||||
|
self.results.extend(empty)
|
||||||
|
|
||||||
self.results.sort(key=attrgetter('average_source_relevance'))
|
self.results.sort(key=attrgetter('average_source_relevance'))
|
||||||
|
|
||||||
def merge_isbn_results(self):
|
def merge_isbn_results(self):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user