« 昔話の計量テキスト分析――弥九郎霧 | トップページ | 昔話の計量テキスト分析――椛谷の次郎 »

2026年3月 1日 (日)

昔話の計量テキスト分析――邯鄲夢の枕

◆はじめに

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

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

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

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

◆ファイル

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

ダウンロード - ca_pb_003_kantanyumemakura.xlsx

ダウンロード - ca_pb_003_codingrules.txt

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

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

※公式マニュアルでは「集計単位」という用語が使われている。共起関係について、「文」では一文単位での分析、「段落」では段落単位の分析、「H5」では表計算ソフトのセル単位とされ、改行を含めた一セルの中身全体が分析単位となる。

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

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

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

◆あらすじ

・「邯鄲夢の枕」(未来社『石見の民話』)

美濃郡高城村の薄原にある薄原城は平家の落武者という斎藤隠岐守の居城であった。斎藤家には家重代の宝として世にも名高い邯鄲夢の枕があった。これを枕にあてて眠ると、それから三日後におこる出来事まで分かるという貴い宝で、戦争をするにもこれを使って計略を進めることができた。それで周囲の城主と戦っても一度も負けたことがなく、その豪勇は近隣に鳴り響いていた。同じく高城村の三星にある三星城の城主には初音姫という世にも稀な美しい姫があった。隣国の城主たちから妻に迎えたいという申し入れが引きも切らずにあったが、父の城主はなかなか許さなかった。ところが斎藤隠岐守は最愛の奥方が亡くなったので、その後添えに初音姫を頂きたいと申し込んだ。三星城主はこれを聞くと、いいことができたと内心喜んだが、中々首を縦には振らなかった。ある日初音姫を一室に呼んで、斎藤家には家重代の宝邯鄲夢の枕という世にも珍しい宝がある。あの鬼の様な隠岐守のところへ嫁ぐのは気が進まないであろうが、ひとつ嫁いで、機会をみて枕を取り出し父に渡してくれないかと頼んだ。姫には密かに思っている若い武士がいたが、父のたっての願いに仕方なく嫁ぐことにした。こうして初音姫は薄原城に輿入れをしたが、夫の隠岐守は片時もその枕を離さず、奪いとる機会がなかった。そうして六年の年月が流れた。真夏の焼けるような暑い日であった。隠岐守は土用干しをしようというので、自分で名器や書物などを城の櫓に晒してから居間にかえって昼寝をしていた。しばらくして隠岐守は慌ただしく姫に揺り起こされた。夕立が来る。虫干しの品を早く片づけよ。見ると向こうの峯から黒い雲が空を覆って今にも雨が落ちてきそうな気配だ。隠岐守は跳ね起きると、枕にしていた邯鄲夢の枕をそのままにして高い櫓へ登っていった。姫はその枕を手にとると、六年間夫として仕えた隠岐守に心で詫びながら城を抜け出て無事に三星城へ帰った。枕を手にいれた三星城主は間もなく隠岐守を攻めたが、これまで威勢が並ぶ者がなかった隠岐守も力がなく、遂に落城し立浪山に立て籠もって戦う内に刺客に刺されてはかない最後を遂げた。薄原には隠岐園さまという小さな祠がある。これは隠岐守を祀ったもので、津和野の城主を隠岐守と言ったのでこれをはばかって隠岐園さまと改めたということである。このことがあってから薄原と三星では縁組をしない様になった。


