電子竹林:Blog2

Tech関係、はてなダイアリーから移転済み...

プログラミング英語検定の単語リストで遊んでみる (1)

概略

  • プログラミング英語検定の単語リストで遊んでみる、UNIXコマンドだけで遊んでも色々できて面白い

詳細

accept   【動詞】受諾する
access  【動詞/名詞    アクセスする /アクセス 
account 【名詞】    アカウント、口座 
...
  • どういうコーパスから選ばれているのか分からないけど、とりあえずmanコマンドの文章を対象としてみる。manの説明文全体で検索する時は、"man -K foo"で行う事が出来るが、非常に遅い。
  • 代わりに直接grepする方法が一般的。manのファイルのあり場所は、"man -w foo"で分かるが、例えば↓の様になる(macOSの例だが大体このあたり)。
$ man -w ls
/usr/share/man/man1/ls.1
$ cat `man -w ls`
.\" Copyright (c) 1980, 1990, 1991, 1993, 1994
...
  • このls.1はman用の形式で書かれている事が分かる。また、*.gzと圧縮されている場合もあるので、grepの代わりにzgrepを使い、セクション1(コマンド)のmanは"/usr/share/man/man1/*"を対象にする。
  • manのセクション1(コマンド)を対象にアドバンス300語の出現頻度を見てみると↓の様になる。結果はmacOSのもの、場合により多少違う。
$ awk '{system("/bin/echo  -n " $1  "; zgrep " $1 " /usr/share/man/man1/* | wc -l " )}' adv300.txt
abstract     134
accessibility       3
accessible     212
...
  • /bin/echoを使っている理由は、単にechoだとShell builtin commandsが使われてオプションの-nが無効になるため。これは面倒くさいバグを生み出すので注意。builtinについては"man builtin"すると多少分かる。
  • この結果を、ベーシック300、アドバンス300、前提英単語100、それぞれについてbasic300_man1.txt、adv300_man1.txt、basicbasic100_man1.txtとしてGitHub - zom-1/Programming_Englishに入れておいた。
  • 出現頻度の低い単語を見てみる。アドバンス300のman1の出現頻度を見るには↓の様にする。
$ sort -k 2 -n adv300_man1.txt
mock       2
unauthorized       2
accessibility       3
...
  • "sort -k 2 -n "は二番目のフィールドをキーとして数字としてソートするという意味。"mock"や"unauthorized"は意外に少ないが、やはりman1はUNIXのコマンドだから出番は少ない単語なのだろう。具体的に文章を見たい時には↓の様にすれば具体的な文章が分かる。
$ zgrep unauthorized /usr/share/man/man1/*
/usr/share/man/man1/cancel.1.gz:Administrators wishing to prevent unauthorized cancellation of jobs via the \fI\-u\fR option should require authentication for Cancel-Jobs operations in
/usr/share/man/man1/keytool.1:protected format to prevent unauthorized access.
  • 逆に出現頻度が高い順に単語を見るには、↓の様にする。'sort -r"は降順のソート。hash、compileなど一般には出てこない単語が上位なのがいかにもプログラム英語だと分かるのが面白い。
$ sort -k 2 -n -r adv300_man1.txt 
hash    4161
handle    4093
compile    3176
...
  • 単語帳の様に使うのならランダムな出題が必要になってくる。sort -R でランダムにソート(?)出来るので、↓の様にすれば10個の単語だけを表示してくれる。cut -f 1は最初のフィールド、つまり単語だけを出力する。
$ sort -R adv300.txt | head -n 10 | cut -f 1
failure
digit
notify
...
  • cut -f 1,3とすると、第1,3フィールドを出力するので、単語と意味を出力する。
$ sort -R adv300.txt | head -n 10 | cut -f 1,3
decode  デコードする
minimum 最小の
latency 待ち時間
...

Links

progeigo.org