« 昔話の計量テキスト分析――彦八 | トップページ | 錦織選手とノドグロ »

2026年5月 4日 (月)

昔話の計量テキスト分析――西行法師

◆はじめに

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

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

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

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

◆ファイル

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

ダウンロード - ca_002_saigyohoshi.xlsx

ダウンロード - ca_002_codingrules.txt

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

※「H5」とはHTMLでいうところのヘッダー(見出し)・レベル5で本文に相当すると考えればよい。
※[コーディング単位]は「文/段落/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)から点線が伸び交差した箇所が原点となる。原点から離れるほど特徴的なキーワードだと分析される。

原点付近には「花」「家」「咲く」といったキーワードがプロットされている。離れた位置にプロットされているのは「西行法師と小野小町」より「小野小町」「茶屋」、「西行法師」より「柿本人麿」「野原」「短冊」、「西行歌くらべ」より「暑い」「休む」「修行」といった辺りである。

◆解釈

いずれも西行が歌くらべに負けてしまうお話である。これも主人公が西行であること以外は異なるストーリー展開となるので、共通するキーワードは多くない。

◆階層的クラスター分析

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

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

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

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

◆クロス集計

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

クロス集計

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

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

マップとして描画したところ、「小野小町」「茶屋」といったキーワードの残差が大きく(濃く)表示される結果となった。バブルとしては「鳴門」が大きく描画された。

◆KWICコンコーダンス

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

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

◆関連語検索

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

関連語検索

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

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

関連語検索

◆属性の転倒

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

N 抽出語 品詞 全体 共起 Jaccard
1 名詞C  4 (0.067)  3 (0.231) 0.2143
2 暑い 形容詞  4 (0.067)  3 (0.231) 0.2143
3 飲む 動詞  5 (0.083)  3 (0.231) 0.2
4 お茶 名詞  3 (0.050)  2 (0.154) 0.1429
5 知る 動詞  3 (0.050)  2 (0.154) 0.1429
6 歩く 動詞  3 (0.050)  2 (0.154) 0.1429
7 名詞C  5 (0.083)  2 (0.154) 0.125
8 聞く 動詞  5 (0.083)  2 (0.154) 0.125
9 言う 動詞  6 (0.100)  2 (0.154) 0.1176
10 名詞C  6 (0.100)  2 (0.154) 0.1176

・「ぬ」の結果上位一覧

N 抽出語 品詞 全体 共起 Jaccard
1 重荷 名詞  1 (0.017)  1 (1.000) 1
2 駄賃 名詞  1 (0.017)  1 (1.000) 1
3 道ばた 名詞  1 (0.017)  1 (1.000) 1
4 昼寝 サ変名詞  2 (0.033)  1 (1.000) 0.5
5 負う 動詞  2 (0.033)  1 (1.000) 0.5
6 名詞C  4 (0.067)  1 (1.000) 0.25
7 詠む 動詞  12 (0.200)  1 (1.000) 0.0833
8 思う 動詞  15 (0.250)  1 (1.000) 0.0667
9 西行 人名  20 (0.333)  1 (1.000) 0.05

西行は旅先で歌を詠むものの、歌比べでどうしても負けてしまう……といった粗筋となっている。

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

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

・[西行|歌くらべ:詠む/負ける]
・[小野小町|先の句:聞き出す/勝つ]
・[宿|西行:老人/人麿]

こういった風にお話を転がしていると分析できる。鳴門の音は歌を詠むことで封じられ「大きな/止まる」と転倒してしまう。

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

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

◆類似度行列

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

類似度行列

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

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

◆多次元尺度構成法

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

多次元尺度構成法

西行が歌くらべで負けてしまうくだりに関連したキーワードを指定したところ、「亀」が離れた位置にプロットされた。

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

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

◆自己組織化マップ

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

自己組織化マップ

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

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

◆トピックの推定

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

トピックの推定

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

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

◆ベイズ学習による分類

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

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

ベイズ学習による分類

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

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

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

◆参考文献

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

|

« 昔話の計量テキスト分析――彦八 | トップページ | 錦織選手とノドグロ »

昔話」カテゴリの記事