griffin-stewieの日記

2007-12-21

[][][]なんでだろ。

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 #<Array:0x5690a0>


と怒られてしまったので

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秒

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/griffin-stewie/20071221/p2
プロフィール

griffin-stewie

griffin-stewie

遂にプログラマの端くれに。ここで述べられていることは私の個人的な意見に基づくものであり、私の雇用者には一切関係ありません。