Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

HiroshimaR4_LT_sakaue

758 views

Published on

HiRoshima.R #4 での阪上が担当した LT 「R で英語のデータを分析してみるー基礎編」の資料です。

英語コーパス学会等のお座敷で使用したものを,SnowballC パッケージの情報を更新する形で,再利用しています。

Published in: Data & Analytics
  • Be the first to comment

HiroshimaR4_LT_sakaue

  1. 1. 2015-07-11 HiRoshima.R #4 統計解析環境 で英語のデータを分析してみる―基礎編
  2. 2. 検索と処理 の原理に迫る を使う意義言語データ処理で
  3. 3. 検索ソフトの中で 何が起こっているのか を使う意義言語データ処理で
  4. 4. 検索過程の ブラックボックス化 を避けたい を使う意義言語データ処理で
  5. 5. どんな過程を経て 検索・処理結果が 出るのかを学ぶ を使う意義言語データ処理で
  6. 6. R で英語のデータを分析するには… つなげて数える (頻度表作成)
  7. 7. pp.87-100 を真似てみる
  8. 8. R で文字列処理 > sample <- "DONE IS BETTER THAN PERFECT" > length(sample) #要素数 > nchar(sample) #文字数(空白類含む) > x <- c("ABC”, "efg") #2つの文字列 > length(x) #要素数 > nchar(x) #文字数(各要素に対して)
  9. 9. > tolower(sample) #大文字を小文字に変換 > toupper(x) #小文字を大文字に変換 > toupper(tolower(sample)) #連続処理1 > tolower(toupper(tolower(sample))) #連続処理2 > #丸括弧の数に注意 R で文字列処理
  10. 10. > steve <- c("No one wants to die.", "Even people who want to go to heaven don't want to die to get there.") > length(steve) # 要素数 > nchar(steve) # 文字数 > strsplit(steve, " ") #文字列を空白で切り分け http://news.stanford.edu/news/2005/june15/jobs-061505.html R で文字列処理
  11. 11. > steve2 <- unlist(strsplit(steve, " ")) > #リスト内の要素を結合し1つのベクトルに > steve2 > length(steve2) > table(steve2) #頻度表を作成 > as.data.frame(table(steve2)) #表を縦に http://news.stanford.edu/news/2005/june15/jobs-061505.html R で文字列処理
  12. 12. > alice <- readLines("alice.txt") > #readLines() で1行ずつ読み込み > head(alice, 50) #50行目までを表示 > grep("THE END", alice) #grep() で検索 > alice[3365:3375] #3370前後を表示して確認 > alice2 <- alice[41:3370] #本文のみを代入 > head(alice2) #念のため確認 R で文字列処理
  13. 13. > alice.words <- unlist (strsplit (alice2, split = “[[:space:]]+|[[:punct:]]+")) > #空白類・ピリオド・カンマなどが1つ以上続 く部分を区切りとして文字列を切り出し > length(alice.words) > #句読点を省いた単語数を抽出 R で文字列処理
  14. 14. > head(alice.words) > sum(alice.words == "") > #句読点とスペースが連続して並んだ場合, 区切った際にそこは無(空)となる > alice.words2 <- alice.words[alice.words != ""] > # 区切った結果空となる場合を除いて,新た な変数を作って再代入 > length(alice.words2) R で文字列処理
  15. 15. > sum (alice.words2 == "the") > #“the”の頻度を求める > alice.freq <- as.data.frame (table (alice.words2)) > #頻度表の作成 > alice.sorted <- alice.freq [ order (alice.freq$Freq, decreasing = TRUE), ] > # order() 関数で頻度の高い順に並び替え > nrow(alice.sorted) #行数が語彙(type)数 R で文字列処理
  16. 16. • つなげる・区切る・置換するが基本 • 処理手順・方法は1つに限らない • まだステミング・レマ化が必要 • SnowballC パッケージで対応可能 R で英語のデータを分析するには…
  17. 17. 実演: SnowballC package • 「語幹」を取り出す機能 • stemming と呼ばれる(cf. lemmatization) • go, went, gone, going なら… • -> go, went, gone, go (レマ化なら全部 go) • 辞書情報と照合し変換するような処理 • 実際はより高度な処理(ですがそこはお任せ)
  18. 18. > install.packages("SnowballC") #インスール > library(SnowballC) #読み込み > alice.sn <- wordStem(tolower(alice.words), language = "english") > #小文字に変換後,stemming を実行(し,結果を代入) > alice.sn.freq <- as.data.frame(table(alice.sn)) > # 横並びの表を縦並びに > alice.sn.sorted <- alice.sn.freq[order(alice.sn.freq $alice.sn),] > #alice.sn.freq 内のalice.sn 列で並び替え(アルファベット順) >head(alice.sn.sorted) 実演: SnowballC package
  19. 19. i) tm: Text Mining Package • http://tm.r-forge.r-project.org/ • http://cran.r-project.org/web/packages/tm/tm.pdf ii) corpora • http://www.stefan-evert.de/SIGIL/sigil_R/ • http://cran.r-project.org/web/packages/corpora/corpora.pdf iii)LanguageR • http://www.sfs.uni-tuebingen.de/~hbaayen/software.html • http://cran.r-project.org/web/packages/languageR/languageR.pdf 言語処理に特化した packages その他にも KoRpus package など言語処理用のもの多数
  20. 20. 参考文献
  21. 21. 参考文献(続)
  22. 22. 参考文献(続)
  23. 23. Enjoy ! twitter: @sakaue e-mail: tsakaue<AT>hiroshima-u.ac.jp

×