« チケット完売とのこと――創作音楽劇サヒメ | トップページ | 未来社『石見の民話』分析三周目、スタート »

2026年2月27日 (金)

昔話の計量テキスト分析――博労と狐

◆はじめに

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

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

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

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

◆ファイル

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

ダウンロード - ca_pb_001_bakurou.xlsx

ダウンロード - ca_pb_001_codingrules.txt

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

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

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

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

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

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

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

◆あらすじ

・「博労と狐」(未来社『石見の民話』)
昔、博労がいた。牛や馬を売ったり買ったりするのが商売で、なかなか悪賢い男であった。近くによく化ける狐がいた。ある日博労が狐にお前は何変化知っているか尋ねた。狐は七変化知っていると答えた。すると博労は自分は八変化知っていると答えた。狐がひとつ教えてくれんかと言うと、博労は自分は博労だからお前が良い牛に化ければ教えてやる、お前より一変化多いから狐がなんぼ変化しても見れば分かると答えた。狐は良い牛に化けるからひとつ教えて欲しいと頼んだ。それではずっと良い牛に化けよと博労が言い、狐は一変化多く教えて貰おうと思って良い牛に化けた。博労はそれをあれこれ言って直させて良い牛にこしらえてお金持ちの百姓のところへ連れていった。百姓の旦那はとても良い牛なので沢山の金を払った。博労は金を沢山貰って帰った。狐は駄屋へ入れられた。藁を与えられたが少しも食べられない。仕方ないので二三日いて抜けて帰った。狐は博労のところに来て、やれ苦しかった、二三日ほど何も食わないで戻ったから早く変化を教えてくれと頼んだ。博労はそういう約束だったから教えてやるから大きな袋をひとつ持ってこいと言った。狐が袋を持ってくると、お前に親類や子供や兄弟がいれば皆呼んでこい。そうれば皆習われる。お前一人習ってもつまらん、皆連れて知らねばいかんと答えた。狐は親兄弟、一家親類みな連れてきた。お前の兄弟親類は他にはおらんかと博労が尋ねると、狐はこれほどだと答えた。それじゃあ、この袋に入れと博労が言った。狐が皆袋に入ると、博労は口をしっかり縛って、教えるからよく習えよと言って大きな棒を持ってきて、袋に入っているのを「一変化」といってぶん殴った。狐は痛いので、こんなことをしてはいけない、変化を教えよと言った。博労はこれが変化だ、二変化といって叩いた。コンコン狐が言うのを三変化、四変化と言って、とうとう七変化と言って七つ叩いたときには狐はもう皆死んでしまった。


・「キツネとばくろう」(偕成社『島根県の民話』)
あるところに抜け目のない博労がいた。あるとき博労が山道を歩いていたら、向こうからきれいな娘がやってきた。よく見ると着物の裾から大きな尻尾が見えた。何のことはない、狐だった。博労に見抜かれた狐は驚いた。博労は狐に何変化知っているか尋ねた。狐が七変化知っていると答えると、博労は八変化知っていると答えた。狐は一変化余計に憶えたいので博労にどうすればいいか尋ねると、博労は牛に化けろと命じた。狐が牛に化けると博労はあちこち指図していい牛に直した。博労は牛を金持ちの家に連れていって売り払い大儲けした。一方、牛に化けた狐は餌として藁や草しか与えられなかったため空腹でならず、こっそり逃げ出した。戻った狐は再び博労に一変化教えてくれるよう頼んだ。すると博労は大きな袋を用意し、親子兄弟みんなを呼び袋の中に入るよう命じた。狐たちが中に入ると博労は口を縛ってから「一変化」と棒で叩いた。痛い、話が違うと狐は抗議したが博労はこれが変化だと叩き続けた。狐たちは袋を破って逃げ出した。それから孫子の代まで博労の言うことは信じるなと言った。


◆コーディングルール

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

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

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

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

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

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

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

*変化
化ける or 変化
*悪賢い
悪賢い or ( 抜け目 and ない )
*駄屋
'駄屋'
*藁
藁 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]に設定する。

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

