職業プログラマの休日出勤

職業プログラマによる日曜自宅プログラミングや思考実験の成果たち。リアル休日出勤が発生すると更新が滞りがちになる。記事の内容は個人の意見であり、所属している(いた)組織の意見ではない。

拗促音の文字の割合

以下のtweetたちのようなことがありまして、気になったので、拗促音で使われる小書きの文字「ゃ」「ゅ」「ょ」「っ」を高い割合で含む単語にどのようなものがあるのかを調べてみました。この調査で得られた単語を社名として起業し銀行口座を作ると、取引先の人が困惑するという効果が得られるかもしれません(おすすめはしません🙅‍♀️)


「出勤」は「出金」の変換ミスです😇

結果

最強の単語は以下のようなものたちで、いずれも拗促音を示す文字の割合が約67%でした。擬音語や擬態語になるんですね。

  • ビュッ
  • ギュッ

次点としては、60%を叩き出した以下の単語たちでした。

  • キャッシュ
  • 勅許(チョッキョ)
  • 出処、出所(シュッショ)
  • 出社、出射(シュッシャ)

この記事の続きは、調査方法です。

調査の方針

「日本語の単語の全部のリスト」なんてものは存在しませんので、ある程度のところで諦めるものとします。
私たちが容易に入手可能な単語のリストと言えば、Mecabで使われているIPA辞書だと思います。この調査ではこれを使うものとします。このIPA辞書のソース mecab-ipadic-2.7.0-20070801.tar.gz (ファイル名は、本記事執筆時点)は、Mecabのサイトからダウンロードできます。

この辞書からは、単語のカナ表記が得られますので、ここから拗促音の文字数を出して、元のカナ表記の文字数で割れば、割合が求まることになります。割合が出れば、それで並べ替えて上位を出せば答えが出そうです。

調査の実態

前述のIPA辞書のソースを展開するとさまざまなファイルが出てきますが、拡張子が .csv のものが辞書の本体(だと筆者は考えています)なので、これらを対象に調査をするものとします。

以下のようなコマンドを実行しました。

cat *.csv | \
 iconv -f eucjp -t utf8 | \
 grep -v ' ' | \
 awk -F, '{c=0;for(i=1;i<length($12);i+=3){s=substr($12,i,3);if(s=="ャ"||s=="ュ"||s=="ョ"||s=="ッ"){c++}} len=length($12)/3.0; print $11, $12, len, (c/len), c}' | \
 grep -v ' 0$' | \
 grep -v ' 1$' | \
 sort -k 4 -n -r | \
 head -n 40

すると、以下のような結果が得られました。スペース区切りのデータは以下の順に並んでいます。
1. 漢字混じりの(本来の?)表記
2. カタカナ表記
3. カタカナ表記の文字数
4. カタカナ表記に占める、拗促音を示す文字「ャュョッ」の割合
5. 拗促音を示す文字「ャュョッ」の数

