LoginSignup
36
40

More than 5 years have passed since last update.

R言語 - tf-idfによる文書の特徴抽出

Last updated at Posted at 2015-12-25

はじめに

 似たような文書がいくつかあって、それらの違いが何なのかを大まかに把握したいというシチュエーションはありませんか?例えば、とある製品の新機能を紹介した資料があって、昔と今のトレンドにどのような変化があるかを大まかに把握したい、というようなシチュエーションです。このような場合、文書の特徴を抽出する手法の一つである、tf-idf(Term Frequency - Inverse Document Frequency)を利用するとよいでしょう。
 tf-idf は、文書中の単語に関する重みの一種であり、主に情報検索や文章要約などの分野で利用されます。tf-idf を簡単にご説明すると、単語が1つの文書中にどれだけ出現するか、それと、全文書の中で単語が出現する文書がどれだけあるかを計算しています。詳しい計算式は Web で調べてもらえればすぐに見つかると思います。この Tips では、tf-idf を、RMeCab ライブラリの docMatrix ファンクションで利用しています。処理の流れは次の通りです。
image

tf-idfによる文書の特徴抽出

▼サンプルスクリプト

R
# 日本語形態素解析のライブラリ(注1)を読み込みます
library (RMeCab)
# ワーキングディレクトリを指定します
setwd("ワーキングディレクトリ")
# 除外キーワードリストを読み込みます
e1 <- read.table('Exclude.txt', header=T)
# 文書が格納されているディレクトリを指定します
targetDir <- "文書が格納されているディレクトリ"
# tf-idfで文書の特徴を抽出します
test <- as.data.frame( docMatrix(targetDir,  weight = "tf*idf" ) )
# 除外用フラグを追加します(4列目になります)
test <- cbind(test, c(rep(0, times=nrow(test))))
# キーワード列を複製します(5列目になります)
test <- cbind(test, c(rownames(test)))
# 除外キーワードリストに含まれる単語の除外用フラグをオンにします
test[na.omit(match(e1[,1], test[,5])), 4] <- 1
# 文書「DB9.2」から、頻出度が20以上の単語を抽出します
DB9.2 <- test[ test[,1] > 19 & test[,4] == 0 , ]
# 配置先(x,y)をランダム値から生成してバインドします(6,7列目になります)
p <- cbind(sample(1:nrow(DB9.2)),sample(1:nrow(DB9.2)))
DB9.2 <- cbind(DB9.2,p)
# グラフ描画します
plot(DB9.2[,6],DB9.2[,7],type="n",xaxt = "n", yaxt = "n",frame = FALSE,ann=FALSE)
text(DB9.2[,6],DB9.2[,7],labels =DB9.2[,5],cex=DB9.2[,1]/40)
title(main="DB9.2 ホットキーワード",cex.main=1.4,font.main=4,col.main="red")

▼実行結果例
image

R
# 文書「DB12.1」から、頻出度が20以上の単語を抽出します
DB12.1 <- test[ test[,3] > 19 & test[,4] == 0 , ]
# 配置先(x,y)をランダム値から生成してバインドします(6,7列目になります)
p <- cbind(sample(1:nrow(DB12.1)),sample(1:nrow(DB12.1)))  # ポジションをランダム決定する
DB12.1 <- cbind(DB12.1,p)                                  # ポジションを結果にバインド(6,7列目)
# グラフ描画します
plot(DB12.1[,6],DB12.1[,7],type="n",xaxt = "n", yaxt = "n",frame = FALSE,ann=FALSE)
text(DB12.1[,6],DB12.1[,7],labels =DB12.1[,5],cex=DB12.1[,1]/40)
title(main="DB12.1 ホットキーワード",cex.main=1.4,font.main=4,col.main="red")

▼実行結果例
image

注釈

注 1 サンプルスクリプトは、RMeCab 0.9993 を使用しています。

36
40
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
36
40