・「ふしぎなまくら」(日本標準『島根の伝説』)
益田の向横田という町に三角山(忠魂山)という山がある。元弘三年(一三三三年)、三角山には片木城という城があった。城主は領家対馬守恒正であり、正利、恒利という二人の子供がいた。兄は片木城を継ぐために城に残り、弟は三星城の城主として、辺りを治めていた。ある年のこと、父の恒正が六十一歳になったので祝いの席が設けられた。親族もあつまりにぎやかや祝い事となった。ところが、些細なことから兄弟は言い争いを始めた。一座の者が両者に分かれて祝い事どころではなくなってしまった。父の恒正は喧嘩を止めようとしたが、一向に収まらず、席をたってしまった。このことがあってから兄弟はめっきり仲が悪くなってしまった。そのうち父はこの世を去ってしまった。父が亡くなると兄弟の間の溝は深くなっていった。兄の正利は片木城主となった。三星城を攻めることを勧める家来もいたが、すぐさま攻め入ることはなかった。しかし、いくら待っても弟の方からは何も言ってこなかった。それどころか三星城の砦を固くして、却って手向かいする様子だったので、とうとう戦になってしまった。兄は度々三星城を攻めたが、中々落とせなかった。ある日、正利の妻の直の方が三星城に伝わる不思議な枕のことを話した。この枕をして休むと三日先のことまで分かるという。城を攻め落とせないのはこちらの策を前もって知られてしまうからだと告げた。正利はその枕を手に入れたいと思ったが、たやすくは入らない。三星城では毎年七月の天気のよい日に馬具や鎧を干す。その隙に直の方が持ち帰ろうといった。直の方は薄原城主である斎藤隠岐守の娘だったが、事情があって弟恒利の養女として育てられ、後に兄正利の妻となっていた。七月になった。三星城では馬具や鎧を干しはじめた。直の方はこのときばかりと三星城に向かった。恒利の養女であっても今は正利の妻である。心を鬼にして行った。恒利と面会した直の方は兄が仲直りしたいと言っていると告げた。それで気を許した弟恒利は、直の方に二三日逗留するよう勧めた。虫干しの最中に直の方は床の間に入った。ちょうどそのとき恒利は城中を見回るために座を立っていた。直の方はこのときとばかり、何気ない振りをして、枕を取って袂に入れた。そして枕を自分の荷物の中に入れておいた。直の方は長居は迷惑だろうと断って恒利が城中を見回っている間に帰ってしまった。不思議な枕を手にした正利は喜んだ。その枕で休むと、三星城の様子が手に取るように分かった。正利はしばらくは三星城を攻めなかったが、年が明けると攻めに掛かった。三星城では驚いた。先手、先手と弱みにつけ込んで攻めてくるので、とうとう三星城は落城してしまった。あの不思議な枕の力があったからだという。


・邯鄲夢の枕(ハーベスト出版『夕陽を招く長者』)
六百年以上昔、向横田城と三星城と二つの城があった。三星城の姫が向横田城に輿入れした。当初は親戚として仲が良かったが、三星の大殿の還暦の祝いの席で領地を巡って争いとなり、向横田城は三星城を攻めはじめた。ところがどんな戦略を立てても先を見透かされて落城させることができない。向横田の殿さまは三星から輿入れしてきた奥方に訳を訊いてみた。奥方は三星城には邯鄲夢の枕という三日先のことまでが分かる宝物があると答えた。それで殿さまと奥方は三星城に向かった。城は土用干しの最中だった。殿さまは竹藪に隠れ、奥方だけが中に入り、大殿に詫びを入れて肩を揉むと、機嫌を直した大殿は居眠りをはじめてしまった。奥方が合図すると殿さまは砂を撒いて雨のような音をたてた。奥方はそれで夕立がくると大殿を揺り起こした。それで大殿は枕を手放したまま外へ飛び出してしまった。奥方はその隙に枕を持ち去った。それから数日後、二百名あまりの向横田の軍勢が三星城に攻め入り、三星城は落ちてしまった。


◆コーディングルール

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

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

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

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

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

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

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

*薄原
'薄原'
*隠岐守
'隠岐守'
*三日先
'三日先' or '三日後'
*戦争
戦争 or 戦
*三星
'三星'
*妻
妻 or 奥方
*輿入れ
輿入れ or 嫁ぐ
*喧嘩
喧嘩 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]に設定する。

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

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

対応分析

原点付近に「三星」「妻」「三日先」というキーワードが配置されている。日本標準版が史実に近いと考えられるが、三星城主の妻となった直の方の人間関係の複雑さを示す「娘」「養女」、また兄弟の対立を示す「兄」「弟」「片木」といったキーワードが配置されている。未来社版では斎藤隠岐守が死後「隠岐園」と呼び変えられたことが特徴として挙げられている。

◆解釈

日本標準版と未来社版では背景となる人間関係が異なっており、その違いが特徴的な差として挙げられる形となっている。ハーベスト出版版は文字数も少なく、やや特徴に欠けるかもしれない。

