統計解析環境Rによる言語データの分析
Upcoming SlideShare
Loading in...5
×
 

統計解析環境Rによる言語データの分析

on

  • 1,847 views

英語コーパス学会第39回大会ワークショップ2日目の資料

英語コーパス学会第39回大会ワークショップ2日目の資料

Statistics

Views

Total Views
1,847
Views on SlideShare
1,768
Embed Views
79

Actions

Likes
4
Downloads
9
Comments
0

1 Embed 79

https://twitter.com 79

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

統計解析環境Rによる言語データの分析 統計解析環境Rによる言語データの分析 Presentation Transcript

  • 2013-10-06 JAECS2013@Tohoku Univ. 統計解析環境 による言語データの分析 1Sunday, October 6, 13
  • 大規模コーパスを 効率よく処理せねば 言語処理技術習得の必要性 5Sunday, October 6, 13
  • 検索と処理 の原理に迫る を使う意義言語データ処理で 6Sunday, October 6, 13
  • 検索ソフトの中で 何が起こっているのか を使う意義言語データ処理で 7Sunday, October 6, 13
  • 検索過程の ブラックボックス化 を避けたい を使う意義言語データ処理で 8Sunday, October 6, 13
  • どんな過程を経て 検索・処理結果が 出るのかを学ぶ を使う意義言語データ処理で 9Sunday, October 6, 13
  • Agenda 1. R で文字列処理 2. 言語データ処理の流れ 3. R による and と but の検索 4. パッケージ利用によるデータ処理 5. おわりに 10Sunday, October 6, 13
  • Agenda 1. R で文字列処理 2. 言語データ処理の流れ 3. R による and と but の検索 4. パッケージ利用によるデータ処理 5. おわりに 11Sunday, October 6, 13
  • 1. R で文字列処理 つなげて数える (頻度表作成) 12Sunday, October 6, 13
  • pp.87-100 を真似てみる 13Sunday, October 6, 13
  • 1. R で文字列処理 > sample <-“DONE IS BETTER THAN PERFECT” > length(sample) #要素数 > nchar(sample) #文字数(空白類含む) > x <- c(“ABC”,“efg”) #2つの文字列 > length(x) #要素数 > nchar(x) #文字数(各要素に対して) 14Sunday, October 6, 13
  • 1. R で文字列処理 > tolower(sample) #大文字を小文字に変換 > toupper(x) #小文字を大文字に変換 > toupper(tolower(sample)) #連続処理1 > tolower(toupper(tolower(sample))) #連続処理2 > #丸括弧の数に注意 15Sunday, October 6, 13
  • 1. R で文字列処理 > 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 16Sunday, October 6, 13
  • 1. R で文字列処理 > 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 17Sunday, October 6, 13
  • もう少し規模を広げて... 18Sunday, October 6, 13
  • 1. R で文字列処理 > 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) #念のため確認 19Sunday, October 6, 13
  • 1. R で文字列処理 > alice.words <- unlist (strsplit (alice2, split = ”[[:space:]]+|[[:punct:]]+”)) > #空白類・ピリオド・カンマなどが1つ以上続 く部分を区切りとして文字列を切り出し > length(alice.words) > #句読点を省いた単語数を抽出 20Sunday, October 6, 13
  • 1. R で文字列処理 > head(alice.words) > sum(alice.words ==“”) > #句読点とスペースが連続して並んだ場合, 区切った際にそこは無(空)となる > alice.words2 <- alice.words[alice.words !=“”] > # 区切った結果空となる場合を除いて,新た な変数を作って再代入 > length(alice.words2) 21Sunday, October 6, 13
  • 1. R で文字列処理 > 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)数 22Sunday, October 6, 13
  • 1. R で文字列処理 • つなげる・区切る・置換するが基本 • 処理手順・方法は1つに限らない • まだレマ化が必要 • Snowballパッケージで対応可能 23Sunday, October 6, 13
  • Agenda 1. R で文字列処理 2. 言語データ処理の流れ 3. R による and と but の検索 4. パッケージ利用によるデータ処理 5. おわりに 24Sunday, October 6, 13
  • Agenda 1. R で文字列処理 2. 言語データ処理の流れ 3. R による and と but の検索 4. パッケージ利用によるデータ処理 5. おわりに 25Sunday, October 6, 13
  • 検索過程の ブラックボックス化 を避けたい を使う意義言語データ処理で 26Sunday, October 6, 13
  • 2. 言語データ処理の流れ 1) データを読み込む 2) データを分解する 3) データを える 4) 数値を求める 5) データを保存する 27Sunday, October 6, 13
  • 1) データを読み込む > nns <- scan("nns_raw.txt", what="character") Read 62959 items 28Sunday, October 6, 13
  • 2) データを分解する > nns_list <- strsplit(nns, " ") # スペースでデータをリスト化 # 干し柿状態(?) > nns_unlist <- unlist(nns_list) # リストされたデータをバラバラに分解 29Sunday, October 6, 13
  • 3) データを える > sort_nns <- sort(nns_unlist) # データの並び替え > uniq_nns <- unique(sort_nns) # 並び替えたデータをまとめる 30Sunday, October 6, 13
  • 4) 数値を求める > length(nns_unlist) [1] 70220 # Token > nns_all <- table(nns_unlist) # 単語一覧表の作成 > nns_type <- length(uniq_nns) > nns_type [1] 7579 # Type 31Sunday, October 6, 13
  • 5) データを保存する > write.table(nns_all, file="freq.txt", sep="t") # freq.txt という名で列をタブ区切りにして保存 32Sunday, October 6, 13
  • • どんな言語・ソフトでも裏でこうした 処理(特に 1)∼3))をしている • その過程で<穴>がないか用心したい • やはりレマ化はしていないので注意 2. 言語データ処理の流れ 33Sunday, October 6, 13
  • Agenda 1. R で文字列処理 2. 言語データ処理の流れ 3. R による and と but の検索 4. パッケージ利用によるデータ処理 5. おわりに 34Sunday, October 6, 13
  • Agenda 1. R で文字列処理 2. 言語データ処理の流れ 3. R による and と but の検索 4. パッケージ利用によるデータ処理 5. おわりに 35Sunday, October 6, 13
  • 実習 36Sunday, October 6, 13
  • R による and と but の検索 (これは嘘グラフです) 37Sunday, October 6, 13
  • R による and と but の検索 • And/and, But/but の検索結果を棒グラフで可視化 • nns_raw.txt を加工し単語に切り分ける • 切り分けたものから検索をかける(正規表現) • 処理に使う関数(データ読み込みもお忘れなく) • strsplit(), unlist(), grep(), length(), barplot() • 変数の中身を随時確認する • R は一度初期化して(保存せず)取り組みましょう 38Sunday, October 6, 13
  • 答え(あくまで一例です) 39Sunday, October 6, 13
  • > grep("^And,?", nns_unlist, fixed = FALSE, value=TRUE) > grep("^But,?", nns_unlist, fixed = FALSE, value=TRUE) # ヒットした要素を表示 # 正規表現の ^ をつけておき,3文字を含む文字列(underst”and”)を除外 # fixed=FALSE で拡張正規表現を利用,value=TRUE で要素表示 > length(grep("^And,?", nns_unlist, fixed = FALSE, value=TRUE)) > length(grep("^But,?", nns_unlist, fixed = FALSE, value=TRUE)) # ヒット数だけを表示 R による and と but の検索 40Sunday, October 6, 13
  • > length(grep("^And,?", nns_unlist, fixed = FALSE, value=TRUE)) [1] 175 > length(grep("^But,?", nns_unlist, fixed = FALSE, value=TRUE)) [1] 178 > length(grep("^and,?", nns_unlist, fixed = FALSE, value=TRUE)) [1] 1479 > length(grep("^but,?", nns_unlist, fixed = FALSE, value=TRUE)) [1] 260 R による and と but の検索 41Sunday, October 6, 13
  • > freq <- c(175, 1479, 178, 260) > barplot(freq, names=c("And", "and", "But", "but"), horiz=T, las=1) R による and と but の検索 42Sunday, October 6, 13
  • • R で基本的な検索・分析ならば... 1) データを strsplit() + unlist() して 2) grep() と length() でカウント 3) barplot() などで視覚化 4) chisq.test() などで検定 R による and と but の検索 43Sunday, October 6, 13
  • Agenda 1. R で文字列処理 2. 言語データ処理の流れ 3. R による and と but の検索 4. パッケージ利用によるデータ処理 5. おわりに 44Sunday, October 6, 13
  • Agenda 1. R で文字列処理 2. 言語データ処理の流れ 3. R による and と but の検索 4. パッケージ利用によるデータ処理 5. おわりに 45Sunday, October 6, 13
  • Packageとは? • ある処理・機能に特化したプログラム • base(基本パッケージ)だけでも 1,000 以上 • 特殊な処理を行う際は,別の package を追加 • 言語処理に特化したものもある(ex. RMeCab) 46Sunday, October 6, 13
  • 実演: Snowball package • 活用形を原形をまとめる機能 • stemming と呼ばれる(cf. lemmatization) • 辞書情報と照合し変換するような処理 • 実際はより高度な処理(ですがそこはお任せ) 47Sunday, October 6, 13
  • > install.packages(“Snowball”) #インスール > library(Snowball) #読み込み > alice.sn <- SnowballStemmer(tolower(alice.words)) > #小文字に変換後,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) 実演: Snowball package 48Sunday, October 6, 13
  • 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.ualberta.ca/~baayen/software.html • http://cran.r-project.org/web/packages/languageR/languageR.pdf 言語処理に特化した packages 49Sunday, October 6, 13
  • 日本語データの分析を 助けてくれる RMeCab を紹介 50Sunday, October 6, 13
  • RMeCabとは • 石田 基広氏が開発したパッケージ • R から MeCab を呼び出して日本語 のテキストを解析させる • 解析結果をも R で出力してくれる 素晴らしいプログラム 51Sunday, October 6, 13
  • デモ一覧 •RMeCabText() : ファイル解析 •RMeCabFreq() : 頻度集計 •Ngram() : N-gram 解析 •collocate() : 共起関係の分析 52Sunday, October 6, 13
  • Agenda 1. R で文字列処理 2. 言語データ処理の流れ 3. R による and と but の検索 4. パッケージ利用によるデータ処理 5. おわりに 53Sunday, October 6, 13
  • Agenda 1. R で文字列処理 2. 言語データ処理の流れ 3. R による and と but の検索 4. パッケージ利用によるデータ処理 5. おわりに 54Sunday, October 6, 13
  • テキストそのものの確認し (ソフトの仕様を知り) 検索過程を明らかにすることは 研究上重要 55Sunday, October 6, 13
  • そのためにも 言語データ処理技術を 継続して学びましょう 56Sunday, October 6, 13
  • のススメ 57Sunday, October 6, 13
  • • すべての処理・分析が R のみで完結 • <-> Concordancer + Editor + Excel (+ UNIX) + R • プログラミングの基礎養成に有効 • --> Python, Perl, ... どこでも使える • 作図が美しい(+Mac ならフォントも) • Excel の作図はオモチャ のススメ 58Sunday, October 6, 13
  • 参考文献 61Sunday, October 6, 13
  • 参考文献(続) 63Sunday, October 6, 13
  • 参考文献(続) 64Sunday, October 6, 13
  • Enjoy ! twitter: @sakaue e-mail: tsakaue<AT>hiroshima-u.ac.jp 65Sunday, October 6, 13