« 応援チケットを使い切る | トップページ | 昔話の計量テキスト分析――西行法師 »

2026年5月 3日 (日)

昔話の計量テキスト分析――彦八

◆はじめに

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

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

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

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

◆ファイル

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

ダウンロード - ca_001_hikohachi.xlsx

ダウンロード - ca_001_codingrules.txt

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

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

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

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

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

◆あらすじ

・「虎の皮」(未来社『石見の民話』)
彦八が死んで閻魔さまの前へ出た。彦八は嘘ばかりついて人を騙していたから地獄だと閻魔は言った。彦八は鬼に向かって忘れ物をしたからちょっと帰らせて欲しい。来るときには虎の皮を土産に持ってくると言った。鬼は虎の皮が欲しいので許した。彦八が喜んで帰ると葬式の最中だった。柩の蓋を押し上げて生き返った彦八は心を入れ替え御法義者になった。今度死んで閻魔さまのところへ行くと成績がよいので極楽に行くことになった。そして地蔵さまに連れられて極楽へ行きかけると鬼が虎の皮を催促した。彦八はあれは嘘の皮だと答えて極楽へ行ってしまった。


・「嘘ではない」(未来社『石見の民話』)
彦八が旦那のところへ呼ばれていくと、旦那は彦八に話せと言った。話すことは話すが、せっかく話すと、こんな彦八、そりゃ嘘ではないかと言う。嘘ではないかと言うともう話さない。よし、もう嘘ではないかとは言わないから話せと旦那が言うと、彦八はでは話そう、自分が雪の降っている中を通っていると、蛇が出てきて何か獲物がないかと探すが何もない。そこで蛇は自分の尻尾から食いはじめて、とうとう頭だけ残った。それでもう食べるものがないので、その頭も食べてしまったと話した。これを聞いた旦那は何気なしに彦八、それは嘘ではないか。頭が何を食ったかと言った。すると彦八は、旦那の様に分からぬことを言うから話はできない。たった今嘘ではないかと言ったではないかと帰ってしまった。


・「涙がこぼれる」(未来社『石見の民話』)
彦八はいつもお金を出さずに仲間の中へ入って飲んだり騒いだりしていた。そこで皆が相談して、今度は彦八が来ても家の中へ入れないことにして戸を閉めて飲んでいた。そこへ彦八がやって来て戸を叩いて開けてくれと言った。皆はまた来たなと思って知らぬ顔をしていた。すると彦八は大声で開けてくれ、早く開けないとこぼれるよとしきりに頼むので、今度は何か持ってきたのだろうから開けてやれと戸を開けた。すると彦八は何も持ってない。そこで一体何がこぼれるのかと大声で叱りつけると、彦八は平気な顔で、早く開けてくれなければ涙がこぼれると言ったので、皆は仕方なしにまた中に入れて飲ませた。


・「話は彦八」(未来社『石見の民話』)
「話は彦八」と言われるくらいに話上手な彦八という男がいた。その話はみな作り話で、それがまたまじめくさって話すので本気で聞いていると、しまいになって、ああ、かつがれたと気がつくのであった。彦八はある時さる物持ちの楽隠居のところへ行った。入るとすぐ隠居が彦八、何か話せと注文した。いや、話すまい。旦那は聞いた後で、いつでも彦八それは嘘ではないかと言うから、自分にとっては張り合いがないと彦八は断った。いや今日は決してそのような事は言わない。証として、違約したらこの大判を彦八にやると隠居は机の上にあったピカピカする大判を一枚、彦八の前へ出した。しからば話そう。これはつくり話などではなく、また聞いた話でもなく、自分の実見談だから、そのつもりで聞くように。先日自分が浅利の長良屋へ用事があって参る途中、江川の川端で渡し舟を待っていた。ところが自分より先に侍が一人、供を連れて両掛に腰をかけて同じく渡し舟を待っていた。すると松の枝にとまっていた烏が糞をして侍の羽織を汚した。汚らわしいと侍はその羽織を脱ぐが早いか江川に投げ捨てて、両掛から羽織を出させてきちんと着て待っている。ところがまた烏が糞を手の甲にぺたんとやった。汚らわしいと侍は腰の刀を抜くが早いか、自分の手首をすぱっと切って江川に投げ込み、両掛から手を出してぺったり継いで泰然と腰を掛けて待っている。ところがまた烏が糞を、ところもあろうに侍の頭に落とした。侍はむっと腹をたてて、またぞろ一刀抜くが早いか、えいっと首を打ち落として、これまた汚らわしいと江川に投げ入れ、両掛から替えの首を出し、ぐっと継いで泰然自若、待っていた。その有様はいかにも昔物語の英雄豪傑の態度、ものに驚かぬ自分も感嘆、待った渡し舟が来たのも気づかず眺めていたと言った。彦八、それは嘘ではないかと隠居が思わず言ったので、はい、この大判、まことにありがたく頂戴いたしますと言って、彦八は大判を懐にしまった。


