bayonのRubyバインディング

http://storehouse.sakura.ne.jp/viewvc/viewvc.cgi/ruby-bayon/?root=svn
http://storehouse.sakura.ne.jp/viewvc/viewvc.cgi/ruby-bayon/ext/bayon.cpp?root=svn&view=markup
おおむね出来た。

require 'bayon'
include Bayon

$users = {
  1 => '阿佐田',
  2 => '小島',
  3 => '古川',
  4 => '田村',
  5 => '青柳',
  6 => '三輪',
}

$genres = {
  1 => 'HIPHOP',
  2 => 'J-POP',
  3 => 'J-R&B',
  4 => 'クラシック',
  5 => 'ジャズ',
  6 => 'メタル',
  7 => 'レゲエ',
  8 => 'ロック',
  9 => 'ワールド',
}

def add_mapping(m, doc, features)
  m[$users.index(doc)] = features.map {|g, v| [$genres.index(g), v] }
end

user_genre = {}
add_mapping(user_genre, '阿佐田', 'J-POP'      => 10, 'J-R&B'    => 6, 'ロック' => 4)
add_mapping(user_genre, '小島'  , 'ジャズ'     =>  8, 'レゲエ'   => 9               )
add_mapping(user_genre, '古川'  , 'クラシック' =>  4, 'ワールド' => 4               )
add_mapping(user_genre, '田村'  , 'ジャズ'     =>  9, 'メタル'   => 2, 'レゲエ' => 6)
add_mapping(user_genre, '青柳'  , 'J-POP'      =>  4, 'ロック'   => 3, 'HIPHOP' => 3)
add_mapping(user_genre, '三輪'  , 'クラシック' =>  8, 'ロック'   => 1               )

analyzer = Analyzer.new
analyzer.set_cluster_size_limit(3)

user_genre.each do |doc_id, features|
  doc = Document.new(doc_id)
  features.each {|k, v| doc.add_feature(k, v) }
  analyzer.add_document(doc)
end

analyzer.do_clustering(Analyzer::REPEATED_BISECTION)

while cluster = analyzer.get_next_result
  puts cluster.map {|i| $users[i] }.join(', ')
end


小島, 田村
青柳, 阿佐田
古川, 三輪
続行するには何かキーを押してください . . .