soy-curd's blog

The blog is written about maebashi or sake or beer or program. [https://twitter.com/soycurd1]

動物を用いた小説の面白さの評価

はじめに

 ある小説が存在するとき、我々はその文章の中のどんな要素によって、その小説を「面白い」と評価するのだろうか?
 例えばここで、以下のような文があったとする。

私は家を出た。外は晴れていた。公園に向かって歩いていくと、犬が猫を連れて散歩していた。

 この文章の中で最も面白い文は、明らかに『公園に向かって歩いていくと、犬が猫を連れて散歩していた。』である。無論この原因は、この文がひとつ以上の動物を含んでいることによる。これは日本語による創作に限らず、世界的に著名な作家が採用している原理である(Cormac McCarthy、García Márquez、Kimuchi Yokoyama等は明らかにこの原理を意識して創作している)。そこで本解析では、文章中に動物が出てきた数をカウントすることにより、小説の面白さを動的に評価していくこととする。

面白さの評価における動物窓の利用

 ここで注意しなくてはいけないのは、『我々が小説を面白いと感じる文章上の単位はなんなのか?』という点である。この問題については脳科学上、ほとんど知見が得られていない。我々は小説を読んで、「この小説が面白い」「この文はセンスが光っている」「この単語の選び方は抜群だ」等と評価することがあるが、その評価機構は知られていないのだ。
 本解析においては便宜的に、固定幅の単位となる動物窓(animal window)を用いることにより、以上の問題を回避することとする。
 幅10の動物窓を仮定した場合、

[私は家を出た。外は晴]れていた。公園に向かって歩いていくと、犬が猫を連れて散歩していた。

から、

私は家を出た。外は晴れていた。公園に向かって歩いていくと、犬が猫を[連れて散歩していた。]

まで、動物窓を連続的に移動させることができる。こうして移動させている間の最大の動物価(animal value)は2となる(例えば、[<犬>が<猫>を連れて散歩し])。以下ではこの技法を用いて実際に文章の動物価を計算していく。

pythonを用いた動物価の計算

 本解析ではpython3を用いて動物価の計算を行っていく。
 まず初めに、以下のように変数を初期化する。

string = "私は家を出た。外は晴れていた。公園に向かって歩いていくと、犬が猫を連れて散歩していた。"
aw = 10    #animal window

次に、以下のように関数を定義しておく。

def evalAnimalValue(string, window):

  #add buf to string --------(1)
  st = (window - 1) * "." + string + (window - 1) * "."

  #make animal list --------(2)
  animalList = [st[i:i+window] for i in range(len(st))]

  #evaluate animal value --------(3)
  animalValue = [countAnimal(x) for x in animalList]

  return animalValue

def countAnimal(string):

  #define animal set
  animal = {"犬", "猫", "鼠"}
  av = 0    #animal value
  for v in [string.count(x) for x in animal]:
    av += v

  return av

def printList(list):

  for x in list:
    print("*" + "***" * x )

 順番に見ていこう。
 まず、evalAnimalValue()関数の(1)では、文章を操作しやすいように整形している。この例では"*"という文字を付加している。この文字は、動物でさえなければどんな文字でも良い。(2)では、動物窓を一文字ずつ動かし、そのリストを入手している。そして最後に(3)ではcountAnimal()関数を用いて動物窓の中の動物の数をカウントしている。丁度、ポケモンスタジアムミニゲームで画面に映っているポケモンの数をカウントしているかんじだ。

 最後に、この関数を実行してみよう。

  avl = evalAnimalValue(string, window)
  printList(avl)

 以下のような出力が得られたろうか?

*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
****
****
*******
*******
*******
*******
*******
*******
*******
*******
****
****
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*

 これが私たちの得た動物の流れ、つまりは、小説の面白さの時間発展である。