スキップしてメイン コンテンツに移動

日本語文章の1文字置きの2-gram頻度の調べ方


JISかなより楽な新しい日本語キー配列を一つ覚えられないかなといろいろ物色し、薙刀式配列を開発している大岡俊彦氏のブログも読んでいたのだけど、 【薙刀式】1文字置きの頻度転がってないかなあというエントリを見かけた。
割と簡単に数えられそうな気がしたのでやってみた。
サンプル文章として使ったのは2月1日から2月9日までの大岡俊彦氏のブログのタイトルと本文、26,827文字(改行・スペース込み、geditエディタが数えたもの)。Linux上で処理してしまったのでWindowsではここまで簡単に進まない。
まずはkakasiを使って漢字をひらがなに変換しておく。

$ kakasi -JH -KH -iutf8 < ブログの文章.txt > ひらがな文章.txt

ひらがなに直したデータはこんな感じ。ひらがな文章.txt(ダウンロード)。ここでエディタから読めない文字があると警告が出ていたけどとりあえず無視して進む。

ひらがなに変換した文章を1文字置きに2文字づつ出力する自作rubyスクリプトに通す。更にパイプで五十音順並べ替え、カウント、個数順並べ替えと既製の標準的なUNIXコマンドを使って処理する。

$ ruby ichimoji.rb < ひらがな文章.txt | sort | uniq -c | sort -nr > 結果.txt

それで得られた結果がこれ。結果.txt(ダウンロード)
[LF]という文字列は改行を表している。合計31,452個の組み合わせとなった。Excelなど表計算ソフトで読み込む場合は8カラムの固定幅データとしてインポートするといい。
改行の絡むものは除いて、トップ20はこのような顔ぶれ。

131, てる, 0.42%
121, な。, 0.38%
106, うう, 0.34%
104, しい, 0.33%
98, しう, 0.31%
94, のん, 0.30%
91, いい, 0.29%
89, なか, 0.28%
87, っい, 0.28%
87, うん, 0.28%
83, んう, 0.26%
83, かな, 0.26%
82, の、, 0.26%
82, とう, 0.26%
81, らい, 0.26%
79, んい, 0.25%
78, んん, 0.25%
77, じう, 0.24%
75, い。, 0.24%
71, たし, 0.23%


上記で使った1文字置きに2文字ずつ出力するのに使ったスクリプトはこれ。ichimoji.rb(ダウンロード) 。素のWindowsでも使える言語で書ければよかったのだけど、とりあえずRuby。最初はひらがな化から集計まで全機能入りで作ろうと思ったのだけどさっさと結果が見たくなってやめてしまった。WindowsならPowerShellで似たようなことができそう。

 追記
青空文庫より他のサンプル。(リンク先に数えた結果のテキストファイル)
谷崎潤一郎著「細雪 上巻」の場合
吉川英治著「私本太平記(一) 」の場合
細雪の場合最多の「ゆこ」 は登場人物「ゆきこ」によるもの。読売新聞の場合「昨日」「今日」により「京」「強」「求」などにより「きう」が上位に食い込んできたりする。新聞屋さんって記事書く時「きのう」「さくじつ」どっちで打ってるのだろう?でもよく見たら昨日今日はほとんど使われていなかった。
どんなサンプルデータを使えば良いのか、選ぶのは難しそう。 
更に追記
プロジェクト杉田玄白から
Eric S. Raymond 著、山形浩生訳「伽藍とバザール」の場合 https://cruel.org/freeware/cathedral.html
カタカナ語の多いサンプルとして選んでみた。

コメント