自分のBlogにおける「ひらがなの出現頻度」を、パソコンを使って調べてみよう!(kanji2na+morogram編、244万文字頻度付き)
(未来:大規模N-gramデータが公開されていた……改正著作権法の施行後に公開されたものらしく、作者提示の利用条件で安心して使えるところも◎。 - 雑記/えもじならべあそび)
(未来:452万文字分の、はてなダイアリー日記内かな連接頻度データ。 - 雑記/えもじならべあそび)
(未言及:Excite Bit コネタ「あいうえおかきくけこ……」一番使われているひらがなはどれ?)
(過去:kakasiとmorogramとその他。)
(参考: http://ash.jp/code/codetbl1.htm )
(参考: http://ash.jp/code/codetbl2.htm )
(未来:「雑記/えもじならべあそび」における、全2,440,461文字についての1〜3文字連接頻度、表計算ドキュメント版。)
動作は未検証(読み返しによる検証のみを行った状態)のため、部分的に間違っているかもしれません。
……さすがに同記事へと3回もトラバするのはどうかと思ったので、今のところこれはストップしています。
元記事の調査では「ある程度のサンプル」に対して「手作業で漢字→かな変換」を行っていたようで。
それに対して、ここでは「膨大なサンプル」に対して「MS-IMEの逆変換機能を使って漢字→かな変換」を行う方法を説明します。
以下の方法を使う場合、変換精度はMS-IMEの逆変換精度そのものとなりますので、手作業で変換処理を行う場合に比べて、変換精度はある程度劣化します。
(今のところ、kakasiとMeCabよりは、若干マシな変換精度が期待できるようです。)
とりあえず、手順を書いていきます。
同じ事を繰り返し書いているところもあります……が、とりあえずはそのままにしておきます。
注)ここから途中までは、「新字新かな文章をつかって作る、かな下し正かな」のためのn-gramを作るためには、使用しません。
別途記事(後に公開予定)に従って操作してください。
作業用のフォルダを作成します。
自身が書いているBlogのログをダウンロードする。
- ここは、各ブログの「ヘルプ」などを参考に、記事やコメント類がひとまとめになった「ログ」をダウンロードしてください。
- このとき、ログにつけるファイル名は、とりあえず【c:\n-gram\export.src】にしておいてください。
Blogログの「文字コード」を、Shift-JISに変換する。
- (メモ)jgawk.exeの都合でShift-JISかEUCしか選択肢がないため、ここではShift-JISに統一することにします。
- 「サクラエディタ」を起動して、【c:\n-gram\export.src】を開く。
- 文字が化けなくなったら、全体を「Ctrlを押しながらA」を押して選択し、「Ctrlを押しながらC」を押して全文をコピーする。
- いったん、サクラエディタを終了する。
- もう一回「サクラエディタ」を開いて、そのまま「Ctrlを押しながらV」を押して、全文を貼り付ける。
- その状態で、【c:\n-gram\export.sjs】という名前を付けて保存する。
- この状態で、たぶん【c:\n-gram\export.sjs】というファイルは「Shift-JIS化されたBlogログ」が入っているはずです。
注)ここまでは、「新字新かな文章をつかって作る、かな下し正かな」のためのn-gramを作るためには、使用しません。
別途記事(後に公開予定)に従って操作してください。
Blogログの中から、半角の英数字や記号類を削除する。
- (メモ)これらの文字を除去しないと、「漢字→かな」変換中に止まってしまうことがあります……。
- 「jgawk」というツールをダウンロードしてから、lhaplusなどを用いてファイルアーカイブを解きます。
- 画面左下の「スタート」ボタンを右クリックして、「エクスプローラ」を選択し起動します。
- (C:)ドライブのフォルダ【n-gram】アイコンを選択し、右側にCドライブ【n-gram】の中身を表示させます。
- 解いたフォルダ「jgawk」の中に入っているファイルを、すべて【c:\n-gram】にコピーします。
- 右側の何もない場所で右クリックし、「新規作成(W)→テキスト ドキュメント」とたどります。
- ファイル名はひとまず、半角英小文字で【sjs2nas.bat】とします。拡張子を変更するかどうかを問われるので、OKを押します。
- 【sjs2nas.bat】を右クリックして「編集(E)」を選択します。
- 以下の内容を、出てきた【sjs2nas.bat】のメモ帳にコピーします。
c: cd \n-gram type export.sjs | jgawk '{gsub(/[!-~]/,"")}{print $0}' > export.nas
漢字をひらがなに変換する。
- 「Kanji2na」をダウンロードし、Lhaplusなどでアーカイブを解きます。
- Kanji2naを起動し、Altメニューの「ファイル(F)→開く(O)」とたどり、ファイル【c:\n-gram\export.nas】を選択します。
- Kanji2naの右上方にある【ふ】というボタンを押して、全文の漢字をひらがなに変換します。処理は数十秒〜数分かかります。
- Kanji2naの右上方にある【か】というボタンを押して、全文のカタカナをひらがなに変換します。処理は数秒〜数十秒で終わるはずです。
- 変換が終わったら、Kanji2naでとりあえずファイル名【c:\n-gram\export.hir】として保存します。
【c:\n-gram\export.hir】の中から、解析のじゃまになる文字を削除する。
- 画面左下の「スタート」ボタンを右クリックして、「エクスプローラ」を選択し起動します。
- (C:)ドライブのフォルダ【n-gram】アイコンを選択し、右側にCドライブ【n-gram】の中身を表示させます。
- 右側の何もない場所で右クリックし、「新規作成(W)→テキスト ドキュメント」とたどります。
- ファイル名はひとまず、半角英小文字で【hir2kna.bat】とします。拡張子を変更するかどうかを問われるので、OKを押します。
- 【hir2kna.bat】を右クリックして「編集(E)」を選択します。
- 以下の内容を、出てきた【hir2kna.bat】のメモ帳にコピーします。
c: cd \n-gram cls @echo process 1/7 o....... type export.hir | jgawk '{gsub(/[!-~]/,"")}{print $0}' > export.na1 cls @echo process 2/7 oo...... type export.na1 | jgawk '{gsub(/[。-゚]/,"")}{print $0}' > export.na2 cls @echo process 3/7 ooo..... type export.na2 | jgawk '{gsub(/[:;‐/\‖|]/,"")}{print $0}' > export.na1 cls @echo process 4/7 oooo.... type export.na1 | jgawk '{gsub(/[゛-〇]/,"")}{print $0}' > export.na2 cls @echo process 5/7 ooooo... type export.na2 | jgawk '{gsub(/[‥-@]/,"")}{print $0}' > export.na1 cls @echo process 6/7 oooooo.. type export.na1 | jgawk '{gsub(/[@-z]/,"")}{print $0}' > export.na2 cls @echo process 7/7 ooooooo. type export.na2 | jgawk '{gsub(/[ァ-熙]/,"")}{print $0}' > export.kna del export.na2 del export.na1
- メモ帳を閉じます。保存するかどうかを聞かれたらOKを選択します。
- ファイル【hir2kna.bat】を右クリックして、「開く(O)」を選択します。処理は数十秒×7回なので、数分かかるはずです。
- この状態で、たぶん【c:\n-gram\export.kna】というファイルは「ひらがなとごく一部の記号のみの内容」が入っているはずです。
注)新字新かなのテキストを処理しているときは、そのまま次に進んでください。
新字正かなのテキストを処理した場合は、次に進む前に、サクラエディタで「export.kna」を開いてから、次の置換処理を行ってください(kanji2na経由で使うMS-IMEが、条件によっては「ゐ」の再変換に失敗して、以下の誤変換が大量に残る場合があります……)。
検索ワード 置換ワード しょゐ かゐ おもうゐ おもゐ いただきゐ いただゐ
morogramを使って集計します。
- 「morogram」をダウンロードして、lhaplusなどでアーカイブを解きます。
- 画面左下の「スタート」ボタンを右クリックして、「エクスプローラ」を選択し起動します。
- (C:)ドライブのフォルダ【n-gram】アイコンを選択し、右側にCドライブ【n-gram】の中身を表示させます。
- 解いたフォルダ「morogram」の中に入っているファイルを、すべて【c:\n-gram】にコピーします。
- 画面左下の「スタート」ボタンを右クリックして、「エクスプローラ」を選択し起動します。
- (C:)ドライブのフォルダ【n-gram】アイコンを選択し、右側にCドライブ【n-gram】の中身を表示させます。
- 右側の何もない場所で右クリックし、「新規作成(W)→テキスト ドキュメント」とたどります。
- ファイル名はひとまず、半角英小文字で【kna2gram.bat】とします。拡張子を変更するかどうかを問われるので、OKを押します。
- 【kna2gram.bat】を右クリックして「編集(E)」を選択します。
- 以下の内容を、出てきた【kna2gram.bat】のメモ帳にコピーします。
- その際、先にアーカイブを解いた中にある「morogram-なんとかかんとかxCJKT.exe」というファイル名が、下記と同一かどうか確認してください。もしも異なる場合は、下からコピーした後で、【該当部分をファイル名に一致するよう修正してから】メモ帳を保存する必要があります。
c: cd \n-gram REM ↓↓↓【morogram-○○○○○○CJKT.exe】は、アーカイブ内にあるファイル名へと変更してください。 morogram-0.7.1xCJKT.exe --g=1,1 --I=sjis --O=sjis export.kna > k1-gram.txt morogram-0.7.1xCJKT.exe --g=2,2 --I=sjis --O=sjis export.kna > k2-gram.txt morogram-0.7.1xCJKT.exe --g=3,3 --I=sjis --O=sjis export.kna > k3-gram.txt REM ↑↑↑【morogram-○○○○○○CJKT.exe】は、アーカイブ内にあるファイル名へと変更してください。 REM ※おそらく、数字の部分がこの例とは異なっているはずです。
- メモ帳を閉じます。保存するかどうかを聞かれたらOKを選択します。
- ファイル【kna2gram.bat】を右クリックして、「開く(O)」を選択します。
- ここでの処理は、「驚くほど長い時間」がかかります。ひらがなのファイル5MB(Shift-JISの全角文字なので250万文字)を集計する場合、一番はじめの「ひらがなの1文字出現頻度」を解析するだけでも
数十分数時間(@Pentium4-2.80GHz)かかります。
- ここでの処理は、「驚くほど長い時間」がかかります。ひらがなのファイル5MB(Shift-JISの全角文字なので250万文字)を集計する場合、一番はじめの「ひらがなの1文字出現頻度」を解析するだけでも
- この状態で、たぶん【c:\n-gram\k1-gram.txt】というファイルは「ひらがなの1文字出現頻度」が入っているはずです。
- この状態で、たぶん【c:\n-gram\k2-gram.txt】というファイルは「ひらがなの2文字連接頻度」が入っているはずです。
- この状態で、たぶん【c:\n-gram\k3-gram.txt】というファイルは「ひらがなの3文字連接頻度」が入っているはずです。
表計算ソフトなどを使って、適当に並べ替えするなどします。
- 表計算ソフトをお持ちでない方は、OpenOffice.orgをダウンロードしてください。
- 時間があれば、この下にうちでの結果を貼ることができるかもしれません。
2007年6月4日18:07:21追記。
1文字のひらがな出現頻度(MS-IME依存)を、うちの日記から抽出した全2,440,461文字から集計した結果が出ました。
(もっとも、一部「ひらがな」じゃないものも混じっていますけど……。)
ちなみに、「ひらがなの1文字出現頻度」だけを集計するために費やした、morogramでの処理時間は、2時間25分33秒でした。
さすがに2文字〜3文字の連接頻度がでるまで待つのは面倒なので、今日は1文字出現頻度だけで取りやめることにします。
その結果を、表計算ソフトで並べ替えたものを掲示します。
順位 | かな | 出現回数 | 出現頻度 | 出現回数累計 | 出現頻度累計 |
---|---|---|---|---|---|
1 | い | 146278 | 5.994% | 146278 | 5.994% |
2 | う | 121425 | 4.975% | 267703 | 10.969% |
3 | ん | 109615 | 4.492% | 377318 | 15.461% |
4 | か | 92790 | 3.802% | 470108 | 19.263% |
5 | し | 88350 | 3.620% | 558458 | 22.883% |
6 | と | 81606 | 3.344% | 640064 | 26.227% |
7 | て | 66030 | 2.706% | 706094 | 28.933% |
8 | の | 64256 | 2.633% | 770350 | 31.566% |
9 | な | 61190 | 2.507% | 831540 | 34.073% |
10 | た | 60009 | 2.459% | 891549 | 36.532% |
11 | は | 57355 | 2.350% | 948904 | 38.882% |
12 | に | 56913 | 2.332% | 1005817 | 41.214% |
13 | き | 55981 | 2.294% | 1061798 | 43.508% |
14 | で | 55558 | 2.277% | 1117356 | 45.785% |
15 | す | 55358 | 2.268% | 1172714 | 48.053% |
16 | く | 54136 | 2.218% | 1226850 | 50.271% |
17 | る | 45345 | 1.858% | 1272195 | 52.129% |
18 | 、 | 45239 | 1.854% | 1317434 | 53.983% |
19 | が | 43231 | 1.771% | 1360665 | 55.754% |
20 | ま | 42344 | 1.735% | 1403009 | 57.490% |
21 | も | 40868 | 1.675% | 1443877 | 59.164% |
22 | こ | 40742 | 1.669% | 1484619 | 60.834% |
23 | っ | 40391 | 1.655% | 1525010 | 62.489% |
24 | じ | 40182 | 1.646% | 1565192 | 64.135% |
25 | つ | 39944 | 1.637% | 1605136 | 65.772% |
26 | り | 39910 | 1.635% | 1645046 | 67.407% |
27 | 。 | 38431 | 1.575% | 1683477 | 68.982% |
28 | ょ | 37089 | 1.520% | 1720566 | 70.502% |
29 | れ | 34310 | 1.406% | 1754876 | 71.908% |
30 | を | 30795 | 1.262% | 1785671 | 73.169% |
31 | ー | 29994 | 1.229% | 1815665 | 74.398% |
32 | お | 29857 | 1.223% | 1845522 | 75.622% |
33 | だ | 29253 | 1.199% | 1874775 | 76.821% |
34 | あ | 29225 | 1.198% | 1904000 | 78.018% |
35 | ら | 26218 | 1.074% | 1930218 | 79.092% |
36 | け | 25925 | 1.062% | 1956143 | 80.155% |
37 | さ | 24984 | 1.024% | 1981127 | 81.178% |
38 | よ | 24625 | 1.009% | 2005752 | 82.187% |
39 | ゅ | 23553 | 0.965% | 2029305 | 83.153% |
40 | ど | 23101 | 0.947% | 2052406 | 84.099% |
41 | ち | 21129 | 0.866% | 2073535 | 84.965% |
42 | … | 20654 | 0.846% | 2094189 | 85.811% |
43 | せ | 20194 | 0.827% | 2114383 | 86.639% |
44 | そ | 20131 | 0.825% | 2134514 | 87.464% |
45 | え | 18628 | 0.763% | 2153142 | 88.227% |
46 | み | 17564 | 0.720% | 2170706 | 88.947% |
47 | ひ | 16895 | 0.692% | 2187601 | 89.639% |
48 | め | 15318 | 0.628% | 2202919 | 90.267% |
49 | ほ | 14793 | 0.606% | 2217712 | 90.873% |
50 | ふ | 14762 | 0.605% | 2232474 | 91.478% |
51 | わ | 14693 | 0.602% | 2247167 | 92.080% |
52 | ば | 13748 | 0.563% | 2260915 | 92.643% |
53 | ろ | 13398 | 0.549% | 2274313 | 93.192% |
54 | や | 12702 | 0.520% | 2287015 | 93.712% |
55 | ゆ | 11171 | 0.458% | 2298186 | 94.170% |
56 | ぶ | 9691 | 0.397% | 2307877 | 94.567% |
57 | び | 9608 | 0.394% | 2317485 | 94.961% |
58 | ぎ | 9278 | 0.380% | 2326763 | 95.341% |
59 | ず | 8352 | 0.342% | 2335115 | 95.683% |
60 | ね | 7380 | 0.302% | 2342495 | 95.986% |
61 | ご | 7326 | 0.300% | 2349821 | 96.286% |
62 | ゃ | 7025 | 0.288% | 2356846 | 96.574% |
63 | む | 7015 | 0.287% | 2363861 | 96.861% |
64 | へ | 6119 | 0.251% | 2369980 | 97.112% |
65 | げ | 6101 | 0.250% | 2376081 | 97.362% |
66 | ぼ | 5624 | 0.230% | 2381705 | 97.592% |
67 | ・ | 5604 | 0.230% | 2387309 | 97.822% |
68 | べ | 5163 | 0.212% | 2392472 | 98.034% |
69 | ぷ | 4800 | 0.197% | 2397272 | 98.230% |
70 | ぜ | 4569 | 0.187% | 2401841 | 98.418% |
71 | ざ | 3787 | 0.155% | 2405628 | 98.573% |
72 | ぐ | 3675 | 0.151% | 2409303 | 98.723% |
73 | ぱ | 3133 | 0.128% | 2412436 | 98.852% |
74 | ぞ | 2890 | 0.118% | 2415326 | 98.970% |
75 | づ | 2538 | 0.104% | 2417864 | 99.074% |
76 | ? | 2311 | 0.095% | 2420175 | 99.169% |
77 | ぴ | 2247 | 0.092% | 2422422 | 99.261% |
78 | ぽ | 2156 | 0.088% | 2424578 | 99.349% |
79 | ぁ | 2032 | 0.083% | 2426610 | 99.432% |
80 | ぇ | 2008 | 0.082% | 2428618 | 99.515% |
81 | ぺ | 1817 | 0.074% | 2430435 | 99.589% |
82 | ぃ | 1789 | 0.073% | 2432224 | 99.662% |
83 | ! | 1698 | 0.070% | 2433922 | 99.732% |
84 | ぉ | 1576 | 0.065% | 2435498 | 99.797% |
85 | 〜 | 1373 | 0.056% | 2436871 | 99.853% |
86 | , | 1111 | 0.046% | 2437982 | 99.898% |
87 | ぬ | 846 | 0.035% | 2438828 | 99.933% |
88 | ぢ | 541 | 0.022% | 2439369 | 99.955% |
89 | ぅ | 519 | 0.021% | 2439888 | 99.977% |
90 | . | 310 | 0.013% | 2440198 | 99.989% |
91 | ― | 127 | 0.005% | 2440325 | 99.994% |
92 | ゎ | 48 | 0.002% | 2440373 | 99.996% |
93 | ゐ | 44 | 0.002% | 2440417 | 99.998% |
94 | ゑ | 42 | 0.002% | 2440459 | 100.000% |
95 | ? | 2 | 0.000% | 2440461 | 100.000% |
(2007年6月5日12:17:48追記:表に「順位・累計出現回数・累計出現頻度」を追加しました)
2007年7月8日12:20:30追記。
【c:\n-gram\k3-gram.txt】の中は9万行ほどのリストになっており、そのまま表計算ソフトでは扱えない*1という大きな問題があります。
そこで、【c:\n-gram\k3-gram.txt】を分割して、表計算ソフトで扱いやすいレベルに分割してみたいと思います。
ただ分割すると後の処理が厄介なので、ここでは「3文字連接の2文字目が同じもの同士を、一つのファイルに抽出する」方法をとることにします。
こうすることにより、「あるかなの前と後に付く文字」という視点で抽出できるので、日本語入力法の設計時や検証時に役立つかもしれませんので。
- 画面左下の「スタート」ボタンを右クリックして、「エクスプローラ」を選択し起動します。
- (C:)ドライブのフォルダ【n-gram】アイコンを選択し、右側にCドライブ【n-gram】の中身を表示させます。
- 右側の何もない場所で右クリックし、「新規作成(W)→テキスト ドキュメント」とたどります。
- ファイル名はひとまず、半角英小文字で【div3gram.bat】とします。拡張子を変更するかどうかを問われるので、OKを押します。
- 【div3gram.bat】を右クリックして「編集(E)」を選択します。
- 以下の内容を、出てきた【div3gram.bat】のメモ帳にコピーします。
c: cd \n-gram rem ↓で下位フォルダを製作します。 md div3gram rem ↓ではすべて、下位フォルダに結果のファイルを出力します。 for %%f in (い う ん か し と て の な た) do jgawk 'BEGIN { FS = "\t"; OFS = "\t" } ;/\t.%%f.\t/{print $0}' k3-gram.txt > div3gram\k3-gram-%%f.txt for %%f in (は に き で す く る 、 が ま) do jgawk 'BEGIN { FS = "\t"; OFS = "\t" } ;/\t.%%f.\t/{print $0}' k3-gram.txt > div3gram\k3-gram-%%f.txt for %%f in (も こ っ じ つ り 。 ょ れ を) do jgawk 'BEGIN { FS = "\t"; OFS = "\t" } ;/\t.%%f.\t/{print $0}' k3-gram.txt > div3gram\k3-gram-%%f.txt for %%f in (ー お だ あ ら け さ よ ゅ ど) do jgawk 'BEGIN { FS = "\t"; OFS = "\t" } ;/\t.%%f.\t/{print $0}' k3-gram.txt > div3gram\k3-gram-%%f.txt for %%f in (ち … せ そ え み ひ め ほ ふ) do jgawk 'BEGIN { FS = "\t"; OFS = "\t" } ;/\t.%%f.\t/{print $0}' k3-gram.txt > div3gram\k3-gram-%%f.txt for %%f in (わ ば ろ や ゆ ぶ び ぎ ず ね) do jgawk 'BEGIN { FS = "\t"; OFS = "\t" } ;/\t.%%f.\t/{print $0}' k3-gram.txt > div3gram\k3-gram-%%f.txt for %%f in (ご ゃ む へ げ ぼ ・ べ ぷ ぜ) do jgawk 'BEGIN { FS = "\t"; OFS = "\t" } ;/\t.%%f.\t/{print $0}' k3-gram.txt > div3gram\k3-gram-%%f.txt for %%f in (ざ ぐ ぱ ぞ づ ? ぴ ぽ ぁ ぇ) do jgawk 'BEGIN { FS = "\t"; OFS = "\t" } ;/\t.%%f.\t/{print $0}' k3-gram.txt > div3gram\k3-gram-%%f.txt for %%f in (ぺ ぃ ! ぉ 〜 , ぬ ぢ ぅ .) do jgawk 'BEGIN { FS = "\t"; OFS = "\t" } ;/\t.%%f.\t/{print $0}' k3-gram.txt > div3gram\k3-gram-%%f.txt
- メモ帳を閉じます。保存するかどうかを聞かれたらOKを選択します。
- ファイル【div3gram.bat】を右クリックして、「開く(O)」を選択します。
- このバッチファイルでは「div3gram」というフォルダを下位に生成し、そこに全ての結果を収容するため、ファイルはすべて【c:\n-gram\div3gram】の中にあります。
- 【c:\n-gram】のなかにはフォルダ【div3gram】が生成されるだけなので、実行後はフォルダ【div3gram】の中身をチェックしてください。
- フォルダ【div3gram】の中に生成されるファイル名は【k3-gram-※ひらがな※.txt】というファイルになっています。
- ※ひらがな※の部分には、替わりに文字が1文字入っていて、そのファイルには「※ひらがな※が2文字目に来る3字連接頻度」のみが収容されることになります。
- ファイルは90個作られるので、驚かないでください……。
2007年7月30日3:23:10追記。
うちの日記で上記処理を行った結果を、表計算ドキュメントの形で公開しています。
→【「雑記/えもじならべあそび」における、全2,440,461文字についての1〜3文字連接頻度、表計算ドキュメント版。】
サンプルがかなり偏っているので、実際に役立つかどうかは不明ですが……「数時間かけて処理する暇なんて無いよ!」という方や、あるいは「偏っていても構わないから、大体の傾向を見てみたい」という方には、おそらく役立つものになると思われます。
*1:たいていは3万行なり6万行なりといった行数制限がある