読者です 読者をやめる 読者になる 読者になる

KWIC形式で用例を表示する

corpus r

 言語研究においては、単語の頻度を数えるだけでなく、それらの単語がどのような文脈で用いられているかを精査することが重要です。そのような場合、コーパス言語学では、KWIC (KeyWord In Context) という形式で用例の一覧を表示することがあります。*1
 今回の分析データは、James JoyceDublinersとします。*2 まずは、Project Guterbergで公開されているデータを直接読み込みます。*3

# 分析データの読み込み
corpus <- scan("http://www.gutenberg.org/cache/epub/2814/pg2814.txt", what = "character", sep = "\n")

 次に、そのデータを単語のベクトルに変換し、スペースを取り除きます。

# テクストを単語のベクトルに変換
word.vector <- unlist(strsplit(corpus, "\\W"))
# スペースを削除
not.blank <- which(word.vector != "")
word.vector2 <- word.vector[not.blank]

 そして、(1) 何という単語を検索対象とするか、(2) 検索語の前後何語までを表示するか、を指定し、用例を抽出します。以下の例では、"dark"という単語を検索対象とし、前後5語を表示することとします。

# 検索語の生起位置を取得
word.positions <- which(word.vector2[] == "dark")
# 検索語の前後何語まで表示するかを指定
context <- 5
# KWICコンコーダンスの作成
for(i in 1:length(word.positions)){
   start <- word.positions[i] - context
   end <- word.positions[i] + context
   before <- word.vector2[start : (start + context - 1)]
   after <- word.vector2[(start + context + 1) : end]
   keyword <- word.vector2[start + context]
   cat("--------------------", i, "--------------------", "\n")
   cat(before, "[", keyword, "]", after, "\n")
}

 上記のスクリプトを実行すると、以下のような結果が表示されます。*4

-------------------- 1 -------------------- 
his unfinished sentences In the [ dark ] of my room I imagined 
-------------------- 2 -------------------- 
have gone into the little [ dark ] room behind the shop to 
-------------------- 3 -------------------- 
up by himself in the [ dark ] in his confession box wide 
-------------------- 4 -------------------- 
Protestants because Mahony who was [ dark ] complexioned wore the silver badge 
-------------------- 5 -------------------- 
play brought us through the [ dark ] muddy lanes behind the houses
 (以下省略)

 なお、日本語テキストで同様の分析をしたい場合は、日本語テキストにおける用例を表示するという記事をご覧ください。

*1:今回のスクリプトは、Jockers (2014) に基づいています。

*2:この短編集は1914年に出版されたため、今年がちょうど100周年となります。

*3:本来であれば、分析を始める前にテクストの本文以外の部分を削除する必要がありますが、ここでは省略します。

*4:ここでは、最初の5例のみを表示しています。