矢印を集約することで歌詞カードがより実用的に #なってない
Happy Price Paradise - あるお店の物語
作詞 伊藤圭
https://www.youtube.com/watch?v=tcQgANj8fJk
require "ruby-graphviz"
lyric = [
(["ハッピー プライス パラダイス "]*4).join("ダイソー "),
(["ハイパー プライス パラダイス "]*4).join("ダイソー "),
(["ハッピー プライム パラダイス "]*4).join("ダイソー "),
(["ハッピー プライス パラダイム "]*4).join("ダイソー "),
["ハイパー プライム パラダイム ダイソー "]*3,
"ハッピー プライス パラダイス ダイソー",
].join(" ").split
words = lyric.uniq
transitons = Hash.new{|h,k| h[k] = Array.new}
lyric.each_cons(2).each_with_index do |t, i|
transitons[t] << i + 1
end
g = GraphViz.new( :G, :type => :digraph )
gn = words.map{|x| [x, g.add_nodes(x)]}.to_h
transitons.each_pair do |t, i|
e = g.add_edges(gn[t[0]], gn[t[1]])
e[:label] = i.join(",")
end
g.output(:png => "#{File.basename($0, ".rb")}.png")