頻出単語を数える

タグクラウドが流行のようで。

デザインパターンは、ちょっと離れて。そういえば、ダイナミック Objective-C今回からデザインパターンのお話しになっていますね。Objective-C というか、Cocoa のフレームワークではふんだんにデザインパターンが使われています。日本語訳されている Cocoa Fundamentals Guide では、Cocoa のデザインパターンについて書かれている部分があります。ダイナミック Objective-C の初回は、Singleton か...。AppleScript でできるのかな...。

そういえば...と、関係のない話が続きますが、iTunes。iTunes 7.0.1 を使っているのですが、iTunes 環境設定の「一般」で「ビデオを再生:」を別ウィンドウにしているとビデオを再生したときに別のウィンドウが開かれますね。このウィンドウを開いたままでライブラリの中の音楽を再生すると、アートワークが表示されるのですね。曲が変わるごとにウィンドウのタイトルが曲名になってアートワークが変わる...。こんな機能ありましたっけ?ちょっと便利。

Monzai って、日本語文字列の解析ができるのですね。品詞が取得できる。英語なんかだと単語の出現頻度を調べるのは簡単なのですが、単純に AppleScript で words ってすると日本語は助詞でもなんでも単語に見なされてしまう。それでも構わないのですが、タグクラウドを作ったときに「は」や「を」などがクローズアップされてしまう。それは、困る。かといって、面倒なことはしたくない。そこで、Monzai を使う。

以下のスクリプトは、要 Monzai です。とにかく、試してみたかっただけなので、コードは殴り書き。

Script Editor で開く

set str to the clipboard as Unicode text

tell application "monzai"
    set theResult to kaiseki controller 1 mode 1 moji str
end tell

set wordsList to {}
set wordsCount to {}
repeat with thisItem in theResult
    set tmp to original of thisItem as string
    if hinsicode of thisItem is 0 then
        if wordsList contains tmp then
            repeat with i from 1 to count wordsList
                if (item i of wordsList) is tmp then exit repeat
            end repeat

            set num to (item i of wordsCount) + 1
            set item i of wordsCount to num
        else
            set end of wordsList to tmp
            set end of wordsCount to 1
        end if
    end if
end repeat

set min to 1000000
set max to -1000000
repeat with thisItem in wordsCount
    if thisItem > max then set max to thisItem as integer
    if thisItem < min then set min to thisItem as integer
end repeat
{min, max}

set ratio to 18.0 / (max - min)
set cloud to {}

tell application "TextEdit"
    activate
    close documents saving no
    set theDocument to make new document
end tell

repeat with i from 1 to count wordsList
    set thisWord to item i of wordsList
    set num to item i of wordsCount
    set fs to (9 + (num * ratio)) as integer
    tell application "TextEdit"
        tell theDocument
            make new word at end of words of it with data "[ " with properties {size:fs, color:{0, 0, 0}}
            make new word at end of words of it with data thisWord with properties {size:fs, color:{0, 32896, 65535}}
            make new word at end of words of it with data " ] " with properties {size:fs, color:{0, 0, 0}}
        end tell
    end tell
end repeat

クリップボードの中にある文字列の中から名詞を抜き出し、TextEdit で複数回使われている名詞は大きく、そうでない名詞は小さく表示します。面白い、面白い。これで、星の数ほどあるブログを全部読まなくても要点が分かる...かな。

0 件のコメント :

コメントを投稿