« 昔話の計量テキスト分析――大きな話(単話分析) | トップページ | 昔話の計量テキスト分析、中間報告 »

2026年4月28日 (火)

昔話の計量テキスト分析――えんこうの一文銭(単話分析)

◆はじめに

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

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

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

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

◆ファイル

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

ダウンロード - 048_enkonoichimonsen.txt

ダウンロード - 048_codingrules.txt

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

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

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

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

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

◆あらすじ

・「えんこうの一文銭」(未来社『石見の民話』)
昔あるところに川の東の岸と西の岸に一軒ずつ家があって、それぞれ爺さんと婆さんが住んでいた。東岸の爺さんは正直者で一匹の猫を飼っていたが貧乏なので十分食べさせることができなかった。ところがある日、竜宮さまがえんこうの一文銭をやるから天井の裏へ下げて祀れとお告げになった。朝起きてみると果たして東岸の爺さんの枕元にえんこうの一文銭がおいてあった。その一文銭を天井の裏に吊すと、これまで貧乏だった東岸の爺さんの家は日増しに身上が良くなった。反対に欲張りな西岸の爺さんの家は次第に身上が悪くなっていった。女はとかく口さがなく東岸の爺さんがえんこうの一文銭を授かってから日ごと身上が良くなったということを西岸の婆さんに話したので、これを聞いた西岸の爺さんは早速東岸の家へ行ってえんこうの一文銭を貸してくれないかと頼んだ。正直者の東岸の爺さんは長い間は貸せられないが一時なら貸してあげようと言って貸した。西岸の爺さんはその一文銭を持って帰って天井裏に吊しておくとその日から身上が次第に盛り返してきた。東岸の家は一文銭を貸した日からまた昔のように目に見えて貧乏になっていった。そこで西岸の爺さんに貸した一文銭を返してくれと催促にいったが、何とか理由をつけてどうしても返さないので、東岸の爺さんは困って戻ってきた。東岸の婆さんは考えあぐねた末に家の飼い猫に一文銭をとって来るようにいいつけた。猫は川が渡れないので困っていると、一匹の犬が来た。犬に訳を話して川を背負って渡してくだされと頼んだので、猫は犬に負われて川を渡ることができた。猫が西岸の家に行ってみると、鼠がいたので猫はすかさずこの鼠を捕って、お前の命を助けてやるから天井裏にある一文銭を取ってこいと頼んだ。鼠は天井裏に上がって一文銭を落として持ってきた。猫はそれを貰って、また犬に川を渡してもらうように頼んだ。犬の背に負われて川の中程まで来たとき、犬がくわえた物を落とすなよと言ったので猫はハイと返事した。その調子で一文銭が水の中へ落ちた。猫は泣かんばかりになって思案した。そうしたら空から一羽の鳶が下りて来たので猫は鳶を狙って咥えた。そして命を助けてやるからこの川に落ちた一文銭を探してこいと頼んだ。鳶は川の底にあるものは見えないので、川の上を泳いでいた鵜を咥えて、お前は水の底にいる鮎でも捕るのだから水の底に落ちた一文銭を拾ってくれと頼んだ。そこで鵜は川の端を上下したがちっとも見えないので大きな鮎を咥えてお前の命をとるのではない。この川に落ちているえんこうの一文銭を取ってくれ。お前は水の底を歩いて蟹とえびでさえ餌にするくらい水の底のことは達者だからと頼んだ。鮎は水の底を泳いでいくと果たしてえんこうの一文銭があった。それを拾い上げて鵜に渡した。鵜はそれを鳶に渡して鳶はそれを猫に渡した。猫はとうとう水の底から一文銭を拾い上げることができたので、喜んで歌にうたった。「猫に鼠に空たつ鳶に 川で鵜の鳥、鮎の魚」。犬は川を渡してくれたが大切な一文銭を水の中に落とすようなことをさせたので、この歌の仲間に入れていないそうだ。猫はえんこうの一文銭を持って帰って爺さんに渡したので東岸の家はまた次第に身上がよくなった。


◆コーディングルール

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

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

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

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

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

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

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


*東岸一家
'東岸の爺さん' or '東岸の婆さん'
*西岸一家
'西岸の爺さん' or '西岸の婆さん'
*えんこう
'えんこう'
*猫
猫 or 飼い猫
*川
川 or 水
*一文銭
'一文銭'
*天井裏
'天井の裏' or '天井裏'
*祀る
祀る or 吊るす
*返さない
返す and ない
*とる
とる or 取る or 拾う
*捕る
捕る or 咥える
*良い
良い or 上がる

*ない
ない
*ぬ

*ん

*るな
'るな'
*なよ
'なよ'
*るまい
'るまい'

*東

*西
西
*岸

*家

*正直
正直
*貧乏
貧乏
*竜宮
竜宮
*お告げ
お告げ
*身上
身上
*悪い
悪い
*女

*口さがない
口さがない
*話す
話す
*貸す
貸す
*催促
催促
*いいつける
いいつける
*渡る
渡る
*犬

