読者です 読者をやめる 読者になる 読者になる

ワードリストを作る

r corpus

 今回は、Rを使ったワードリストの作成方法について書きます。以下の例では、languageRパッケージのalice(『不思議の国のアリス』)を使っています。

# 分析データ
library(languageR)
data(alice)

# 全ての文字を小文字に変換
alice.lower <- tolower(alice)
# ワードリストの作成
freq.list <- table(alice.lower)
sorted.freq.list <- sort(freq.list, decreasing = TRUE)
sorted.table <- paste(names(sorted.freq.list), sorted.freq.list, sep = ": ")
# ワードリスト(頻度上位50位まで)の確認
head(sorted.table, 50)

 上記のスクリプトを実行すると、以下のような結果が得られます。そして、『不思議の国のアリス』で最も多く使われている語が"the"(1639回)で、次が"and"(866回)であることが分かるでしょう。

 [1] "the: 1639"   "and: 866"    "to: 725"     "a: 631"      "it: 595"    
 [6] "she: 553"    "i: 545"      "of: 511"     "said: 462"   "you: 411"   
[11] "alice: 398"  "in: 367"     "was: 357"    "that: 315"   "as: 263"    
[16] "her: 248"    "t: 218"      "at: 212"     "s: 201"      "on: 193"    
[21] "all: 182"    "with: 180"   "had: 178"    "but: 170"    "for: 153"   
[26] "they: 152"   "so: 151"     "be: 148"     "not: 145"    "very: 144"  
[31] "what: 141"   "this: 134"   "little: 128" "he: 125"     "out: 113"   
[36] "is: 108"     "one: 104"    "down: 102"   "there: 99"   "up: 98"     
[41] "his: 96"     "if: 96"      "about: 94"   "then: 94"    "no: 90"     
[46] "know: 88"    "them: 88"    "like: 85"    "were: 85"    "again: 83" 

 分析の目的によっては、数字や句読点を「単語」としてカウントして欲しくない場合もあります。そのようなときには、tmパッケージのremoveNumbers関数とremovePunctuation関数を使うとよいでしょう。*1

# パッケージの読み込み
library(tm)
# テキストから数字を削除
alice.clean <- removeNumbers(alice.lower)
# テキストから句読点を削除
alice.clean <- removePunctuation(alice.clean)
# ワードリストの作成
freq.list2 <- table(alice.clean)
sorted.freq.list2 <- sort(freq.list2, decreasing = TRUE)
sorted.table2 <- paste(names(sorted.freq.list2), sorted.freq.list2, sep = ": ")

 また、ステミング処理を行いたい場合は、stemDocument関数を使います。*2

# ステミング
alice.stem <- stemDocument(alice.lower)
# ワードリストの作成
freq.list3 <- table(alice.stem)
sorted.freq.list3 <- sort(freq.list3, decreasing = TRUE)
sorted.table3 <- paste(names(sorted.freq.list3), sorted.freq.list3, sep = ": ")
# ワードリスト(頻度上位50位まで)の確認
head(sorted.table3, 50)

 上記のスクリプトを実行すると、以下のような結果が得られます。

 [1] "the: 1639"  "and: 866"   "to: 725"    "it: 652"    "a: 631"    
 [6] "she: 553"   "i: 545"     "of: 511"    "said: 462"  "you: 411"  
[11] "alic: 398"  "in: 367"    "was: 357"   "that: 315"  "as: 263"   
[16] "her: 252"   "t: 218"     "at: 212"    "s: 201"     "on: 193"   
[21] "all: 182"   "with: 180"  "had: 178"   "but: 170"   "be: 167"   
[26] "for: 153"   "they: 152"  "so: 151"    "not: 145"   "veri: 144" 
[31] "what: 141"  "this: 134"  "littl: 128" "he: 125"    "out: 113"  
[36] "is: 108"    "one: 105"   "look: 103"  "down: 102"  "there: 99" 
[41] "up: 98"     "like: 97"   "his: 96"    "if: 96"     "about: 94" 
[46] "then: 94"   "know: 92"   "have: 90"   "no: 90"     "them: 88"

*1:ストップワードを細かく指定したい場合は、tmパッケージのremoveWords関数を使います。

*2:この関数は、Porter's stemming algorithmに基づいています。また、より正確に活用語や派生語をまとめるには、レマタイゼーションという処理を行う必要があります。レマタイゼーションによるワードリストの作成については、こちらをご覧ください。