背負う ショッ 3 0.666667 2
ビュッ ビュッ 3 0.666667 2
ギュッ ギュッ 3 0.666667 2
キャッ キャッ 3 0.666667 2
ひゅっ ヒュッ 3 0.666667 2
っきゃ ッキャ 3 0.666667 2
ちゃう チャッ 3 0.666667 2
ちゃう チャッ 3 0.666667 2
じゅっ ジュッ 3 0.666667 2
じゃう ジャッ 3 0.666667 2
しょう ショッ 3 0.666667 2
しゅっ シュッ 3 0.666667 2
っす ッショ 3 0.666667 2
じゃ ジャッ 3 0.666667 2
十 ジュッ 3 0.666667 2
キャッシュ キャッシュ 5 0.6 3
らっしゃる ラッシャッ 5 0.6 3
しゅっしょ シュッショ 5 0.6 3
しゅっしゃ シュッシャ 5 0.6 3
おっしゃる オッシャッ 5 0.6 3
おっしゃる オッシャッ 5 0.6 3
うっちゃる ウッチャッ 5 0.6 3
しゅっ社 シュッシャ 5 0.6 3
しゅっ所 シュッショ 5 0.6 3
勅許 チョッキョ 5 0.6 3
出社 シュッシャ 5 0.6 3
出所 シュッショ 5 0.6 3
出射 シュッシャ 5 0.6 3
出処 シュッショ 5 0.6 3
仰る オッシャッ 5 0.6 3
キュキュキュっ キュキュキュッ 7 0.571429 4
Cha−Cha−Cha チャチャチャ 6 0.5 3
しゃっちょこ張る シャッチョコバッ 8 0.5 4
しゃっちょこばる シャッチョコバッ 8 0.5 4
キャッチャー キャッチャー 6 0.5 3
カッカッカッ カッカッカッ 6 0.5 3
ちゃっきょう チャッキョウ 6 0.5 3
しょっちゅう ショッチュウ 6 0.5 3
しょっちゅう ショッチュウ 6 0.5 3
しゅっちょう シュッチョウ 6 0.5 3

動詞のカナ表記の末尾が「ッ」となっているのは活用形を上手く取り扱うためのものでしょうか? 今回の調査では動詞については終止形で評価したかった*1ので、前述の「結果」には載せませんでした。

惜しくも60%には届きませんでしたが、約57%を記録した「キュキュキュっ」は、かなり面白いなと思いました。こういう単語に出会いたくて今回の調査をやりました😃

コマンドの解説

cat *.csv
カレントディレクトリにある全てのCSVファイルの中身を繋げて、stdoutに吐きます。

iconv -f eucjp -t utf8
ここでは、CSVファイルの中身は EUC-JP で書かれているので、扱いやすい UTF-8 に変換しています。

grep -v ' '
全角スペースを含む語を除外しています。例えば映画の名称などが該当します。もはやこれは「単語」ではないので、調査の対象外です。

awk -F, '{c=0;for(i=1;i<length($12);i+=3){s=substr($12,i,3);if(s=="ャ"||s=="ュ"||s=="ョ"||s=="ッ"){c++}} len=length($12)/3.0; print $11, $12, len, (c/len), c}'
これは長いので要素ごとに。

  • -F, : 入力がカンマ区切りであることを宣言しています。
  • $11 : CSVの11番目のフィールド、その単語の本来の表記です。
  • $12 : CSVの12番目のフィールド、カタカナ表記です。
  • 変数 c : その単語のカナ表記に含まれる、拗促音を示す文字「ャュョッ」の数を示します。forループの中で数えています。
  • 変数 s : その単語のカナ表記を1文字ずつ取り出しています。UTF-8において、カタカナ(というかほとんどの日本語の文字)は3bytesであることを利用してforループを回しています。
  • 変数 len : その単語のカナ表記の文字数です。 length($12) だとUTF-8でのbyte数になるので、3で割っています。

grep -v ' 0$'
grep -v ' 1$'
拗促音を示す文字「ャュョッ」が1個も含まれない単語と、1文字のみ含む単語を除外しています。

sort -k 4 -n -r
出力の4フィールド目、つまりカタカナ表記に占める、拗促音を示す文字「ャュョッ」の割合で降順で並べ替えています。

head -n 40
先頭40行、つまり上位40単語のみを出力しています。

もっとも多くの小書き文字を含む単語は?

上記のコマンドの sort のパラメータを変えるだけで、小書きの文字数でソートさせることができます。その結果得られたのは…「中退共」で知られる「中小企業退職金共済事業本部」の前身 中小企業退職金共済事業団 チュウショウキギョウタイショクキンキョウサイジギョウダン で6文字の含有でした!「中小企業退職金共済事業本部」も6文字の含有ですけれども、これは辞書に登録されていなかったようですね😅

環境情報

さいごに

awk力を上げたいです。

*1:後付けルール😇