・「八匹の馬」(未来社『石見の民話』)
彦八の旦那のところへ商人が一夜宿を借りた。夕飯を食べながら色々話すうちに商人が、旦那様、今日自分が来る道でタノキのマタへ烏が巣をかけていたと言った。旦那がそんな馬鹿げた話をしなさんなと言った。いや、嘘ではない。本当であると商人が言ったので、もし本当でなかったら、お前の荷をみんな置いていけ。もし自分が負けたら八匹の馬がいるから皆あげようと旦那が言った。旦那と商人は手を打って約束をした。朝になると旦那と商人は飯も食わずに出かけた。旦那が商人について行くと、田の中に木があって、木の股に烏が巣をかけていた。旦那、あれを見よ。田の木の股に烏が巣を作っておろうと商人が言った。旦那は狸はどこにいるかね。狸なんぞいはしないじゃないかと言うと、商人は狸の話など誰もしはしない。自分が言ったのは田の木の股と言ったのだと言った。旦那の負けになった。そこで旦那はこっそり彦八を呼びにやった。そして訳を話し、お前はこれの下男ということになって上手くやってくれと頼むと、彦八はポンと膝を打って、それは自分が引き受けようと言って、本当の下男を呼んで駄屋から一番痩せた馬を出させ、庭の植木鉢に縄をかけて引っ張らせ、商人さん、さあハチヒキの馬をあげるから受け取れと言った。商人は話が違うが、まあいいと思って馬を引っ張って出ると、商人さん、お前の荷は置いていけ、八引く二(荷)が残るということがあるからと言って、とうとう商人の荷を取り上げてしまった。


・「閻魔になった彦八」(未来社『石見の民話』)
彦八が死んで閻魔さんの前へ行った。閻魔さんがお前は娑婆で何をしていたか訊いた。彦八は面白い話をして人を楽しませていたと答えた。閻魔さんは嘘を言え、面白い話ではない。いつも人を騙していたではないか。お前は地獄へ行くより仕方がないと言った。そんなことはない。あなたにも聞かせる。それはとても面白い話だと彦八が言うと、そんなに面白い話ならひとつ聞かせてもらおうかと閻魔さんが言った。彦八は話は高い台の上へあがらねば話せない。それから装束もつけねばやはりいい話ができないと言った。装束も何もないからそのままで話したらよいではないかと閻魔さんが言うと、装束はあなたの着物を貸していただけば結構ですと彦八が言ったので、閻魔さんは台から降りて着物を脱いだ。彦八はその着物を着てすぐ台の上へあがって話を始めた。ちょうどその時地獄から鬼が出て今来た罪人はどれじゃと言った。閻魔さんは罪人は閻魔の着物を着て台の上にいると言った。彦八は台の上から閻魔さんを指して罪人はそこにおると大きな声で叫んだ。わしは閻魔だ。台の上におるのが罪人だと閻魔さんは言ったが、偽りを言うなと言って鬼は閻魔さんを捕まえて地獄へ連れていってしまった。それから閻魔さんは彦八になったので罪人の取調べもやさしいそうである。


◆コーディングルール

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

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

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

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

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

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

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

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


*彦八
'彦八'
*嘘
嘘 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コンコーダンスでキーワード指定すれば指定したキーワードがどのような文脈で用いられているか一覧で抽出される。

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

◆関連語検索

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

関連語検索

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

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

関連語検索

◆属性の転倒

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

N 抽出語 品詞 全体 共起 Jaccard
1 言う 動詞  32 (0.381)  15 (0.556) 0.3409
2 名詞C  10 (0.119)  9 (0.333) 0.3214
3 サ変名詞  13 (0.155)  8 (0.296) 0.25
4 未知語  34 (0.405)  12 (0.444) 0.2449
5 話す 動詞  12 (0.143)  6 (0.222) 0.1818
6 聞く 動詞  6 (0.071)  4 (0.148) 0.1379
7 仕方 ナイ形容  2 (0.024)  2 (0.074) 0.0741
8 装束 名詞  2 (0.024)  2 (0.074) 0.0741
9 大声 名詞  2 (0.024)  2 (0.074) 0.0741
10 入れる 動詞  2 (0.024)  2 (0.074) 0.0741

彦八の話に上手くのせられてしまい、彦八の思惑通りとなってしまう……といった粗筋となっている。

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

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

・[彦八|旦那:嘘/大判]
・[旦那|話:嘘だ/違約]
・[閻魔|交換:装束/罪人]

こういった風にお話を転がしていると分析できる。閻魔は彦八にのせられて装束を交換したところ、その立場まで「装束/罪人」と転倒してしまう。

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

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

◆類似度行列

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

類似度行列

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

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

◆多次元尺度構成法

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

多次元尺度構成法

彦八が地獄に送られたくだりに関連したキーワードを指定したところ、「娑婆」が離れた位置にプロットされた。

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

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

◆自己組織化マップ

[コーディング単位]は[文]で固定。

自己組織化マップ

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

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

◆トピックの推定

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

トピックの推定

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

トピックの推定・文書検索

◆ベイズ学習による分類

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

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

ベイズ学習による分類

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

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

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

◆参考文献

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

|

« 応援チケットを使い切る | トップページ | 昔話の計量テキスト分析――西行法師 »

昔話」カテゴリの記事