언어 - tf-idf로 문서의 특징 추출

소개



비슷한 문서가 몇 가지 있고, 그 차이가 무엇인지를 대략적으로 파악하고 싶다고 하는 상황은 없습니까? 예를 들어, 어떤 제품의 신기능을 소개한 자료가 있어, 옛날과 지금의 트렌드에 어떤 변화가 있는지를 대략적으로 파악하고 싶다는, 같은 상황입니다. 이 경우 문서의 특징을 추출하는 방법 중 하나인 tf-idf(Term Frequency - Inverse Document Frequency)를 이용하면 좋을 것입니다.
tf-idf 는 문서중의 단어에 관한 가중의 일종이며, 주로 정보 검색이나 문장 요약 등의 분야에서 이용됩니다. tf-idf 를 간단히 설명하면, 단어가 1개의 문서중에 얼마나 출현하는지, 그리고, 모든 문서안에서 단어가 출현하는 문서가 얼마나 있는지를 계산하고 있습니다. 자세한 계산식은 웹에서 살펴보면 바로 찾을 수 있다고 생각합니다. 이 팁에서는 tf-idf를 RMeCab 라이브러리의 docMatrix 함수에서 사용합니다. 처리 흐름은 다음과 같습니다.


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")

▼실행 결과 예


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")

▼실행 결과 예


주석



참고 1 샘플 스크립트는 RMeCab 0.9993을 사용합니다.

좋은 웹페이지 즐겨찾기