概要
僕は英語が苦手なので、英語のman
を読むのに時間がかかる。
日本語版を読めば良いのだけれども、苦手な英語に少しでも慣れたいとは思っている。
まずは何と言っても単語力をどうにかせねば。
よし、man
に出てくる回数が多い単語をリストアップして、優先的に覚えるぞー。
つくるもの
ここでは、4つの短いスクリプトを作っていく。
man
のリストを作るman
に出てくる単語を行に分けて出力する- 英単語っぽい行のみに絞る
- 出現回数を数えてソートする
コード
1. manのリストを作る
まずは単語を収集するマニュアルのリストを作る。
下記方針で作成してみる。
- 引数(デフォルト
/usr/share/man/
)のxxxx.番号.gz
が対象のマニュアル - 別名へのリンクになっているものは除く(実体側のみ)
- 出力フォーマットは
セクション番号 ページ名(コマンド名など)
実行結果
> ./listman 1 [ 1 addr2line 1 alias 1 alloc 1 apply 1 apropos . . .
wc -l
した結果では、今回の対象ディレクトリ配下だけでも、10690個のマニュアルがあるらしい。
マニュアルを書く人も、和訳する人も、いつもありがとうございます。
ちなみにセクションごとのマニュアル数の内訳は下記の通り。
(左列がマニュアル数、右列がセクション番号)
579 1 363 2 5874 3 846 4 183 5 12 6 49 7 529 8 2255 9
2. manに出てくる単語を行に分けて出力する
次に、先程のコマンドで作成したリストの各マニュアルの内容から単語を取り出す。
下記手順。
xargs
+man
でマニュアルを開くcol
でman
の制御文字を削除。TABはスペースに置き換えsed
で単語を囲んでそうな記号を空白に置き換えtr
ですべて小文字にへ変換- 空行を削除
実行結果
数字も記号もまだ混じっているが、元ネタはできてそうだ。
> ./listman | ./listword test 1 freebsd general commands manual test 1 name test [ . . .
この処理の途中、なぜか下記のようなエラーが出た。
<standard input>:2: can't open `man3/ibnd_discover_fabric.3': そのようなファイルまたはディレクトリ はありません <standard input>:2: can't open `man3/ibnd_discover_fabric.3': そのようなファイルまたはディレクトリ はありません <standard input>:2: can't open `man3/ibnd_find_node_guid.3': そのようなファイルまたはディレクトリはありません <standard input>:2: can't open `man3/ibnd_iter_nodes.3': そのようなファイルまたはディレクトリはありません <standard input>:2: can't open `man3/ibnd_discover_fabric.3': そのようなファイルまたはディレクトリ はありません
単体なら開けるのだけれども、そもそもエラーのファイル名が変だ。
うーん、理由が良くわかない。
しかし、このファイル数なら今回の目的には影響は小さいだろうということにして、止まらず先に進もう。
3. 英単語っぽい行のみに絞る
下記の単純なルールに合致した行を英単語ということにする。
- 数字・記号を含まない2文字以上の文字列
結果、ハイフンから始まるオプションなども省くことになる。
実行結果
> ./listman | ./listword | ./eitango aa aa aa aa aa . . .
なんだ、aaって。
こんなよく分からない行もたくさん混じっているけど、それら各々の出現回数はそんなに多くはなさそうだ。
全体で集計すれば、それなりの結果が出るんじゃないかな。
4. 出現回数を数えてソートする
出現回数を数えるのには、uniq -c
が大変便利。
実行結果
下記が実行結果。
左列が出現回数、右列が該当単語。
一番出てくる単語は、the
の模様。
> ./listman | ./listword | ./eitango | ./cntword 859520 the 285809 to 231607 is 217532 of 180255 and 132970 in 121622 be 119305 int 107438 for 102961 if . . .
結果を眺めてちょっと思ったのは、freebsd
とか、項目名のdescription
などは、除外してもいいかもなー、と。
マニュアル数分は絶対回数出てくるし。
また、三人称単数、現在進行形、過去形などは分かる範囲で元の単語に置き換えてもいいかも。(*ying -> *y
みたいな)
ちょくちょく被ってる。
だいたい、何でこんな複雑に各単語が変化するルールになったのだろうか。。。
まぁ、気になる人はやってみてねと。
最頻出単語 TOP2000
上記結果のTOP2000を抜粋。
いずれも前述の通り、以下の点には留意されたし。
- コマンド名や固有名詞も含まれている
- 項目名の
description
みたいに、必ず出てくる単語も出現回数はそのまま計上 - 三人称単数、現在進行形、過去形などもそのまま
- オプション名に使われている単語は含んでいない
それにしても、分からない単語あったら結局自分で調べるのは嫌だな。
次はこれを元に和訳くっつける方法を探してみるかな。。。
今日はこんなとこ。
確認環境
PC | Thinkpad X1 Carbon 2nd Gen |
OS | 12.0-RELEASE-p5 |
おしまい。