*disclaimer
815795
R.sample:簡単な処理のサンプル
フォルダー内のデータの基本的な言語特徴を算出する
ファイル名 | Criterionスコア | トピック | type | token | TTR | GI | 平均単語長 | 平均文長 |
---|
JPN501.txt 4 sports 135 319 0.4231975 7.558549 4.304075 10.63333 JPN502.txt 4 education 161 356 0.4522472 8.532983 4.233146 12.27586 JPN503.txt 3 education 121 201 0.60199 8.534682 4.746269 15.46154 JPN504.txt 4 sports 140 260 0.5384615 8.682431 4.761538 9.62963 JPN505.txt 4 sports 175 420 0.4166667 8.539126 3.995238 16.8
- NICER分析用
- 作業ディレクトリーを分析対象のフォルダーに設定しておく
- 結果は、そのフォルダーの上のフォルダーに LingFeatures.txtとして保存される。
myLing7.R(332)
myLing7 <- function() { files <- list.files() for (i in files) { lines.tmp <- scan(i, what="char", sep="\n") #ファイルを選択。 data.tmp <- grep("\\*(JPN|NS)...:\t", lines.tmp, value=T) #*で始まる行のみ。 body.tmp <- gsub("\\*(JPN|NS)...:\t", "", data.tmp) #行頭の記号とタグを削除。 body.tmp <- body.tmp[body.tmp != ""] # 空の要素を削除する「イディオム」 body.lower <- tolower(body.tmp) body.token <- unlist(strsplit(body.lower, "\\W")) body.token <- body.token[body.token != ""] # 空の要素を削除する「イディオム」 type <- length(unique(body.token)) token <- length(body.token) TTR <- type/token GI <- type/sqrt(token) # ファイル名の取得は、i に入っている # トピックの取得 topic.line <- grep("^@Topic:\t", lines.tmp, value=T) topic <- gsub("^@Topic:\t", "", topic.line) # スコアの取得 criterion.line <- grep("^@Criterion:\t", lines.tmp, value=T) score <- gsub("^@Criterion:\t", "", criterion.line) # Average Word Length awl <- nchar(paste(body.token, collapse=""))/length(body.token) # Average Sentence Length asl <- length(body.token)/length(body.tmp) cat(i, score, topic, type, token, TTR, GI, awl, asl, "\n", file="../LingFeatures.txt", append=T) } }
特定の分析コードの内容の一覧を取得し、ファイルに保存する。
myGrepCode <- function(a){ lines.tmp <- scan(choose.files(), what="char", sep="\n") data.tmp <- grep(a, lines.tmp, value=T) body.tmp <- gsub(a, "", data.tmp) body.tmp <- body.tmp[body.tmp != ""] # 空の要素を削除(空でない要素のみを残す)する「イディオム」 }
- 次の分析コード欄を対象に、その内容を取り出す。
%sub:GF:
- 最後のコロンの後ろにタブ記号が入っている。
- 上のスクリプトをRに読み込む
- 出力結果を適当なベクトルに保存する(例: result)
> result <- myGrepCode("%sub:GF:\t") Read 125 items > result [1] "young people" "older people" "older people" [4] "youth" "young people" "a young person" [7] "a young person" "a younger person" "older people" [10] "young people" "young people" "the young couples" [13] "they" "this" "young people\t\t" [16] "they" "old people" "older people" [19] "older people" "this" "young people" [22] "young people" "older couples" "older couples" [25] "both younger and older people" "having a longer life" "older people" [28] "they" "they" "this" [31] "the key to enjoying life" "people" "older people"
- 結果の入ったベクトルresultをファイル(例: result.txt)に書き出す。
> write(result, "result.txt")
特定の分析コードの内容の一覧を取得し、ファイルに保存する。(フォルダー内のすべてのファイルを対象に)
myGrepCodeFolder <- function(a){ tmp <- vector() # ベクトルの変数(とりあえず名前はtmp)を作っておく files <- list.files() # 今いる作業ディレクトリー内のファイル一覧の取得 for (i in files) { # すべてのファイルを一つずつ処理していく lines.tmp <- scan(i, what="char", sep="\n") data.tmp <- grep(a, lines.tmp, value=T) body.tmp <- gsub(a, "", data.tmp) body.tmp <- body.tmp[body.tmp != ""] tmp <- c(tmp, body.tmp) #処理するたびにtmpに追加 } return(tmp) # 全部のファイルの処理が終わ手から結果を返す }
作業前の前提
- 処理対象のファイルを一つのフォルダーにまとめる
- 作業ディレクトリーをそのフォルダーに設定する
作業手順
- プログラムを実行し、結果をたとえば result という変数に保存して
- それをファイルに書き出す。(そのまま書き出すと作業ディレクトリーのフォルダー内に保存される)
result <- myGrepCodeFolder("\\*JPN...:\\t") write(result, "result.txt")
検索例
- データ本文
"\\*JPN...:\\t"
- 母語話者による書き換え文
"%NTV:\\t"
- 母語話者によるコメント
"%COM:\\t"
- 分析コード
"%COD:\\t"
特定の分析コードの内容の一覧を取得し、ファイルに保存する。(フォルダー内のすべてのファイルを対象に)★行頭記号をそのままにする場合
myGrepCodeFolder2 <- function(a){ tmp <- vector() # ベクトルの変数(とりあえず名前はtmp)を作っておく files <- list.files() # 今いる作業ディレクトリー内のファイル一覧の取得 for (i in files) { # すべてのファイルを一つずつ処理していく lines.tmp <- scan(i, what="char", sep="\n") data.tmp <- grep(a, lines.tmp, value=T) #body.tmp <- gsub(a, "", data.tmp) #行頭記号を削除しない data.tmp <- data.tmp[data.tmp != ""] tmp <- c(tmp, data.tmp) #処理するたびにtmpに追加 } return(tmp) # 全部のファイルの処理が終わ手から結果を返す }
データ本文と添削文の両方を抽出
- 正規表現 ( | )を使う。(丸カッコの中、縦棒の前後のいずれかという意味)
- 行頭記号が残っていれば、どのファイルのものかがわかる
myGrepCodeFolder2("(\\*JPN...:\\t|%NTV:\\t)")
- 結果を保存する場合、一つ上のディレクトリー(..)に保存すれば、データと結果が混ざらない
JandN <- myGrepCodeFolder2("(\\*JPN...:\\t|%NTV:\\t)") write(JandN, "../JandN.txt")
検索結果の行頭にファイル名を表示
myGrepCodeFolder5 <- function(a){ tmp <- vector() files <- list.files() for (i in files) { lines.tmp <- scan(i, what="char", sep="\n") data.tmp <- grep(a, lines.tmp, value=T) data.tmp <- data.tmp[data.tmp != ""] data.tmp <- paste(i, data.tmp, sep="") # add file name data.tmp <- data.tmp[data.tmp != i] tmp <- c(tmp, data.tmp) } return(tmp) }
https://sugiura-ken.org/wiki/