2022年3月29日火曜日

Wordle(3)

Wordle(2) からの続き

Wordleは英語の勉強になる。簡単な5文字の英単語でも知らないものがたくさんあって,自分の語彙力はやはり10歳並みだということが確かめられる。そのため,辞書の助けがないと5-6回で答えに辿り着くことは出来ない。

巷には,Wordle Word Finderなどというツールも登場しているが,これでは英語学習の役には立たない。それでも,5文字の英単語のリストを収集したいという目的のために,次のようなツールを作った。与えられたテキストファイルあるいはpdfやhtmlファイルをテキストに変換したものから,perlのワンライナーで n 文字の単語を切り出すものだ。

pandocは汎用の文書型変換ツールだけれど,pdfやhtmlからテキストを取り出すという想定がない。あくまでも整形された文書変換ツールだからだ。そこでテキストファイルの取り出しには,pdftotextやtextutilなどのコマンドに任せることにした。また,シェルスクリプトの引数はperlのワンライナーにそのまま送れないので, -- -perl_var=\$shell_varとして,perlの中で\$perl_varによって引用することになる。
#! /bin/zsh
# usage: word.sh 5 sample pdf (tst, txt, pdf, html)
# output sample-5.txt

case \$3 in
"tst")
pwd;
ls -al \$1.txt;
ls -al \$2.*;
;;
"txt")
echo "txt";
perl -nse 'while (/\b[a-z]{\$num}\b/ig) {print "\$&\n";}' -- -num=\$1 \$2.txt | tr A-Z a-z > \$2-\$1.txt;
;;
"pdf")
echo "pdf";
pdftotext \$2.pdf;
perl -nse 'while (/\b[a-z]{\$num}\b/ig) {print "\$&\n";}' -- -num=\$1 \$2.txt | tr A-Z a-z > \$2-\$1.txt;
;;
"html")
echo "html";
textutil -convert txt \$2.html;
perl -nse 'while (/\b[a-z]{\$num}\b/ig) {print "\$&\n";}' -- -num=\$1 \$2.txt | tr A-Z a-z > \$2-\$1.txt;
;;
*)
echo "undefined"
;;
esac

0 件のコメント: