« 昔話の計量テキスト分析――蛇 | トップページ | 昔話の計量テキスト分析――馬鹿婿 »

2026年6月 1日 (月)

昔話の計量テキスト分析――古猫

◆はじめに

以下はKH Coder(無償版:version 3.Beta.08e)を用いた昔話の計量テキスト分析である。昔話の類話の比較にツールを利用できないか試行してみた。

手持ちの資料が限られるため、分析の対象となる元データの文字数が少ないものの(※本来であれば5000字以上は欲しい)、分析自体は正常に処理されていると判断した。

KH Coderの操作に慣れる目的も兼ねて行った作業で、コーディングルールの記述の事例集、あるいは速習用のチュートリアルとしてでも読んで頂ければ……といったところである。

なお、KH Coderでよく用いられるのは共起ネットワークと対応分析とのことで、それ以外はおまけパートと思って頂いて構わない。操作に習熟するにはコーディングルールの記述に慣れるのが第一である。

◆ファイル

各ファイルをダウンロードしてKH Coderに読み込ませれば同様の分析が再現可能である。

ダウンロード - ca_023_furuneko.xlsx

ダウンロード - ca_023_codingrules.txt

ダウンロード - ca_023_codingrules_b.txt (※否定詞の比較検討用)

ダウンロード - kh_coder_startingedition_sagyotejunsho.txt (※作業手順書)

※「H5」とはHTMLでいうところのヘッダー(見出し)・レベル5で本文に相当すると考えればよい。
※[コーディング単位]は「文/段落/H5」から選べるが、状況に応じて適切と思われるものを選択する必要がある。処理が上手くいかないと感じた場合、コーディング単位を切り替えると上手く処理されるケースがままある。

※公式マニュアルでは「集計単位」という用語が使われている。共起関係について、

・「文」では一文単位での分析
・「段落」では段落単位の分析
・「H5」では表計算ソフトのセル単位とされ、改行を含めた一セルの中身全体が分析単位となる

※レファレンスでも索引で「コーディング単位」の項目は設けられていない。操作性に関わる重要項目であるものの、その仕様について不明瞭な感はある。
※当ブログの場合、表計算ソフトのフォーマットで読み込ませているからH5固定でいいだろうと思い込んでいたら、さにあらずだった。

◆あらすじ

・「化け猫」(未来社『石見の民話』)
昔ある所で若者たちが大勢集まって踊っていると、そこへ見たこともない姉さんが来て皆と一緒に踊った。踊りが済んでそれぞれ家へ帰るとき、姉さんに興味を抱いた一人の若者があとから姉さんの跡をついていった。すると、姉さんは近所のお寺へ入り、ニャンと啼いた。若者はそれを聞くと真っ青になって帰った。明くる日若者はお寺へ行って和尚さんにそのことを話した。お寺には和尚さんが可愛がっている古い猫がいた。和尚さんは若者が帰ると猫を呼んで出ていってくれと言った。猫は出ていけというなら出ていく。自分がいると参詣人も少ないだろうから、これまで長いこと可愛がっていただいた恩返しに参詣人が沢山来るようにしてあげると言った。そして何時何日にどこどこの婆さんが死ぬから葬式の時に自分が火車になって死人を棺から出して空へ吊り上げる。よその坊さんが来てお経をあげると死人は上へあがるが、和尚さんが経をあげると死人は下がって棺へ収まるようにすると言った。猫が言ったその日になるとその婆さんは死んだ。そして葬式をしていると結縁の時に空が曇って火車が来て死人を掴んで空に吊り上げた。葬式に来ていた坊さんは一生懸命お経を読んだが、死人は空に吊されたままだんだん上へ上がっていく。それで近所の寺の和尚さんを呼んでお経をあげてもらうと死人はだんだん下りて来て棺へ収まり、無事に葬式が済んだ。それから和尚さんの評判が高くなって参詣人がどんどん来るようになった。そして猫はいつの間にかいなくなった。


