Created
December 3, 2012 07:19
-
-
Save tabris2012/4193341 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def makeIdealEdges(posterSearch, gviz, idealNodes, depth) | |
posterHash = @posterDistance[posterSearch].sort{|a, b| b[1].length <=> a[1].length} | |
lastLength = posterHash[0][1].length #始めの共有単語数 | |
toDraw = Array.new #出力予定ポスターを回収 | |
#まず共有単語数の一番多いポスターをすべて回収 | |
posterHash.each do |number, words| | |
if words.length != lastLength #同順でなくなったら | |
lastLength = words.length | |
break | |
end | |
toDraw.push([number, words.last.to_i]) #wordsの最後に頻度合計値が入っている | |
lastLength = words.length #前回の単語数を記憶しておく | |
end | |
if toDraw.length > idealNodes#既に理想出力数を超えていたら | |
toDraw = toDraw.sort{|a, b| a[1] <=> b[1]} #単語頻度の小さい順に入れ替え | |
toDraw.slice(0..idealNodes).each do |number, words| #理想出力数まで出力 | |
gviz.route "#{posterSearch[0].to_i}".to_sym => "#{number[0].to_i}".to_sym | |
gviz.node "#{number[0].to_i}".to_sym, label:"#{number[0]}:#{number[1]}" | |
if depth > 1 #まだ深くなければ | |
makeIdealEdges(number, gviz, depth, depth - 1) | |
end | |
end | |
else #届いていなければさらに追加 | |
drawnNodes = toDraw.length #既に出力したノード数を記録 | |
toDraw = 0 #同順位のポスター数を数える | |
posterHash.slice(drawnNodes..-1).each do |number, words| | |
if words.length != lastLength #同順位でなくなったら | |
if (toDraw + drawnNodes) > idealNodes #出力上限数を超えていれば | |
break | |
else #上限を超えていなければ | |
drawnNodes += toDraw #出力予定数を追加 | |
toDraw =0 | |
end | |
end | |
toDraw +=1 | |
lastLength = words.length #前回の単語数を記憶しておく | |
end | |
#最後に全て出力 | |
posterHash.slice(0..drawnNodes).each do |number, words| | |
gviz.route "#{posterSearch[0].to_i}".to_sym => "#{number[0].to_i}".to_sym | |
gviz.node "#{number[0].to_i}".to_sym, label:"#{number[0]}:#{number[1]}" | |
makeIdealEdges(number, gviz, idealNodes - drawnNodes + depth, depth - 1) | |
end | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment