2019年1月6日日曜日

SICP (『計算機プログラムの構造と解釈』) の word count を量る

SICP (Structure and Interpretation of Computer Programs, 邦訳『計算機プログラムの構造と解釈』) の word count を測った。これは多読に関するトピックであり、この教科書の分野である計算機科学とは何の関係もないことをお断りしておく。まあ、この分野の教科書を使って多読がしたい人 (俺とか) には有用かもしれないが、これが有用になる人はおそらくいないだろう。やったことは単純で、公開されているWeb版からHTMLのいらないところを削ってコマンド wc -w にかけるだけである。 図や注釈は全て除いたが、 Scheme のコードは html から除けないために word count に含まれている。
#!/bin/sh

for i in `seq 9 35`
do
    # curl https://mitpress.mit.edu/sites/default/files/sicp/full-text/book/book-Z-H-$i.html > book-$i.html
    recode HTML..UTF-8 < book-$i.html\
 | sed -En '/<body>/,/<hr>/{s/(&npsp;|Â|Ã)//g;/<table/,/<\/table>/d;s/<[^>]*>//g;p;}'\
 | wc -w > wc-$i
done
cat wc-* | awk -Ft '{sum+=$1}END{print sum}'
ちなみにこの結果は
$ ./count.sh
190643
であり、約 19 万語である。

※(2019-01-10追記) Scheme コードを除いた。それに伴い消しすぎた箇所を復活させる。たった3箇所なので手動で修正できた。
for i in `seq 9 35`
do
    # curl https://mitpress.mit.edu/sites/default/files/sicp/full-text/book/book-Z-H-$i.html > book-$i.html
    recode HTML..UTF-8 < book-$i.html\
 | sed -En '/<body>/,/<hr>/{s#(&npsp;|Â|Ã)##g;/<table/,/<\/table>/d;s/<[^>]*>//g;
            /We can generate more and more terms of the stream to get better and/,/exercise 3\.64\.\)/p; # text 1
            /This gives us a stream of better and better approximations to/,/between 3\.284 and 3\.017/p; # text 2
            /^\(define x 3/,/\(define x 3\) is not a combination\.\)/p; # text 3
            /^\(define/,/^$/d;p;}'\ # deleting code
 | wc -w > wc-$i
done 
cat wc-* | awk -Ft '{sum+=$1}END{print sum}'
この実行結果は
$ ./count.sh
145091
なのでこの値をそのまま使うことにする (まだ読んでないけど)。 コードはこの差分なので、語数にして4.6万語、つまりまあ1/4から1/5はコードだというわけだ。

0 件のコメント:

コメントを投稿