◆階層的クラスター分析

・[コーディング単位]を[文]に変更、実行するとデンドログラム(樹状図)で可視化される。

階層的クラスター分析
階層的クラスター分析

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

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

※当ブログの場合、[コーディング単位]が[段落][H5]だと、コードを全て選択するとエラーが返される結果となった。

◆クロス集計

※タイトルが同名のため「出版社」で集計をかけた。

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

クロス集計をかけたところ、「薄原」「隠岐守」などでカイ(χ)2乗値で相関関係を示す結果(※マーク)が得られた。

Ca_pb_003_crt_kantan_20260308233901

マップとして描画したところ、「隠岐守」「片木」「殿さま」といったキーワードの残差が大きく(濃く)表示される結果となった。バブルとしては「戦争」「妻」などが大きく描画された。

Ca_pb_003_crt_bm_kantan_20260308234201

◆KWICコンコーダンス

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

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

◆関連語検索

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

関連語検索

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

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

関連語検索

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

◆属性の転倒

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

N 抽出語 品詞 全体 共起 Jaccard
1 攻める 動詞  7 (0.086)  4 (0.250) 0.2105
2 三星 組織名  10 (0.123)  4 (0.250) 0.1818
3 城主 名詞  10 (0.123)  4 (0.250) 0.1818
4 名詞C  7 (0.086)  3 (0.188) 0.15
5 名詞C  18 (0.222)  4 (0.250) 0.1333
6 名詞C  19 (0.235)  4 (0.250) 0.129
7 名詞C  11 (0.136)  3 (0.188) 0.125
8 嫁ぐ 動詞  2 (0.025)  2 (0.125) 0.125

三日先まで予知する夢の枕のお陰で落城しなかった城だが、嫁いできた姫に枕を奪取され落城してしまう。城主は容易に枕を手放さなかったが、虫干しの日、急な雨で目を離した隙に枕を奪取されてしまう。

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

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

・[城|戦:落ちない/落ちる]
・[城主|枕:放さない/離す]

こういった風にお話を転がしていると分析できる。家宝の枕をお奪われた城は「難攻不落/落城」と転倒、城主もその運命が「生/死」へと転倒してしまう。

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

◆類似度行列

・[コーディング単位]を[文]に変更して[集計]。

類似度行列

Jaccard係数がマトリクス形式で確認できる。

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

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

◆多次元尺度構成法

・[コーディング単位]を[文]に変更して実行。
・確認したいキーワードを指定。
・次元を「2」から「3」に変更して実行、三次元のマップとした。

多次元尺度構成法

「負ける」と「ない」は案外離れていた。

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

※実行すると指定したキーワードの幾つかが除外されるとメッセージが表示される。テキストのボリューム不足のためか無償版の仕様によるものか判断がつかない。
※当ブログの事例では「文」以外、「段落」「H5」では除外されるキーワードが増える傾向となった。

◆自己組織化マップ

・[コーディング単位]を[文]に変更して実行。

自己組織化マップ

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

※当ブログの事例では「文」以外、「段落」「H5」ではエラーが返される結果となった。
※クラスター化の計算を繰り返すため処理に時間がかかるので要注意。
※クラスターの配置、距離に意味はない。

◆トピックの推定

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

トピックの推定

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

トピックの推定・文書表示

◆ベイズ学習による分類

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

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

ベイズ学習による分類

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

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

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

◆参考文献
・『日本の民話 34 石見篇』(大庭良美/編, 未来社, 1978)pp.343-345.
・『島根の伝説』(島根県小・中学校国語教育研究会/編, 日本標準, 1978)pp.42-48.
・「夕陽を招く長者 山陰民話語り部シリーズ1」(民話の会「石見」/編, ハーベスト出版, 2013)pp.136-137.
・『動かして学ぶ!はじめてのテキストマイニング』(樋口耕一, ナカニシヤ出版, 2022)
・『社会調査のための計量テキスト分析 【第2版】 内容分析の継承と発展を目指して』(樋口耕一, ナカニシヤ出版, 2020)

|

« 昔話の計量テキスト分析――弥九郎霧 | トップページ | 昔話の計量テキスト分析――椛谷の次郎 »

昔話」カテゴリの記事