« 昔話の計量テキスト分析――椛谷の次郎 | トップページ | 山陰のインバウンド 2025 »

2026年3月 5日 (木)

昔話の計量テキスト分析――琴姫

◆はじめに

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

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

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

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

◆ファイル

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

ダウンロード - ca_pb_005_kotohime.xlsx

ダウンロード - ca_pb_005_codingrules.txt

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

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

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

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

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

◆あらすじ

※角川書店版は文芸風に潤色されているように感じたが、あらすじには含めておいた。

・「琴姫物語」(未来社『石見の民話』)
栄華を極めた平家一門も源氏の軍勢に追われ、西海へと落ち延びていった。そして壇ノ浦の戦いに敗れ、海の藻屑となってしまった。都に住んでいた一門の姫君たちも故郷を遠く離れて西海の波の上に漂わねばならなかった。今年十八歳の琴姫は目の見えない父と二人で暮らしていた。父は琴の名人で琴姫に丹精をこめて秘曲を伝えた。姫はまもなく琴の名手となり、二人は琴の音で慰め合っていた。琴姫も源平の戦いに追われて都を離れたが、混雑に紛れて父を見失ってしまった。二位の尼が海に沈んだとき、多くの人が従って死んだ。が、琴姫は運が尽きなかったのか、その翌日に家来に救われて、頼るところもなく広い海に漂った。船の中には姫が命と頼む琴が一張りあるだけだった。三日目の朝、空がにわかに曇って酷い風雨になった。船は転覆しそうになった。琴姫と家来は波のまにまに流されていく他なかった。その内に船はとうとう砕けてしまった。力尽きた琴姫は琴を抱いて波に身を任せた。それから何日か経って、家来とも離ればなれになって、遂に死んだ姫の亡骸は石見地方のある浜辺に漂着した。手には琴を堅く抱いていた。村の人たちは浜を見下ろす小高い丘に懇ろに姫を葬った。あくる日、静かな浦から美しい琴の音が響いてきた。村人たちは浜へ出てみたが、誰もいない。ただ琴の音がどこからともなく聞こえてくる。砂が鳴る。人々が歩く度に琴の音は足下から起こるのだった。村人たちは時の経つのも忘れて耳を傾けた。これは、あの可哀想な女の人が弾いて聴かせるのだと皆が言った。それからしばらく経ったある日のこと、杖を頼りに流れた盲いた老人がいた。浦の人からここは琴の音が聞こえる不思議な浜であることを聞くと、砂浜へ下りていった。老人が耳を傾けると夢のようにコロンコロンと琴の音が聞こえてきた。これはまちがいなく琴姫が弾く琴の音だと老人は叫んだ。老人は琴姫の父親だった。流れ流れて遠い石見の海岸まで盲いた身で訪ねてきたのだ。琴の調べは老人が教えた秘曲だった。老人の目に平和な日々が浮かんできた。老人は全てを悟った。老人は琴の音に誘われるように静かに水際へ下りていった。琴の音は海の中から波の向こうから聞こえてきた。老人は一歩一歩、静かに海へ入っていった。水は次第に深くなり、寄せてきた波は老人を吞んでしまった。そしてここは何時しか琴ヶ浜と呼ばれるようになった。


・「琴姫さん」(日本標準『島根のむかし話』)
昔、大風が吹いたあくる日、海岸に一艘の小舟が流れ着いた。舟の中にはお姫様が琴を抱えたまま死んだようになって倒れていた。村人たちが介抱すると大分してから気がついて水や茶が飲めるようになった。少しづつ話ができるようになったので訳を聞いてみると、都で大きな戦いがあり、負け戦となって命からがら船で逃げるとき嵐にあって流された。付き添いの者はほとんど波に呑まれてしまったということだった。ある晩、今まで聞いたことのない琴の音が聞こえた。村人たちが音のする方に集まると、海辺の小高い丘で姫が琴を弾いていた。毎晩のように聞こえるので村人たちは喜んで聞いていた。ところがその姫様はちょっとした風邪が元で寝込んでしまった。心配した村人たちは介抱したが姫は結局亡くなってしまった。村人たちは姫を海辺の丘に葬った。姫の名は誰も知らなかったが、琴を弾くお姫様ということで琴姫さんと呼んでいた。それで姫が着いた浜を琴が浜と呼ぶ。