・「猫やだけし」(未来社『石見の民話』)
昔、たいへん身上のよい家があった。その家は旦那さんと奥さんが痩せ猫を一匹飼っていた。旦那さんはその猫をとても可愛がっていたが、奥さんは猫が嫌いで何かといえばいじめていた。ある日、奥さんが魚を買っておいたところ、猫がそれを見つけて取って食べた。それを見た奥さんは傍にあった庖丁を投げつけた。庖丁は猫の目に当たったので猫は鳴きながら逃げた。旦那さんは魚は昔から猫の好くものだから、しまっておかないと猫が喰うと言った。猫はそのままどこへ行ったものか、とうとう帰ってこなかった。それから何日か経って、旦那さんは旅に出かけた。途中道に迷って山の中へ入ったが、その内とうとう日が暮れてしまった。家がないので困ってとぼとぼ行く内に向こうに火が見えてきたので喜んで行ってみると一軒の家があった。そこで道に迷った旨伝えて泊めてくれるよう頼むと、中から白髪のお爺さんとお婆さんが出てきて快く泊めてくれた。奥の一間で寝ていると、夜中頃になって人がぞろぞろ集まってきた。そして口々に今晩はお客さんがあるそうで結構でございますと挨拶するので旦那さんは気味が悪くなってきた。すると障子が開いて、一番しまいにやってきた手拭いを被った女の人が入ってきて旦那さんの顔をじっと見ていた。その内にだんだん夜が更けて皆寝てしまった。すると手拭いを被っていた女が旦那さんと言って小さな声で旦那さんを揺り起こした。目を覚ますと、私は旦那さんに小さい時から可愛がって頂いた猫です。ここは猫やだけしと言って猫の家です。今皆があなたを食べる相談をしているところですから一時も早く逃げて下さい。ここから家まで八里ほどありますが、私が連れて出てあげます。私の背中に負われてくださいと言った。旦那さんは驚いて猫の背中に負われた。猫は一生懸命に走って、ようやく家の近くまで来た。そして、ここからはすぐ家ですからお帰り下さい。私は帰ると他の猫から殺されますからこの松の木へ登って死にますと言った。旦那さんはどうもありがとうと言って別れて家へ帰った。そして明くる朝早く松の木の下へ行ってみると猫が木から落ちて死んでいた。よく見ると片目が潰れていたので旦那さんのところにいた猫だと分かった。


・「岡田の婆」(未来社『石見の民話』)
猟師が山へ猟に行って日が暮れた。それで夜の明けるのを待とうと思って木の上へ登っていた。すると夜中になって猫が沢山やってきた。一匹の猫が木の下へしゃがんで木に抱きついた。次の猫はその猫の背中から肩車(びんぶく)をした。それから次々に猫が肩車をして木へ登って猟師の足を捕まえようとしたが、ちょっと届かない。その猫は、自分は帰って岡田の婆さんを連れてくると言って、ばらっと崩れ落ちて皆いなくなった。猟師が岡田のばばあと言っていたが、あそこにおるばばあは猫かしらんと思っていると、大きな猫が来て、他の猫も木の下に集まった。それから前の様にして木へ登ってきて、一番終いに後から来た大きな猫があがってきた。そして猟師の足を捕まえたので、猟師はすぐ腰へ差している鉈を抜いて手を切った。猫は悲鳴をあげて下へ落ちると、どこへともなくいなくなった。夜が明けると猟師は木から下りてきて、岡田のばばあちゅうのは前から居るが、猫だったのかしらんと思って岡田の家へ行って隙間から見ると婆さんが手の傷を舐めて(ねぶって)いる。それで、これは本当に猫じゃなかろうかと思って隙間から鉄砲で撃ち殺してしまった。その家の人は大騒ぎを始めた。近所の人も来て大騒動になった。これは猫の化物だから撃ったのだ。こうしておくと、そのうち正体を現して猫になると言って、猟師は婆さんの足を縛って庭の上に下げておいた。二日ぶりに猟師が行ってみると、やはり婆さんである。三日ぶりに行ってみると、大きな古猫になっていた。それで猟師には何のこともなかった。戸へ背をすりつけるか、柱へ背をすりつけて通る猫は飼ってもよいが、部屋の真ん中を通る様になると踊りを踊る様になる。そうなると化けるから置いてはいけないと言う。


