したがって、文書を特徴付けるのは、他の文書にあまり出てこない単語が何回も出てくる場合ということになります。そこで、そうした語句に重みを付けるようにします。このような手法の一つにtf-idfというのがあります。文書中の単語への重みづけを行い、文書の特徴を抽出するのに使われます。
tfはterm frequencyの頭文字をとったもので、単語の出現頻度を表します。定義は、tf =(文書dに含まれる単語tの出現頻度)/(文書dに含まれる全単語の出現頻度の和)です。idfはinverse document frequencyの頭文字をとったもので、多くの文書に出現する単語の重みを下げます。定義は、idf = log{(全文書数)/(単語tが出現する文書の数)}です。logを使っているのは、文書数に対する影響を少なくするためです。あと、log 0を避けるため、1を加える措置を施すことがあります。で、両者をかけ合わせたものが、tf-idfになります。
では、Rで試してみましょう。まず、以下のコマンドを打ち込んでみて下さい。ただし、前回やった青空文庫の「風の又三郎」が、ディレクトリ名NORUBYの中に「ルビなしファイル」として置いてあるものとします(前回のkazeまでやってある状態)。で、新たに「セロ弾きのゴーシュ」を読み込んで、両者を比較してみます。
> celo <- Aozora(url = "https://www.aozora.gr.jp/cards/000081/files/470_ruby_3987.zip")
> library(RMeCab)
> listTFIDF <- docMatrix("NORUBY", pos=c("名詞"), weight = "tf*idf" )
> head(listTFIDF, 20)
docs
terms kazeno_matasaburo2.txt serohikino_goshu2.txt
アアハハハ 2 0
アアハハハハ 2 0
あい 16 0
あいだ 2 0
あいつ 4 0
あかし 2 1
あぐら 2 0
あざみ 4 0
あざらし 2 0
あし 2 0
あした 4 0
あたり 7 2
あたりまえ 2 0
あちこち 8 0
あっち 6 0
あと 17 7
あなた 1 2
アルプス 2 0
あん 2 0
い 12 0
>
0 件のコメント:
コメントを投稿