アルファベットの小文字 f の 筆順矯正トレーニング をするために、 f 文字をたくさん含む英単語リストが欲しくて Googleで検索してみましたがよい情報が見つかりませんでした。
そこでChatGPTで質問してみたら、 f を3文字含む単語として fluffiness (ふわふわ感), fiftyfive (55), effortful (努力した)があるという回答がありました。さすが!と一瞬感心しましたけれど、よく見ると回答の中には2文字しかない単語も混じっていました1。
どうやら「特定のアルファベット文字をたくさん含む英単語リスト」は手に入りにくそうだったので、一般的な英単語リストから、特定の文字が多く含まれる単語を自分で抽出してリストを作ることにしました。
英単語リストの選択
語彙数ができるだけ多くフリーの英単語リストを探したところ、 山形方人氏(2018) による10,000単語のリスト(UVL10000)2 がありましたので、これを使わせていただくことにしました。
当初は正しい筆順を練習するために、単に f をたくさん含む単語リストだけが欲しかったのですが、せっかく良い英単語リストが見つかったので、この際、 f だけじゃなくて、 a から z の全26文字について、それらの文字が単語中に含まれる数をカウントすることにしました。
結果
ダウンロードした山形氏のエクセルファイルをCSV変換した後に、簡単なシェルスクリプトを書き実行して、表1 のような結果を得ました。スクリプトなどの説明はAppendixを見てください。
第1列がアルファベット文字、左上角の 4133
という数字は、単語中に文字 a が1個入っている単語の数が10,000単語中に 4133
単語あったことを示します。
a 行の右端=合計 5298
は a を 少なくとも1つ 含んでいる単語が 5298
個あったということになります。
1 | 2 | 3 | 4 | 5 | 合計 | |
---|---|---|---|---|---|---|
a | 4133 | 1073 | 87 | 5 | 0 | 5298 |
b | 1284 | 66 | 3 | 0 | 0 | 1353 |
c | 2812 | 491 | 32 | 0 | 0 | 3335 |
d | 2162 | 204 | 5 | 0 | 0 | 2371 |
e | 4277 | 1860 | 375 | 42 | 2 | 6556 |
f | 866 | 153 | 2 | 0 | 0 | 1021 |
g | 1451 | 106 | 6 | 0 | 0 | 1563 |
h | 1212 | 75 | 2 | 0 | 0 | 1289 |
i | 4024 | 1230 | 207 | 19 | 1 | 5481 |
j | 134 | 1 | 0 | 0 | 0 | 135 |
k | 360 | 5 | 1 | 0 | 0 | 366 |
l | 3073 | 473 | 40 | 2 | 0 | 3588 |
m | 1929 | 201 | 14 | 0 | 0 | 2144 |
n | 3541 | 895 | 99 | 7 | 0 | 4542 |
o | 3386 | 771 | 88 | 5 | 0 | 4250 |
p | 2016 | 245 | 9 | 0 | 0 | 2270 |
q | 210 | 0 | 0 | 0 | 0 | 210 |
r | 4154 | 758 | 53 | 0 | 0 | 4965 |
s | 2933 | 576 | 65 | 12 | 1 | 3587 |
t | 4021 | 1009 | 69 | 1 | 0 | 5100 |
u | 2567 | 278 | 16 | 2 | 0 | 2863 |
v | 1016 | 33 | 0 | 0 | 0 | 1049 |
w | 389 | 10 | 0 | 0 | 0 | 399 |
x | 271 | 1 | 0 | 0 | 0 | 272 |
y | 1427 | 27 | 0 | 0 | 0 | 1454 |
z | 165 | 10 | 0 | 0 | 0 | 175 |
注目すべき点をあげると:
- 同じ文字を6文字(以上)含む単語は無いこと
- 同じ文字を5文字含む単語は次の表の4単語のみであること
文字 英語 意味 e effervescence 泡立ち e interdependence 相互依存性 i incorrigibility 矯正不能 s listlessness 無気力 - v, w, x, y, z を3文字以上含む単語は無いこと
- q を2個以上含む単語は無いこと( q は常に1個だけ!)
- j を2個以上含む単語は jejune(単純,幼稚)1個しか無いこと
などです。
fの単語リスト作成
f については、UVL10000の中で、 f が2個以上(4個まで)含まれている単語に加えて、先にChatGPTで得られた単語を合わせた合計 161単語 を 2-4fs.txt
としてファイル化しました。
fの個数 | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
f | 866 | 153 | 6 | 2 | 0 |
handwriting-trainer.sh
上の161単語( 2-4fs.txt
)を eSpeak-NG
を使ってランダム順に読み上げます。
#!/bin/bash
#
# f が 2〜4個入った英単語ファイル(2-4fx.txt)からランダムに読み上げる
#
awk -F"," '{print $1}' < 2-4fs.txt > tmp-f24-list.txt
# ランダム化
sort -R tmp-f24-list.txt -uo tmp-f24-list.txt
# 1単語語ずつ読み上げる
i=0
exec 3< tmp-f24-list.txt
while read -r -u 3 word; do
i=$(( i + 1 ))
echo $i, "${word}"
espeak-ng -v en-us+f2 "${word}"\
-g 10\
-p 80\
-s 190
read -r -p " Hit Enter"
done 3< tmp-f24-list.txt
-
単語の読み上げを聞いた後に綴りを手書きすることで、書き順を矯正しようというものです。聞き取れなかったら、ちらっと画面を見ればちゃんと正解が表示されています。
-
read
で一旦ポーズしてエンターキーの入力を待つようにするために、読み上げ用ファイルの読み込みには ファイルデスクリプタ FD3を使っています。
eSpeak-NGについて
これがフリーソフトで入手できるのは本当にすごい!使用したオプションは次のとおりです(詳しくは espeake --help
してください)。
- -v 言語指定(
espeak --voices
で詳細リストが表示されます) - -g 単語間間隔, 単位=10msec
- -p ピッチ 0〜99, デフォルト=50
- -s スピード(単語読上げ数/1分), デフォルト=175
以上です。
Appendix:
表1 はどうやって作ったか
UVL1000.csv
(10,000語リスト(xlsm)を英単語だけを抽出したCSVファイル)を読み込んで [a-z]-wordlist.csv
ファイルを作ります3。スクリプトはわずか10行ほどです。
#!/bin/bash
#
# UVL10000.csvを読んで [a-z]-wordlist.csv ファイルをつくる
#
for letter in {a..z}; do
echo $letter
while read -r word ; do
freq=$( echo $word \
| grep -io ${letter} \
| wc -l)
if [[ $freq -ne 0 ]]; then
echo $word, $freq
fi
done < UVL10000.csv > ${letter}-wordlist.csv
done
たとえば f-wordlist.csv
の中身はこんな感じ。単語の右の数字が f の個数です。
adrift, 1
afar, 1
affable, 2
affair, 2
affect, 2
:
上で作った [a-z]-wordlist.com
を読み込んでスプレッドシート4に流し込みやすい形に整形します。
for letter in {a..z}; do
printf "%s," "${letter}"
for ((i=1; i<=5; i++)); do
echo -n "$(grep -c ${i} ${letter}-wordlist.csv) ,"
done
echo ""
done > for-spreadsheet.csv
for-spreadsheet.csv
はこんな感じです。
a,4133 ,1073 ,87 ,5 ,0 ,
b,1284 ,66 ,3 ,0 ,0 ,
c,2812 ,491 ,32 ,0 ,0 ,
d,2162 ,204 ,5 ,0 ,0 ,
e,4277 ,1860 ,375 ,42 ,2 ,
f,866 ,153 ,2 ,0 ,0 ,
:
Footnotes:
-
: 英語でのChatGPTでのやり取りでは2度にわたってはっきりと three or more f’sと聞いたのですがその都度 f が2文字しかない単語がリストに入っていました😅 たけども英語のChatGTPでは riffraff (下層階級の人々)や fiftyfifth (55番目)などの f が4個はいったレアな単語を教えてくれました。 ↩︎
-
: 10,000単語の処理は超型落ちのThinkPad 230Xでも 10分31秒で終わりました。 ↩︎
-
特にスプレッドシートでやらなければならないことはありませんが、とりあえずLibreOffice Calcで行の合計だけは出してみました。 ↩︎