◆コーディングルール

※コーディングルールのキーワードは重要と判断したものを人力でピックアップしている。そのため、恣意性を伴う分析となる。

※活用形でなく基本形で入力する。

※[前処理]→[語の抽出結果を確認]でキーワードがどのように分節されているか検索すると結果の一覧[語の抽出結果]が表示される。

※[Result]から確認したい行をクリックして選択、画面下の[詳細表示]ボタンをクリックするとサブ画面が表示され、活用形や基本形が確認できる。

※昔話では「否定/肯定」「肯定/否定」と属性が変化することが多いと考え、否定詞「ない」「まい」「ぬ」「ん」、また禁止を意味する「な」を共通のコードとして設定している。

※「できる」「やる」「られる」「せる」といった動詞も共通のコードとして追加してみた。

※[関連語検索]で否定詞の共起語の一覧を表示させたところ、日本の昔話のように掌編レベルのボリュームだと、物語の動因となる箇所に関する語句が上位に表示される傾向が強いのではないか……といった印象があり、検証作業中である。

※無償版では強制抽出語の指定が機能制限で事実上使用できないため以下のような手法をとっている。


*婆さん
婆さん or 'ばばあ'
*参詣人
'参詣人'
*お経
お経 or 経
*火車
'火車'
*目
目 or 片目


*ない
ない
*ぬ

*ん

*るな
'るな'
*るまい
'るまい'

*できる
できる
*やる
やる
*られる
られる
*せる
せる

*いる
いる
*なる
なる

*若者
若者
*踊る
踊る
*姉さん
姉さん
*寺

*和尚
和尚
*古い
古い
*猫

*死ぬ
死ぬ
*葬式
葬式
*坊さん
坊さん
*死人
死人
*棺

*旦那
旦那
*奥さん
奥さん
*山

*迷う
迷う
*家

*爺さん
爺さん
*客

*女

*可愛がる
可愛がる
*食べる
食べる
*負う
負う
*落ちる
落ちる
*潰れる
潰れる
*猟師
猟師
*木

*肩車
肩車
*届く
届く
*岡田
岡田
*鉈

*切る
切る
*殺す
殺す
*化物
化物
*正体
正体


◆共起ネットワーク

・[ツール]→[コーディング]→[共起ネットワーク]でオプション画面が表示される。
・[コーディング単位]を[H5]に設定する。

※[描画する共起関係(edge)の選択]で「係数」を「0.2」から「0.3」に修正する。
※[強い共起関係ほど濃い線に]にチェックを入れる。

Jaccard係数が0.3以上はかなり強い共起関係にあることを示しているが、分析対象となる元データの文字数が少ないため係数が高めに出てしまう傾向にあるため、こうしている。

※Jaccard係数は共起関係(※ある言葉に続いて出てくる関係)の強さを表し 0≦係数≦1 の範囲の値をとる。

【Jaccard係数】
・0.1 →関連あり
・0.2 →強い関連あり
・0.3以上 →とても強い関連あり
※ただし、あくまで目安であって絶対ではない。

共起ネットワーク

ざっと確認したところ、共通するキーワードが中央のサブグラフ(バブルが島状に集まった一塊)に表示され、類話毎に異なるキーワードが上下のサブグラフに表示される形となっている。

※なお、各バブル間の距離や配置に意味はない。

◆対応分析

・[ツール]→[コーディング]→[対応分析]でオプション画面が表示される。
・[コーディング単位]を[H5]に設定する。

※[外部変数]は[タイトル]のまま続行。
※[差異が顕著なコードを分析に使用]で上位「40」とした。また[バブルプロット]にチェックを入れている。これらは文字の重なりを極力避けるためである。
※文字が重なって読みづらい場合、オプション画面の[コード選択]で不要なコードのチェックを外してもよい。