*鼠

*返事
返事
*落とす
落とす
*鳶

*鵜

*底

*鮎

*命

*渡す
渡す
*歌


◆共起ネットワーク

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

※[強い共起関係ほど濃い線に]にチェックを入れる。

Jaccard係数が0.3以上はかなり強い共起関係にあることを示しているが、分析対象となる元データの文字数が少ないため係数が高めに出てしまう傾向にあるため、こうしている。

※Jaccard係数は共起関係(※ある言葉に続いて出てくる関係)の強さを表し 0≦係数≦1 の範囲の値をとる。

【Jaccard係数】
・0.1 →関連あり
・0.2 →強い関連あり
・0.3以上 →とても強い関連あり
※ただし、あくまで目安であって絶対ではない。

共起ネットワーク

ざっと確認したところ、頻出するキーワードが中央のサブグラフ(バブルが島状に集まった一塊)に表示されている。概ねストーリーの展開に沿った形となっている。

※なお、各バブル間の距離や配置に意味はない。

◆対応分析

・[コーディング単位]を[文]に設定する。

・[コード×文書 集計単位:]を[文]に設定する。

※[バブルプロット]にチェックを入れている。これらは文字の重なりを極力避けるためである。
※文字が重なって読みづらい場合、オプション画面の[コード選択]で不要なコードのチェックを外してもよい。

対応分析

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

原点付近には「一文銭」「とる」「ない」といったキーワードがプロットされている。単話分析の場合、原点に近い方が頻度が高くむしろ重視すべきかもしれない。一方、「竜宮」「祀る」「お告げ」は離れた位置にプロットされており、特徴的なキーワードとされている。

◆解釈

一文銭を巡るお話なので「一文銭」が中心にプロットされる形となっている。

◆階層的クラスター分析

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

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

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

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

◆クロス集計

・単話分析ではクロス集計は「利用不可」となる。

◆KWICコンコーダンス

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

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

◆関連語検索

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

関連語検索

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

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

関連語検索

◆属性の転倒

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

N 抽出語 品詞 全体 共起 Jaccard
1 貸す 動詞  4 (0.121)  3 (0.375) 0.3333
2 東岸 地名  9 (0.273)  4 (0.500) 0.3077
3 爺さん 名詞  10 (0.303)  4 (0.500) 0.2857
4 名詞C  11 (0.333)  4 (0.500) 0.2667
5 困る 動詞  2 (0.061)  2 (0.250) 0.25
6 正直 形容動詞  2 (0.061)  2 (0.250) 0.25
7 見える 動詞  3 (0.091)  2 (0.250) 0.2222
8 未知語  3 (0.091)  2 (0.250) 0.2222
9 名詞C  4 (0.121)  2 (0.250) 0.2
10 名詞C  5 (0.152)  2 (0.250) 0.1818
11 名詞C  5 (0.152)  2 (0.250) 0.1818
12 西岸 名詞  5 (0.152)  2 (0.250) 0.1818

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

N 抽出語 品詞 全体 共起 Jaccard
1 ハイ 名詞  1 (0.030)  1 (1.000) 1
2 中程 名詞  1 (0.030)  1 (1.000) 1
3 名詞C  1 (0.030)  1 (1.000) 1
4 返事 サ変名詞  1 (0.030)  1 (1.000) 1
5 言う 動詞  2 (0.061)  1 (1.000) 0.5
6 負う 動詞  2 (0.061)  1 (1.000) 0.5
7 来る 動詞  2 (0.061)  1 (1.000) 0.5
8 落とす 動詞  3 (0.091)  1 (1.000) 0.3333
9 名詞C  5 (0.152)  1 (1.000) 0.2
10 名詞C  11 (0.333)  1 (1.000)

0.0909

身上の上向く一文銭を貸したところ返そうとしないため、猫を派遣する……といった粗筋となっている。

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

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

・[東岸の爺さん|一文銭:貧乏/裕福]
・[猫|一文銭:落とす/拾う]

こういった風にお話を転がしていると分析できる。

猫が一文銭「落とす/拾う」と転倒することで動物たちのリレーがはじまる。

◆類似度行列

・[コーディング単位]は[文]は固定。[集計]をクリックするとJaccard係数がマトリクス形式で確認できる。

類似度行列

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

◆多次元尺度構成法

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

多次元尺度構成法

猫が犬の背に乗って川を渡るくだりに関連したキーワードを指定したところ、「渡る」が離れた位置にプロットされた。

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

※実行すると指定したキーワードの幾つかが除外されるとメッセージが表示される。テキストのボリューム不足のためか無償版の仕様によるものか判断がつかない。

◆自己組織化マップ

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

自己組織化マップ

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

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

◆トピックの推定

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

トピックの推定

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

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

◆ベイズ学習による分類

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

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

ベイズ学習による分類

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

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

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

◆参考文献

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

|

« 昔話の計量テキスト分析――大きな話(単話分析) | トップページ | 昔話の計量テキスト分析、中間報告 »

昔話」カテゴリの記事