2007-02-05 - griffin-stewieの日記
このエントリに結構最近になってはてブされているのを知ってびっくりです。
ということでちょっといじってみようかなと思ったのですが・・・。
マルチバイト文字
2007-02-07 - griffin-stewieの日記
このエントリの最後で書いたマルチバイト文字を見つけたら邦楽と判定するというのを
実際に試してみました。
Rubyレシピブック 第2版 268の技
P122を使わせて頂きました。
#!/usr/bin/ruby begin require 'rubygems'; rescue LoadError; end $KCODE = "UTF8" require 'rbosa' OSA.utf8_strings = true itunes = OSA.app('iTunes') utf8 = /[\xc0-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xf7][\x80-\xbf]{3}|[\xf8-\xfb][\x80-\xbf]{4}|[\xfc-\xfd][\x80-\xbf]{5}/xn #選択されているトラックを対象とする itunes.selection.each{ |track| pre_comment = track.comment() puts "曲名「#{track.name}」" puts "アーティスト名「#{track.artist}」" if /\[Japanese\]|\[English\]/ =~ pre_comment p "分類済み" p pre_comment else p "未分類" kashi = track.lyrics() if kashi.length == 0 p "歌詞がありません" else if utf8 =~ kashi p "2Byte文字にマッチ" track.comment = "[Japanese]" +"\r\n" + pre_comment p "邦楽に設定" elsif track.comment = "[English]" +"\r\n" +pre_comment p "洋楽に設定" end end end }
以前のスクリプトは以下のようにして選択トラックを取得して
each で回していたのですが
selected_tracks = itunes.selection.get
今回Leopard環境でやると
NoMethodError: undefined method ‘get’ for #
と怒られてしまったので
itunes.selection.each{
get を介さずにそのまま each してみました。
肝心の高速化は?
これと比較してみると
ほとんど変わらない orz
むしろほんのちょっとだけ*1遅くなってる orz
一応、iTunesが起動していなかった時のエラー処理だけ追加した
初期と同じ歌詞内の英数字の出現率で判定するスクリプトを貼っておきます。
#!/usr/bin/ruby begin require 'rubygems'; rescue LoadError; end $KCODE = "UTF8" require 'rbosa' OSA.utf8_strings = true itunes = OSA.app('iTunes') #選択されているトラックを対象とする begin itunes.selection.each{ |track| pre_comment = track.comment() puts "曲名「#{track.name}」" puts "アーティスト名「#{track.artist}」" if /\[Japanese\]|\[English\]/ =~ pre_comment p "分類済み" p pre_comment else p "未分類" kashi = track.lyrics() if kashi.length == 0 p "歌詞がありません" elsif count = 0 kashi.scan(/[a-zA-Z0-9\']/) { count += 1 } puts "歌詞サイズ #{kashi.length}" puts "アルファベットにマッチ #{count}" par = (count.to_f / kashi.length.to_f)*100.to_f p "#{par.round}%" if par.round >= 65 track.comment = "[English]" +"\r\n" +pre_comment p "洋楽に設定" elsif track.comment = "[Japanese]" +"\r\n" + pre_comment p "邦楽に設定" end end end } rescue Exception => e puts "iTunesを起動し、トラックを選択して下さい。" puts e end
*1:0.01~0.03秒