対応分析

x、y軸上の原点(0.0)から点線が伸び交差した箇所が原点となる。原点から離れるほど特徴的なキーワードだと分析される。

原点直下には「ない」「いる」といったキーワードがプロットされている。離れた位置にプロットされているのは「化け猫」では「姉さん」「葬式」「火車」、「猫やだけし」では「奥さん」「潰れる」「女」、「岡田の婆」では「猟師」「肩車」「鉈」といった辺りである。

◆解釈

年を経た猫が化物へと変化するお話である。「化け猫」では火車という強欲な者の死体を食う妖怪へと変化している。「猫やだけし」は猫の家という異界に紛れ込む話となっている。「岡田の婆」は千疋狼の類話でもある。

◆階層的クラスター分析

・[ツール]→[コーディング]→[階層的クラスター分析]でオプション画面が表示される。
・[コーディング単位]を[文]に変更、実行するとデンドログラム(樹状図)で可視化される。

※キーワード指定しても可。

階層的クラスター分析・デンドログラム(樹状図)
階層的クラスター分析・デンドログラム(樹状図)

概ねストーリー展開に沿った形でクラスター化されている。

◆クロス集計

・[コーディング単位]を[文]に変更、[タイトル]で[集計]する。

クロス集計

クロス集計をかけたところ、「婆さん」「火車」「姉さん」といったキーワードでカイ(χ)2乗値で相関関係を示す結果(※マーク)が得られた。

クロス集計・バブルマップ

マップとして描画したところ、「和尚」「古い」「死人」「棺」「猟師」「木」といったキーワードの残差が大きく(濃く)表示される結果となった。バブルとしては「猫」が大きく描画された。

◆KWICコンコーダンス

現状ではテキストマイニングのツールに文脈を読む性能はないため実際に該当箇所を読んで人力で判断する他ない。KWICコンコーダンスでキーワード指定すれば指定したキーワードがどのような文脈で用いられているか一覧で抽出される。

KWICコンコーダンス
KWICコンコーダンス・文書表示

◆関連語検索

・[集計単位]を[文]に変更、[集計]する。
・[Search Entry:]の一覧からキーワードを選択してダブルクリックすると[Result]に指定したキーワードの品詞や共起関係が表示される。

関連語検索

※[Result:]から行指定してダブルクリックするとKWICコンコーダンスに遷移する。
※[Result:]の一覧から範囲指定して[コピー]したものを表計算ソフトやテキストファイルにペーストすることも可能である。

