0
1

More than 1 year has passed since last update.

青空文庫を使って、日本語でよく使われる子音をカウントしてみた

Last updated at Posted at 2021-12-18

TL;DR

  • 日本語でよく出てくる子音が何なのか気になった
  • 青空文庫のテキストデータを使ってカウントしてみた
  • 子音単体だと k が多くて、調音位置でいうと歯茎音が多かった。

きっかけ

私、元々大学院まで言語学研究室に居て日本語の文法を研究しておりました。

先日院生時代の友人がこのツイートを紹介して「やっぱり歯茎音が無標なのか」1と言っていまして、「でも日本語ではどうなんだろうな?」と気になったのです。
Wikipediaだと普通の日本語の文章じゃない箇条書きや外国語も大量に混入してくるので、青空文庫のテキストデータを活用してみることにしました。

集計した結果

というわけで早速日本語に出てくる子音の集計結果。多い順。

子音 出現数 備考
k 31,661,222
t 27,074,053
n 25,796,136
r 21,022,666
m 17,144,365
s 13,053,226
ʃ 11,926,160 「シ」の子音
d 10,568,933
g 9,496,824
ɲ 9,019,203 「ニ」の子音。「ニ」「ジ」「チ」の直前の「ン」もこれ
w 7,836,892
h 7,273,092 ちょっと面倒だったので「ファ」は全部h扱いにしてしまいました・・・
j 6,167,702 ヤ行の子音
b 4,836,853
t͡s 4,704,255 「ツ」の子音
d͡ʒ 4,320,056 「ジ」の子音
t͡ʃ 3,929,212 「チ」の子音
N 2,876,175 語末や母音などの前の「ン」
z 2,806,214
ŋ 1,945,590 か行・が行の前の「ン」。鼻濁音はカウントできないので全部g扱いに。
p 772,335
v 108 「ヴ」の出現回数です

これを調音位置で分類すると・・・(←これが本題だった)

調音位置 頻度 比率 対応する子音
両唇 30,590,553 13.6% p, b, w, v
歯茎 125,200,911 55.8% t, n, r, s, ʃ, d, t͡s, d͡ʒ, t͡ʃ, z
軟口蓋 50,376,728 22.5% k, g, h, ŋ
硬口蓋 15,186,905 6.8% ɲ, j
その他 2,876,175 1.3% N

おお、たしかに歯茎音が圧倒的!
でも単独の子音でいうと k が多いんですね。
(hは軟口蓋扱いでいいのかとか言いたいことは色々あると思いますが・・・)

Qiitaなのでコードも載せておこう

ソースコードはこちらにおいてます。
https://github.com/moriwo/aozorabunko_mining

やっていることとしては、青空文庫の各ファイルに対して、

  1. 読み込んで書誌情報等を削除
  2. fugashi を使って読みがな(カタカナ)を取得
  3. カタカナからローマ字に自前で変換して、子音の数をカウント

というだけです。
ただ、この「ローマ字への変換」にはいくつか注意点がありまして、そこをどうにかしているのが以下のメソッドです。

def kana_to_phonemes(s: str):
    p = list("".join(phonemes[c] for c in s))
    for i in range(0, len(p)):
        if p[i] == 'N':
            if i+1 >= len(p):
                # 文末の「ん」はNとする
                break
            elif p[i+1] in 'kg':
                # 軟口蓋音の前の「ん」はng
                p[i] = 'G'
            elif p[i+1] in 'ztcdnr':
                # 歯茎音の前の「ん」はn、ただしサ行の前はN
                p[i] = 'n'
            elif p[i+1] in 'YZC':
                # 硬口蓋音の前の「ん」はY (nj)
                p[i] = 'Y'
            elif p[i+1] in 'pbmv':
                # 両唇音の前の「ん」はm ※なお日本語にfは認めません(めんどいから・・・)
                p[i] = 'm'
            elif p[i+1] in 'aiueojhwsSN':
                # 母音、半母音、サ行、は行の前の「ん」は鼻母音化のNとする
                # N の前のNは面倒なのでNのままにする
                pass
            else:
                raise # 想定できてない場合エラーに
    return p

ここで何をやっているかといいますと、日本語の「ン」は実は直後に来る文字によって音が違うんですね。
日本語話者は人生で一度は必ず「Shimbashi」なのか「Shinbashi」なのか気になって眠れない夜があります。
マ行やパ行、バ行の前の「ん」は m だし、タ行などの前の「ん」は n です。
その他色々なバリエーションが「ん」にはあるので、それをどうカウントするかがキモとなります。
細かいことは、ここらへんのサイトを見ると面白いです。
https://ipa-mania.com/japanese-n/

果たして

この記事はQiitaに書く種類の記事だったのか?


  1. ざっくり一般用語に直すと、「ほっとくと舌を歯の根元あたりに付けて出す音が多いんだな」くらいの意味です。 

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1