Mercurial > hg > camir-aes2014
diff core/magnatagatune/ranking_from_comparison_trivial.m @ 0:e9a9cd732c1e tip
first hg version after svn
author | wolffd |
---|---|
date | Tue, 10 Feb 2015 15:05:51 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/magnatagatune/ranking_from_comparison_trivial.m Tue Feb 10 15:05:51 2015 +0000 @@ -0,0 +1,90 @@ +function [r, valididx, clip_ids] = ranking_from_comparison_trivial(comparison, comparison_ids) +% returns a ranking for each of the compared songs +% +% r(idx,1) = all indexes which are similar to clip idx +% r(idx,2) = all indexes which are dissimilar to clip idx +% +% if onlyvalid is set to true, only the transitive hull of +% clips having sim and dissim values will be output + +% --- +% in comparison, the outlying piece is highlighted. +% thus, we naively consider that +% a. both of the remaining pieces are more similar to each other. +% b. the outlier is dissimilar to both of the other pieces +% --- + +[outsort, outidx] = sort(comparison(:,4:6),2,'ascend'); + +r = cell(numel(comparison_ids), 2); +s = zeros(numel(comparison_ids), 2); % score for rankings +for i = 1:size(comparison, 1) + + % get the three relevant comparison ids + + pos = comparison(i, outidx(i,1:3)); + vals = outsort(i,:); + + % --- + % each of the three clips will be evaluated based on its position + % the last clip is the potential outlyier + % --- + + % --- + % usual case: two small values and a last outlie + % --- + if vals(2) ~= vals(3) + + + % --- + % first (most common) clip: + % the second clip is more similar than the third one + % --- + r{pos(1),1} = cat(1, r{pos(1),1}, pos(2)); % similar + r{pos(1),2} = cat(1, r{pos(1),2}, pos(3)); % dissimilar +% else +% +% % ok, both seem more dissimilar to clip 1 +% r{pos(1),2} = cat(1, r{pos(1),1}, pos(2)); % both dissimilar +% r{pos(1),2} = cat (1, r{pos(1),2}, pos(3)); % dissimilar + end + + if vals(3) ~= vals(1) + % --- + % the second clip is more similar to the first than + % the third + % --- + r{pos(2),1} = cat(1, r{pos(2),1}, pos(1)); + r{pos(2),2} = cat(1, r{pos(2),2}, pos(3)); + + % --- + % the third clip is not similar to any of the former + % NOTE: we avoid this information as it possibly leads + % to some contradictionary statements + % --- + r{pos(3),2} = cat(1, r{pos(3),2}, pos(1)); + r{pos(3),2} = cat(1, r{pos(3),2}, pos(2)); + end + + +end + +% --- +% we cleanup r and +% run basic checks on emptiness and paradox assumptions +% --- +valididx = zeros(size(r,1), 1); +for i = 1:size(r, 1) + + % make unique + r{i,1} = unique(r{i,1}); + r{i,2} = unique(r{i,2}); + + % check + valididx(i) = ~isempty(r{i,1}) && ~isempty(r{i,2}) && ... + isempty(intersect(r{i,1}, r{i,2})); +end + +valididx = logical(valididx); +clip_ids = 1:numel(comparison_ids); +