[#直接入力]を指定して「喰う」といったキーワードで検索すると関連語が一覧で表示される。

関連語検索

◆属性の転倒

・「ない」の結果上位一覧

N 抽出語 品詞 全体 共起 Jaccard
1 名詞C  32 (0.471)  7 (0.636) 0.1944
2 副詞可能  3 (0.044)  2 (0.182) 0.1667
3 言う 動詞  14 (0.206)  3 (0.273) 0.1364
4 行う 動詞  6 (0.088)  2 (0.182) 0.1333
5 帰る 動詞  8 (0.118)  2 (0.182) 0.1176
6 猟師 名詞  8 (0.118)  2 (0.182) 0.1176
7 いつの間にか 副詞  1 (0.015)  1 (0.091) 0.0909
8 一軒 名詞  1 (0.015)  1 (0.091) 0.0909
9 一緒 サ変名詞  1 (0.015)  1 (0.091) 0.0909
10 名詞C  1 (0.015)  1 (0.091) 0.0909

年を経た猫が人に化けて人を救ったり襲ったり……といった粗筋となっている。

短いお話の中で属性の転倒を多用するのが昔話の特徴の一つと考えられる。

ここで「/」(スラッシュ)を「転倒」を意味する記号として用いる。スラッシュは様々な場面で用いられていて文脈依存的な記号という欠点もあるが、視覚的にはイメージしやすいと判断した。

・[和尚|猫:追放/火車]
・[猫|旦那:危機/脱出]
・[猟師|猫:婆/古猫]

こういった風にお話を転がしていると分析できる。猟師は猫たちの襲撃から逃れた後で訪れた家でそこの婆さんの正体を見破り「婆/古猫」と転倒させる。

※なお、図式化には分析対象のテキストに含まれない語句も用いているので要注意。

※関連語検索、強制抽出語を設定しないと狙い通りに処理されないケースが見られる。

◆類似度行列

・[コーディング単位]を[文]に変更して[集計]。Jaccard係数がマトリクス形式で確認できる。

類似度行列

・ある列を選択して画面右下の[コピー(選択列)]をクリックすると、当該のキーワードに関するJaccard係数がコピーされるので、それを表計算ソフトにペーストするといった利用が可能となる。

※当ブログでは[コーディング単位]が[段落][H5]の場合、Jacccard係数が1.0~0.5といった結果がほとんどで、意味のない結果となった。

◆多次元尺度構成法

・[ツール]→[コーディング]→[多次元尺度構成法]でオプション画面が表示される。
・[コーディング単位]を[H5]から[文]に変更。
・[クリア]ボタンをクリックしてコード選択を一旦リセット、共起関係を確認したいキーワードを指定。
・次元を「2」から「3」に変更して実行、三次元のマップとした。

多次元尺度構成法

旦那が猫やだけしに迷い込むくだりに関するキーワードを指定したところ、「殺す」が離れた位置にプロットされた。

※選択するキーワードによって相対的な位置関係は変わり得る。

◆自己組織化マップ

・[ツール]→[コーディング]→[自己組織化マップ]でオプション画面が表示される。
・[コーディング単位]は[文]で固定。

自己組織化マップ

記述内容が視覚的に整理され、類似性の高い内容が近くに配置される。概ねストーリーに沿った形で各クラスターが表示される。

※クラスター化の計算を繰り返すため処理に時間がかかるので要注意。
※クラスターの配置、距離に意味はない。

◆トピックの推定

・[ツール]→[文書]→[トピックモデル]→[トピックの推定]を選択。
・[集計単位]は[文]で固定。
・[OK]ボタンをクリックすると、[トピックの推定結果]画面が表示される。

トピックの推定

・各トピックで高い確率で出現する語句がリストアップされる。
・[#1]といった欄をクリックすると、文書検索画面が表示される。

トピックの推定

◆ベイズ学習による分類

・[ツール]→[文書]→[ベイズ学習による分類]→[外部変数から学習]を選択。
・[分類の単位]を[文]に変更。
・[学習する外部変数]は「利用不可」。
・[OK]ボタンをクリックすると、ファイルの保存画面が表示されるので、任意のファイル名を記述して保存する。

・[ツール]→[文書]→[ベイズ学習による分類]→[学習結果ファイルの内容を確認]を選択。ファイル選択画面が開くので、先ほど保存したファイルを指定して開く。すると[学習結果ファイル]画面が開くので内容の確認を行う。

ベイズ学習による分類

※[学習結果を用いた自動分類]については割愛する。

※[トピックの推定]と[ベイズ学習による分類]は固有名詞などを強制抽出語としてあらかじめ指定しておかないと正確に分析されないケースが生じる。正式に利用したい際は有償版の購入をお勧めする。当ブログのはあくまでテストケースとしてのものである。

※[トピックの推定]と[ベイズ学習による分類]はコーディング・ルールに依らない分析手法となるが、筆者の能力的に追及はしない。

◆参考文献

・『日本の民話 34 石見篇』(大庭良美/編, 未来社, 1978)pp.210-211, 294-296, 431-432.
・『動かして学ぶ!はじめてのテキストマイニング』(樋口耕一, ナカニシヤ出版, 2022)
・『社会調査のための計量テキスト分析 【第2版】 内容分析の継承と発展を目指して』(樋口耕一, ナカニシヤ出版, 2020)

|

« 昔話の計量テキスト分析――蛇 | トップページ | 昔話の計量テキスト分析――馬鹿婿 »

昔話」カテゴリの記事