狠狠撸

狠狠撸Share a Scribd company logo
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

More Related Content

What's hot (20)

PDF
LET2012 ワークショップ「R による教育?言語テ?ータ処理のススメ」
SAKAUE, Tatsuya
?
PPTX
Tokyo r50 beginner_2
Takashi Minoda
?
PDF
HiroshimaR6_Introduction
SAKAUE, Tatsuya
?
PDF
WordNetで作ろう! 言語横断検索サービス
Shintaro Takemura
?
PPTX
Tokyo r30 beginner
Takashi Minoda
?
PDF
LOD技術の概要と LinkData.orgを用いたLOD公開
Kouji Kozaki
?
PDF
10分て?分かるr言語入門ver2.15 15 1010
Nobuaki Oshiro
?
PDF
JASELE2015-KumamotoWS
SAKAUE, Tatsuya
?
PDF
Sakuteki02 yokkuns
Yohei Sato
?
PPTX
情報の構造化@Linked Open Data連続講座(2014.6.2)
Ikki Ohmukai
?
PDF
1.研究者リゾルバーと闯础滨搁翱着者名検索、2.碍础碍贰狈データベースの机能拡张
National Institute of Informatics
?
PDF
10分て?分かるr言語入門ver2.14 15 0905
Nobuaki Oshiro
?
PDF
SPARQLから入門するLinked Open Data(LOD)ハンズオン 第1回
yamahige
?
PDF
搁顿贵/翱奥尝の概要及び翱厂厂実装、及び活用イメージについて
Masayuki Isobe
?
PDF
尝翱顿を始めるにあたって「最初に试すとよい」ツールの绍介
Kouji Kozaki
?
PDF
Oracle Cloud Developers Meetup@東京
tuchimur
?
PPTX
20161127 doradora09 japanr2016_lt
Nobuaki Oshiro
?
ODP
Strategy パターンと開放/閉鎖原則に見るデザインパターンの有用性
tomo_masakura
?
PDF
10分て?分かるr言語入門ver2 upload用
Nobuaki Oshiro
?
PDF
初心者のためのRとRStudio入門 vol.2
OWL.learn
?
LET2012 ワークショップ「R による教育?言語テ?ータ処理のススメ」
SAKAUE, Tatsuya
?
Tokyo r50 beginner_2
Takashi Minoda
?
HiroshimaR6_Introduction
SAKAUE, Tatsuya
?
WordNetで作ろう! 言語横断検索サービス
Shintaro Takemura
?
Tokyo r30 beginner
Takashi Minoda
?
LOD技術の概要と LinkData.orgを用いたLOD公開
Kouji Kozaki
?
10分て?分かるr言語入門ver2.15 15 1010
Nobuaki Oshiro
?
JASELE2015-KumamotoWS
SAKAUE, Tatsuya
?
Sakuteki02 yokkuns
Yohei Sato
?
情報の構造化@Linked Open Data連続講座(2014.6.2)
Ikki Ohmukai
?
1.研究者リゾルバーと闯础滨搁翱着者名検索、2.碍础碍贰狈データベースの机能拡张
National Institute of Informatics
?
10分て?分かるr言語入門ver2.14 15 0905
Nobuaki Oshiro
?
SPARQLから入門するLinked Open Data(LOD)ハンズオン 第1回
yamahige
?
搁顿贵/翱奥尝の概要及び翱厂厂実装、及び活用イメージについて
Masayuki Isobe
?
尝翱顿を始めるにあたって「最初に试すとよい」ツールの绍介
Kouji Kozaki
?
Oracle Cloud Developers Meetup@東京
tuchimur
?
20161127 doradora09 japanr2016_lt
Nobuaki Oshiro
?
Strategy パターンと開放/閉鎖原則に見るデザインパターンの有用性
tomo_masakura
?
10分て?分かるr言語入門ver2 upload用
Nobuaki Oshiro
?
初心者のためのRとRStudio入門 vol.2
OWL.learn
?

More from SAKAUE, Tatsuya (19)

PDF
HiRoshimaR6_ExplodingBoxplot
SAKAUE, Tatsuya
?
PDF
Hiroshimar3_rmecab
SAKAUE, Tatsuya
?
PDF
MethokenOkinawa_Sakaue_LearnerCorpus
SAKAUE, Tatsuya
?
PDF
ポッドキャスト利用による个别学习の支援とリスニング不安への影响
SAKAUE, Tatsuya
?
PDF
Nagoya.R #10 LT 「グラフはベクタ(ベクトル)画像で出力しようじゃありませんか」
SAKAUE, Tatsuya
?
PDF
ベクタ画像と PNG 画像の比較
SAKAUE, Tatsuya
?
PDF
反応时间データをどう分析し図示するか
SAKAUE, Tatsuya
?
PDF
?授业外て?个别学习を促进するためのホ?ット?キャスト利用
SAKAUE, Tatsuya
?
PDF
R のインストール手順(LET 2012用)
SAKAUE, Tatsuya
?
PDF
Osaka.R #7 LT: フォントのオハナシ
SAKAUE, Tatsuya
?
PDF
HiRoshima.R #2 LT by @sakaue
SAKAUE, Tatsuya
?
PDF
HiRoshima.R #2 入門者講習資料
SAKAUE, Tatsuya
?
PDF
Introduction to "R" for Language Researchers
SAKAUE, Tatsuya
?
PDF
How2Install "R"
SAKAUE, Tatsuya
?
PDF
Japan.R #2 Introduction to R
SAKAUE, Tatsuya
?
PDF
Nagoya.R #6 LT Beanplot
SAKAUE, Tatsuya
?
PDF
SAKAUE & KIDA (2011) @JASELE Yamagata
SAKAUE, Tatsuya
?
PDF
Methoken.R
SAKAUE, Tatsuya
?
PDF
Osaka.R #6 LT
SAKAUE, Tatsuya
?
HiRoshimaR6_ExplodingBoxplot
SAKAUE, Tatsuya
?
Hiroshimar3_rmecab
SAKAUE, Tatsuya
?
MethokenOkinawa_Sakaue_LearnerCorpus
SAKAUE, Tatsuya
?
ポッドキャスト利用による个别学习の支援とリスニング不安への影响
SAKAUE, Tatsuya
?
Nagoya.R #10 LT 「グラフはベクタ(ベクトル)画像で出力しようじゃありませんか」
SAKAUE, Tatsuya
?
ベクタ画像と PNG 画像の比較
SAKAUE, Tatsuya
?
反応时间データをどう分析し図示するか
SAKAUE, Tatsuya
?
?授业外て?个别学习を促进するためのホ?ット?キャスト利用
SAKAUE, Tatsuya
?
R のインストール手順(LET 2012用)
SAKAUE, Tatsuya
?
Osaka.R #7 LT: フォントのオハナシ
SAKAUE, Tatsuya
?
HiRoshima.R #2 LT by @sakaue
SAKAUE, Tatsuya
?
HiRoshima.R #2 入門者講習資料
SAKAUE, Tatsuya
?
Introduction to "R" for Language Researchers
SAKAUE, Tatsuya
?
How2Install "R"
SAKAUE, Tatsuya
?
Japan.R #2 Introduction to R
SAKAUE, Tatsuya
?
Nagoya.R #6 LT Beanplot
SAKAUE, Tatsuya
?
SAKAUE & KIDA (2011) @JASELE Yamagata
SAKAUE, Tatsuya
?
Methoken.R
SAKAUE, Tatsuya
?
Osaka.R #6 LT
SAKAUE, Tatsuya
?
Ad

统计解析环境搁による言语データの分析