・「琴姫伝説」(角川書店『出雲・石見の伝説』)
寿永四年(一一八五)春の日、壇之浦で平家が滅亡した後、仁摩の漁師が浜に出ると一艘の小舟が打ち上げられていた。舟の中には美しい衣装をまとい琴をしっかりと握った若い娘が倒れていた。漁師は娘を家へ連れ帰ると介抱した。娘は平家一門の姫で都では琴の上手な姫として愛されていた。浦人たちは姫をかくまうことにした。姫のために作られた仮小屋で姫は夜になると琴をつま弾いていた。しばらくして姫は浜で琴を弾くようになった。ある夜、浦人の一人が食事を持って姫のところに行くと姿がなく、姫は小屋の中で喀血して苦しんでいた。姫は胸を患っていた。浦人たちは手厚く看病したが、甲斐なく姫は息を引き取ってしまった。姫の亡骸は浜の見える丘に葬られた。ある日、浦人が浜を歩いていくと、踏みしめる砂がキュッと鳴った。浦人たちはこの音は琴の音だ。琴姫の魂がこの浜に留まって自分たちを慰めてくれているのだと浜を琴ヶ浜と呼ぶようになった。


◆コーディングルール

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

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

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

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

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

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

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


*壇ノ浦
'壇ノ浦' or '壇之浦'
*姫君たち
'姫君たち'
*琴姫
'琴姫' or 姫 or '姫様' or '女の人'
*名人
名人 or 名手
*秘曲
'秘曲'
*死ぬ
死ぬ or 亡くなる or ( 息 and 引き取る )
*浜辺
浜辺 or 浜 or 砂浜 or 海辺
*村人
村人 or ( 村 and 人 ) 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乗値で相関関係を示す結果(※マーク)が得られた。

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

マップとして描画したところ、「嵐」「娘」といったキーワードの残差が大きく(濃く)表示される結果となった。バブルとしては「琴姫」「琴」などが大きく描画された。

◆KWICコンコーダンス

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

KWICコンコーダンス

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

◆関連語検索

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

関連語検索

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

関連語検索

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

◆属性の転倒

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

N 抽出語 品詞 全体 共起 Jaccard
1 名詞C  24 (0.364)  7 (0.636) 0.25
2 名詞C  31 (0.470)  7 (0.636) 0.2
3 漂う 動詞  2 (0.030)  2 (0.182) 0.1818
4 家来 名詞  3 (0.045)  2 (0.182) 0.1667
5 名詞C  12 (0.182)  3 (0.273) 0.15
6 弾く 動詞  5 (0.076)  2 (0.182) 0.1429
7 人名  5 (0.076)  2 (0.182) 0.1429
8 組織名  6 (0.091)  2 (0.182) 0.1333
9 名詞C  6 (0.091)  2 (0.182) 0.1333
10 聞こえる 動詞  6 (0.091)  2 (0.182) 0.1333

都で戦に巻き込まれて流浪の身となった琴姫は船が難破、寄る辺の無い存在となってしまう。漂着した馬路で姫は村人から暖かく迎えられるものの……といった粗筋となっている。未来社版では鳴き砂の音が琴姫のものだと気づいた父親が入水、その姿は見えなくなってしまう。

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

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

・[姫|寄る辺:ない/ある]
・[父|入水:見える/見えない]

こういった風にお話を転がしていると分析できる。寄る辺のない琴姫は馬路で暖かく受け入れられたものの、姫の運命は「生/死」と転倒してしまう。

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

◆類似度行列

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

類似度行列

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

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

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

◆多次元尺度構成法

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

多次元尺度構成法

「平家」はやや離れた位置にプロットされている。

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

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

◆自己組織化マップ

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

自己組織化マップ

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

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

◆トピックの推定

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

トピックの推定

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

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

◆ベイズ学習による分類

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

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

ベイズ学習による分類

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

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

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

◆参考文献
・『日本の民話 34 石見篇』(大庭良美/編, 未来社, 1978)pp.15-18.
・『島根のむかし話』(島根県小・中学校国語教育研究会/編著, 日本標準, 1976)pp.245-248.
・『出雲・石見の伝説 日本の伝説48』(酒井董美, 萩坂昇, 角川書店, 1980)pp.225-230.
・『動かして学ぶ!はじめてのテキストマイニング』(樋口耕一, ナカニシヤ出版, 2022)
・『社会調査のための計量テキスト分析 【第2版】 内容分析の継承と発展を目指して』(樋口耕一, ナカニシヤ出版, 2020)

|

« 昔話の計量テキスト分析――椛谷の次郎 | トップページ | 山陰のインバウンド 2025 »

昔話」カテゴリの記事