トップ 履歴 一覧 Farm ソース 検索 ヘルプ PDF RSS ログイン

R.sample

*disclaimer
614094

R

R.sample:簡単な処理のサンプル


 フォルダー内のデータの基本的な言語特徴を算出する

ファイル名CriterionスコアトピックtypetokenTTRGI平均単語長平均文長
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(276)

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:	
    • 最後のコロンの後ろにタブ記号が入っている。

  1. 上のスクリプトをRに読み込む
  2. 出力結果を適当なベクトルに保存する(例: 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)		# 全部のファイルの処理が終わ手から結果を返す
}

作業前の前提

  1. 処理対象のファイルを一つのフォルダーにまとめる
  2. 作業ディレクトリーをそのフォルダーに設定する

作業手順

  1. プログラムを実行し、結果をたとえば result という変数に保存して
  2. それをファイルに書き出す。(そのまま書き出すと作業ディレクトリーのフォルダー内に保存される)
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)
}