昔話の計量テキスト分析――異類婚姻譚
◆はじめに
以下はKH Coder(無償版:version 3.Beta.08e)を用いた昔話の計量テキスト分析である。昔話の類話の比較にツールを利用できないか試行してみた。
手持ちの資料が限られるため、分析の対象となる元データの文字数が少ないものの(※本来であれば5000字以上は欲しい)、分析自体は正常に処理されていると判断した。
KH Coderの操作に慣れる目的も兼ねて行った作業で、コーディングルールの記述の事例集、あるいは速習用のチュートリアルとしてでも読んで頂ければ……といったところである。
なお、KH Coderでよく用いられるのは共起ネットワークと対応分析とのことで、それ以外はおまけパートと思って頂いて構わない。操作に習熟するにはコーディングルールの記述に慣れるのが第一である。
◆ファイル
各ファイルをダウンロードしてKH Coderに読み込ませれば同様の分析が再現可能である。
ダウンロード - ca_011_iruikonintan.xlsx
ダウンロード - ca_011_codingrules.txt
ダウンロード - kh_coder_startingedition_sagyotejunsho.txt (※作業手順書)
※「H5」とはHTMLでいうところのヘッダー(見出し)・レベル5で本文に相当すると考えればよい。
※[コーディング単位]は「文/段落/H5」から選べるが、状況に応じて適切と思われるものを選択する必要がある。処理が上手くいかないと感じた場合、コーディング単位を切り替えると上手く処理されるケースがままある。
※公式マニュアルでは「集計単位」という用語が使われている。共起関係について、
・「文」では一文単位での分析
・「段落」では段落単位の分析
・「H5」では表計算ソフトのセル単位とされ、改行を含めた一セルの中身全体が分析単位となる
※レファレンスでも索引で「コーディング単位」の項目は設けられていない。操作性に関わる重要項目であるものの、その仕様について不明瞭な感はある。
※当ブログの場合、表計算ソフトのフォーマットで読み込ませているからH5固定でいいだろうと思い込んでいたら、さにあらずだった。
◆あらすじ
・「しの田の森の白狐」(未来社『石見の民話』)
昔、炭焼きがいた。女房もおらず貧乏をしていた。ある日いつものように炭焼きをしていると、やせた狐がやってきたので炭焼きはむすび飯の残りを与えた。それから四五日経って、美しい女房がやってきて嫁にして欲しいと頼んだ。炭焼きは貧乏だからと断ったが、女房が頼み込んだので嫁にした。女房はよく働き反物も織ったので暮らしも楽になり男児が生まれた。男児が三歳になったある日、母親が昼寝をしているのを見ると、着物の裾から尻尾が覗いていた。母親は誤魔化した。びっくりした男児は父親にそのことを話した。母親は書き置きを残して逃げた。父親は書き置きを読んでびっくりして子供を連れてしの田の森へいった。書き置きにあった歌の返歌を読む。すると母狐の親の婆さんが出てきた。婆さん狐は人間の孫はお前一人だけだと懐かしがる。爺さん狐も母狐も出てきた。孫に何かやりたいと婆さん狐が言ったので母狐が知恵と言えと子供に教えた。それで爺さん狐は耳とくをくれた。耳にかけると鳥や獣の言葉が分かる、三里先のことでも聞こえる便利なものだった。子供はその耳とくを得たので世の中のことが何でも分かる様になると評判となった。ある時天子が病気になったとき、この子供を召して病気を治させた。子供は大層なご褒美を得た。
・「一本草」(未来社『石見の民話』)
夫婦の狐がいた。ところが雄狐が猟師にとられてしまった。これを悲しんだ雌狐は何とかして夫の仇をとろうと思って、女に化けて猟師のところへ訪ねていった。そして妻にして欲しいと頼んだ。猟師は独り者だったから妻にした。そのうちに子供ができた。子供はすくすくと大きくなった。ある日いつものように男は猟に出た。そして夕方になって帰って家へあがると何か大きな尻尾のようなものを踏んだ。すると女房がキャッといって急いで尻尾を隠した。男はびっくりしてお前は獣だろうと言った。女房は自分は男に殺された狐の妻である。何とかして夫の仇を討ちたいと思って人間に化けて男の妻にしてもらった。そして隙を狙って殺そうと思ううちに可愛い子供が生まれて、それもできず今日までこうして暮らしていた。しかしこうなってが仕方がない。男を騙したことはお詫びする。子供はどうか立派に育てて欲しい。きっと恩返しすると言ってコンコンと啼いて逃げていった。そのうち田植え時期になった。妻がいなくなった男は小さい子供を連れて一人で田植えをしなければならない。代をかいて苗を配って昼飯を食べて来て見ると、田にはいつの間にかきれいに苗が植えてあった。次の日もその次の日も同じことが続いた。不思議に思って誰が植えてくれるのか見ようと思って、山へ登って弁当を食べながら見ていると狐がたくさん出てきて箒柴をかついでまたたく間に植えてしまった。女房になった狐が仲間をつれて来て植えてくれるのかと男は喜んだ。秋になると余所の稲は皆穂が出たがこの男の稲には穂が出ない。そこで地頭がお前の田は穂が出ないから年貢はいらぬと言った。男はその稲を刈ってこいでみると穂がないのに籾がどんどん出て大変な収穫であった。それが一本草という稲で、一本草の稲の穂は袴より上には出ないのだそうだ。
・「蛤姫」(未来社『石見の民話』)
昔、一人の若い漁夫がいた。毎日海へ出て魚を獲って、それを町で売って生計を立てていた。ある日、いつもの様に舟で漁をしたが、一尾もかからなかった。もう一度釣ってかからなかったら今日はやめようと思って最後の糸を投げ込んだ。しばらくすると手応えがある。やっとのことで引き上げてみると、見たこともない様な珍しい蛤だった。びっくりして見とれていると、蛤が二つに割れて中からきれいな女の子が出てきた。漁夫は喜んで家へ連れて帰り、蛤姫と名をつけて大切に育てた。姫は大きくなるにつれてますます美しくなった。そして姫は機を織ることが大変上手で、その織物は何ともいえぬ美しさだった。漁夫はそれからは漁をやめ、姫の織った反物を町に売りに出て、たくさんの金を儲け、楽しく暮らした。姫は美しい反物を織るばかりでなく、機を織る音がまるで美しい音楽のようだった。それを聞いた人たちが姫の機を織る様子を見ようと漁夫の家に押しかけてきたが、姫はなぜか一室に閉じこもって、戸を固く閉め、機を織る姿を誰にも見せなかった。ある日、漁夫はいつも通り、反物をもって町へ出かけた。ある一軒の大きな家で呼び止められ、たくさんの金で買い取られた。よい物を買った。お礼にと座敷に上げ、ご馳走やお酒でもてなした。漁夫はよい気分で酔い潰れてしまった。家では蛤姫が今日も一人、一室で美しい音をたてながら、とんとんからりと機を織っていた。すると近所の人たちがやって来て、今日は漁夫が帰っていないから、戸を開けてみようではないかと相談して、部屋へそっと近寄るといきなり戸をあけてのぞき込んだ。蛤姫はびっくりして機を織る姿を見られたら、もうここにいることはできない。蛤の中へ帰ると言って消えてしまった。
・「蛙の恩返し」(未来社『石見の民話』)
昔、あるところに男がいた。ある日道を歩いていると、蛇が蛙をくわえて呑もうとしていた。男はそれを見ると蛙がかわいそうになって、まあ悪いことをする。その蛙を放してやれ。自分の女房にしてやるからと言った。すると蛇はくわえていた蛙を放してするすると草の中へ入ってしまった。自分の言うことを聞いたものだと男は思った。それと共にえらいことを言ったものだと後悔したが、もうどうすることもできない。どうしたものか思案していた。しばらくして、きれいな女が男のところを訪ねてきた。この間約束したが、蛙を許してやったから、あなたの女房にしてくださいと女は言った。それはまあ、ああして約束したのだから、しないとは言えない。困ったことだと思ったが、約束したので女房にした。ところが男は自分の女房は蛇だ。困ったものだのうと思えば思うほど気持ちが悪くてたまらない。とうとう気病みになって床についてしまった。ある日この家へ一人の男がやって来て、ここには病人がいるということだが悪いことだと言った。それで事情を話したところ、ああ、あなたの病気にはいい薬があるがと言った。何だろうか。それは、これの背戸の大きな松の枝へ鷹が巣をかけている。その卵をとって飲んだら、たちまち良くなると男は言った。それを聞くと、男はいいことを聞いたと思って、鷹の卵をとるというのは容易なことじゃあないがと思って、女房にその話をした。すると女房は、それなら自分がとってあげる。自分なら木へ昇るのは上手だから、必ずとってあげると言った。男は喜んで、それなら取ってきてくれと言って頼んだ。女房は背戸の松の木へ行ってみた。大きな松の木のずっと上に鷹の巣がある。とても高くて女の姿では昇ることはできない。女房は元の蛇になってするすると昇っていった。ところが、巣のところへ行って卵を取ろうとするのを鷹が見つけた。雀のような小さな鳥ならどうすることもできないが、鷹のことである。二羽の鷹は鋭いくちばしと爪で飛びかかって蛇を殺してしまった。これを見たよそから来た男はくっくと笑って草の中へ姿を隠した。それは男が助けてやった蛙であった。
◆コーディングルール
※コーディングルールのキーワードは重要と判断したものを人力でピックアップしている。そのため、恣意性を伴う分析となる。
※活用形でなく基本形で入力する。
※[前処理]→[語の抽出結果を確認]でキーワードがどのように分節されているか検索すると結果の一覧[語の抽出結果]が表示される。
※[Result]から確認したい行をクリックして選択、画面下の[詳細表示]ボタンをクリックするとサブ画面が表示され、活用形や基本形が確認できる。
※昔話では「否定/肯定」「肯定/否定」と属性が変化することが多いと考え、否定詞「ない」「まい」「ぬ」「ん」、また禁止を意味する「な」を共通のコードとして設定している。
※「できる」「やる」「られる」「せる」といった動詞も共通のコードとして追加してみた。
※[関連語検索]で否定詞の共起語の一覧を表示させたところ、日本の昔話のように掌編レベルのボリュームだと、物語の動因となる箇所に関する語句が上位に表示される傾向が強いのではないか……といった印象があり、検証作業中である。
※無償版では強制抽出語の指定が機能制限で事実上使用できないため以下のような手法をとっている。
*女房
女房 or 女
*むすび飯
'むすび飯'
*嫁
嫁 or 妻
*母親
母親 or '母狐'
*しの田
'しの田'
*耳とく
'耳とく'
*雄狐
'雄狐' or 夫
*雌狐
'雌狐'
*一本草
'一本草'
*蛤姫
'蛤姫'
*あける
あける or 開ける
*病気
病気 or 病
*ない
ない
*ぬ
ぬ
*ん
ん
*るな
'るな'
*るまい
'るまい'
*できる
できる
*やる
やる
*られる
られる
*せる
せる
*炭焼き
炭焼き
*おる
おる
*貧乏
貧乏
*狐
狐
*男児
男児
*尻尾
尻尾
*父親
父親
*森
森
*逃げる
逃げる
*返歌
返歌
*婆さん
婆さん
*孫
孫
*人間
人間
*分かる
分かる
*天子
天子
*治す
治す
*褒美
褒美
*夫婦
夫婦
*猟師
猟師
*仇
仇
*化ける
化ける
*子供
子供
*恩返し
恩返し
*田植え
田植え
*植える
植える
*稲
稲
*穂
穂
*年貢
年貢
*いる
いる
*籾
籾
*収穫
収穫
*漁夫
漁夫
*魚
魚
*蛤
蛤
*女の子
女の子
*機
機
*織る
織る
*見せる
見せる
*反物
反物
*金
金
*酔い潰れる
酔い潰れる
*戸
戸
*消える
消える
*蛇
蛇
*蛙
蛙
*呑む
呑む
*放す
放す
*後悔
後悔
*約束
約束
*男
男
*薬
薬
*卵
卵
*鷹
鷹
*松
松
*巣
巣
*殺す
殺す
*助ける
助ける
◆共起ネットワーク
・[ツール]→[コーディング]→[共起ネットワーク]でオプション画面が表示される。
・[コーディング単位]を[H5]に設定する。
※[描画する共起関係(edge)の選択]で「係数」を「0.2」から「0.3」に修正する。
※[強い共起関係ほど濃い線に]にチェックを入れる。
Jaccard係数が0.3以上はかなり強い共起関係にあることを示しているが、分析対象となる元データの文字数が少ないため係数が高めに出てしまう傾向にあるため、こうしている。
※Jaccard係数は共起関係(※ある言葉に続いて出てくる関係)の強さを表し 0≦係数≦1 の範囲の値をとる。
【Jaccard係数】
・0.1 →関連あり
・0.2 →強い関連あり
・0.3以上 →とても強い関連あり
※ただし、あくまで目安であって絶対ではない。
ざっと確認したところ、共通するキーワードが中央のサブグラフ(バブルが島状に集まった一塊)に表示され、類話毎に異なるキーワードが上下のサブグラフに表示される形となっている。
※なお、各バブル間の距離や配置に意味はない。
◆対応分析
・[ツール]→[コーディング]→[対応分析]でオプション画面が表示される。
・[コーディング単位]を[H5]に設定する。
※[外部変数]は[タイトル]のまま続行。
※[差異が顕著なコードを分析に使用]で上位「30」とした。また[バブルプロット]にチェックを入れている。これらは文字の重なりを極力避けるためである。
※文字が重なって読みづらい場合、オプション画面の[コード選択]で不要なコードのチェックを外してもよい。
x、y軸上の原点(0.0)から点線が伸び交差した箇所が原点となる。原点から離れるほど特徴的なキーワードだと分析される。
原点付近には「女房」といったキーワードがプロットされている。離れた位置にプロットされているのは「しの田の森の白狐」では「炭焼き」「耳とく」「治す」、「一本草」では「雌狐」「一本草」「猟師」、「蛤姫」では「蛤姫」「あける」、「蛙の恩返し」では「ぬ」といった辺りである。
◆解釈
異類婚姻譚の多くは動物の嫁入りと別離とが描かれているが、「蛙の恩返し」では蛙を助けるという約束で蛇を嫁にしたため病んでしまうといった展開となっている。蛙の復讐譚とも解釈できる。
◆階層的クラスター分析
・[ツール]→[コーディング]→[階層的クラスター分析]でオプション画面が表示される。
・[コーディング単位]を[文]に変更、実行するとデンドログラム(樹状図)で可視化される。
※キーワード指定しても可。
概ねストーリー展開に沿った形でクラスター化されている。
◆クロス集計
・[コーディング単位]を[文]に変更、[タイトル]で[集計]する。
クロス集計をかけたところ、「女房」「嫁」「母親」といったキーワードでカイ(χ)2乗値で相関関係を示す結果(※マーク)が得られた。
マップとして描画したところ、「母親」「しの田」「機」「織る」といったキーワードの残差が大きく(濃く)表示される結果となった。バブルとしては「女房」「母親」「ない」「狐」「漁夫」「男」が大きく描画された。
◆KWICコンコーダンス
現状ではテキストマイニングのツールに文脈を読む性能はないため実際に該当箇所を読んで人力で判断する他ない。KWICコンコーダンスでキーワード指定すれば指定したキーワードがどのような文脈で用いられているか一覧で抽出される。
◆関連語検索
・[集計単位]を[文]に変更、[集計]する。
・[Search Entry:]の一覧からキーワードを選択してダブルクリックすると[Result]に指定したキーワードの品詞や共起関係が表示される。
※[Result:]から行指定してダブルクリックするとKWICコンコーダンスに遷移する。
※[Result:]の一覧から範囲指定して[コピー]したものを表計算ソフトやテキストファイルにペーストすることも可能である。
[#直接入力]を指定して「書き置き」といったキーワードで検索すると関連語が一覧で表示される。
◆属性の転倒
・「ない」の結果上位一覧
| N | 抽出語 | 品詞 | 全体 | 共起 | Jaccard |
| 1 | 穂 | 名詞C | 4 (0.038) | 4 (0.222) | 0.2222 |
| 2 | 稲 | 名詞C | 3 (0.029) | 3 (0.167) | 0.1667 |
| 3 | 出る | 動詞 | 11 (0.105) | 4 (0.222) | 0.16 |
| 4 | 姿 | 名詞C | 4 (0.038) | 3 (0.167) | 0.1579 |
| 5 | 機 | 名詞C | 5 (0.048) | 3 (0.167) | 0.15 |
| 6 | 織る | 動詞 | 7 (0.067) | 3 (0.167) | 0.1364 |
| 7 | 見る | 動詞 | 8 (0.076) | 3 (0.167) | 0.1304 |
| 8 | 男 | 名詞C | 20 (0.190) | 4 (0.222) | 0.1176 |
| 9 | 戸 | 名詞C | 2 (0.019) | 2 (0.111) | 0.1111 |
| 10 | 人 | 名詞C | 2 (0.019) | 2 (0.111) | 0.1111 |
・「ぬ」の結果上位一覧
| N | 抽出語 | 品詞 | 全体 | 共起 | Jaccard |
| 1 | 何とも | 副詞 | 1 (0.010) | 1 (0.250) | 0.25 |
| 2 | 可愛い | 形容詞 | 1 (0.010) | 1 (0.250) | 0.25 |
| 3 | 隙 | 名詞C | 1 (0.010) | 1 (0.250) | 0.25 |
| 4 | 織物 | 名詞 | 1 (0.010) | 1 (0.250) | 0.25 |
| 5 | 狙う | 動詞 | 1 (0.010) | 1 (0.250) | 0.25 |
| 6 | 地頭 | 名詞 | 1 (0.010) | 1 (0.250) | 0.25 |
| 7 | 年貢 | 名詞 | 1 (0.010) | 1 (0.250) | 0.25 |
| 8 | 上手 | 形容動詞 | 2 (0.019) | 1 (0.250) | 0.2 |
| 9 | 生まれる | 動詞 | 2 (0.019) | 1 (0.250) | 0.2 |
| 10 | 大変 | 形容動詞 | 2 (0.019) | 1 (0.250) | 0.2 |
動物が嫁入りしたものの別離してしまう……といった粗筋となっている。
短いお話の中で属性の転倒を多用するのが昔話の特徴の一つと考えられる。
ここで「/」(スラッシュ)を「転倒」を意味する記号として用いる。スラッシュは様々な場面で用いられていて文脈依存的な記号という欠点もあるが、視覚的にはイメージしやすいと判断した。
・[雌狐|むすび飯:飢え/嫁入り]
・[雌狐|子供:復讐心/情]
・[一本草|穂:出ない/豊作]
・[蛤姫|姿:見られる/消える]
・[蛇|卵:採る/殺される]
こういった風にお話を転がしていると分析できる。蛇は夫の病を治すため「女房/蛇」と転倒、元の姿に戻って鷹の卵を採ろうとするが攻撃され「生/死」と転倒する。
※なお、図式化には分析対象のテキストに含まれない語句も用いているので要注意。
※関連語検索、強制抽出語を設定しないと狙い通りに処理されないケースが見られる。
◆類似度行列
・[コーディング単位]を[文]に変更して[集計]。Jaccard係数がマトリクス形式で確認できる。
・ある列を選択して画面右下の[コピー(選択列)]をクリックすると、当該のキーワードに関するJaccard係数がコピーされるので、それを表計算ソフトにペーストするといった利用が可能となる。
※当ブログでは[コーディング単位]が[段落][H5]の場合、Jacccard係数が1.0~0.5といった結果がほとんどで、意味のない結果となった。
◆多次元尺度構成法
・[ツール]→[コーディング]→[多次元尺度構成法]でオプション画面が表示される。
・[コーディング単位]を[H5]から[文]に変更して実行。
・共起関係を確認したいキーワードを指定。
・次元を「2」から「3」に変更して実行、三次元のマップとした。
動物が嫁入りするくだりに関するキーワードを指定したところ、「漁夫」「男児」が離れた位置にプロットされた。
※選択するキーワードによって相対的な位置関係は変わり得る。
※実行すると指定したキーワードの幾つかが除外されるとメッセージが表示される。テキストのボリューム不足のためか無償版の仕様によるものか判断がつかない。
※当ブログの事例では「文」以外、「段落」「H5」では除外されるキーワードが増える傾向となった。
◆自己組織化マップ
・[ツール]→[コーディング]→[自己組織化マップ]でオプション画面が表示される。
[コーディング単位]は[文]で固定。
記述内容が視覚的に整理され、類似性の高い内容が近くに配置される。概ねストーリーに沿った形で各クラスターが表示される。
※クラスター化の計算を繰り返すため処理に時間がかかるので要注意。
※クラスターの配置、距離に意味はない。
◆トピックの推定
・[ツール]→[文書]→[トピックモデル]→[トピックの推定]を選択。
・[集計単位]は[文]で固定。
・[OK]ボタンをクリックすると、[トピックの推定結果]画面が表示される。
・各トピックで高い確率で出現する語句がリストアップされる。
・[#1]といった欄をクリックすると、文書検索画面が表示される。
◆ベイズ学習による分類
・[ツール]→[文書]→[ベイズ学習による分類]→[外部変数から学習]を選択。
・[分類の単位]を[文]に変更。
・[学習する外部変数]は「利用不可」。
・[OK]ボタンをクリックすると、ファイルの保存画面が表示されるので、任意のファイル名を記述して保存する。
・[ツール]→[文書]→[ベイズ学習による分類]→[学習結果ファイルの内容を確認]を選択。ファイル選択画面が開くので、先ほど保存したファイルを指定して開く。すると[学習結果ファイル]画面が開くので内容の確認を行う。
※[学習結果を用いた自動分類]については割愛する。
※[トピックの推定]と[ベイズ学習による分類]は固有名詞などを強制抽出語としてあらかじめ指定しておかないと正確に分析されないケースが生じる。正式に利用したい際は有償版の購入をお勧めする。当ブログのはあくまでテストケースとしてのものである。
※[トピックの推定]と[ベイズ学習による分類]はコーディング・ルールに依らない分析手法となるが、筆者の能力的に追及はしない。
◆参考文献
・『日本の民話 34 石見篇』(大庭良美/編, 未来社, 1978)pp.46-48, 55-57, 206-207, 449-451.
・『動かして学ぶ!はじめてのテキストマイニング』(樋口耕一, ナカニシヤ出版, 2022)
・『社会調査のための計量テキスト分析 【第2版】 内容分析の継承と発展を目指して』(樋口耕一, ナカニシヤ出版, 2020)
| 固定リンク















































































































