対応分析

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

偕成社版では狐が当初、娘の姿で現れること、また未来社版では狐が死ぬ結末となっているが偕成社版では袋を破って逃げる結末となっていることが図示されている。どちらも狐の一族がおびき寄せられる点では一致している。

◆解釈

未来社版では博労の悪賢さが強調される展開となっている。偕成社版では狐は逃げて生存する結末で未来社版に比べて若干マイルドな内容となっている。また、当初娘に化けるものの尻尾が覗いて正体がバレるといった可愛らしさも感じられる。

博労を信じるなというくだりは、ひょっとすると、商売人に接する際のスタンスをそれとなく教えるニュアンスがあるのかもしれない。

◆階層的クラスター分析

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

Ca_pb_001_hca_bakurou_20260307132601
Ca_pb_001_hca_gs_bakurou_20260307132701

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

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

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

◆クロス集計

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

クロス集計をかけたところ、カイ(χ)2乗値で相関関係を示す結果(※マーク)は得られなかった。テキストのボリュームが足りないのが要因と推測される。これはこの後行う分析でも同様の結果となっている。

クロス集計

マップとして描画したところ、「娘」「破る」「違う」といったキーワードの残差が大きく(濃く)表示される結果となった。バブルとしては、「博労」「狐」「変化」などが大きく描画された。
クロス集計・バブルマップ

◆KWICコンコーダンス

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

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

◆関連語検索

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

関連語検索

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

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

関連語検索

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

◆属性の転倒

・「ん」の結果上位一覧

N 抽出語 品詞 全体 共起 Jaccard
1 答える 動詞  6 (0.136)  3 (1.000) 0.5
2 名詞C  1 (0.023)  1 (0.333) 0.3333
3 分かる 動詞  1 (0.023)  1 (0.333) 0.3333
4 見る 動詞  2 (0.045)  1 (0.333) 0.25
5 自分 名詞  2 (0.045)  1 (0.333) 0.25
6 多い 形容詞  2 (0.045)  1 (0.333) 0.25
7 ひとつ 副詞可能  3 (0.068)  1 (0.333) 0.2
8 習う 動詞  3 (0.068)  1 (0.333) 0.2

「ん」は「ぬ」が転訛したものだが、別々に分類されている。

博労が化け狐に対し「自分の方が一変化多く知っている」と騙す場面で、狐の一族が博労の仕掛けた罠にはまってしまうきっかけとなる。

狐は一変化多く知ることに執着、博労は精神的に優位に立つ。

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

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

・[狐|欲望:知らない/知りたい]
・[博労|関係:対等/優位]

こういった風にお話を転がしていると分析できる。未来社版では狐の一族は博労に叩かれることで、その生が「生/死」へと転倒してしまう。

※なお、「ない」を確認したところ、牛に化けた狐が餌として与えられた藁を食べられず空腹に陥ってしまうくだりだった。
※なお、図式化には分析対象のテキストに含まれない語句も用いているので要注意。

◆類似度行列

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

類似度行列

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

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

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

◆多次元尺度構成法

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

多次元尺度構成法

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

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

◆自己組織化マップ

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

Ca_pb_001_som_bakurou

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

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

◆トピックの推定

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

トピックの推定

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

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

◆ベイズ学習による分類

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

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

ベイズ学習による分類

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

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

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

◆参考文献
・『日本の民話 34 石見篇』(大庭良美/編, 未来社, 1978)pp.227-229.
・『島根県の民話 やまたのおろちほか』(日本児童文学者協会/編, 偕成社, 2000)pp.187-191.
・『動かして学ぶ!はじめてのテキストマイニング』(樋口耕一, ナカニシヤ出版, 2022)
・『社会調査のための計量テキスト分析 【第2版】 内容分析の継承と発展を目指して』(樋口耕一, ナカニシヤ出版, 2020)

|

« チケット完売とのこと――創作音楽劇サヒメ | トップページ | 未来社『石見の民話』分析三周目、スタート »

昔話」カテゴリの記事