代数学の基本定理の証明(のスケッチ)を Up Goer Five 単語リスト縛りで書いた
代数学の基本定理 (The fundamental theorem of algebra) という有名定理がある。1次以上の複素係数多項式は複素数上に解を少なくとも一つ持つというやつである。
真面目に証明するのはそんなに簡単ではないのだが、かなり上手く直観に訴えるゆるい証明のスケッチがあり、かなり気に入っている。
さて、xkcd という英語ウェブコミックの #1133 に Up Goer Five というのがある。これは、画像内に Explained using only the ten hundred words people use the most often とあるように、英語における頻度トップ1000の単語だけを使ってサターンVロケットについて説明するというコンセプトの漫画である。
個人的には、ノズルの部分に書いてある
This end should point toward the ground if you want to go to space. If it starts pointing toward space you are having a bad problem and you will not go to space today.
が好きである。
ちなみにこの漫画の作者はこのコンセプトで Thing Explainer という本も出している。おすすめ。
話を戻すと、先日その代数学の基本定理の証明(のスケッチ)を見て、「こういうのっていいよなぁ」と記憶に留めていたら、本日(2021年12月31日)「これ Up Goer Five 単語リスト縛りで書けないかな」と思ったので、15分(具体的には14:18~14:33)掛けてとりあえず書いてみた。
Draw a very big round road on the land of numbers. The road is so big that it is sent to a new road that goes five times around the None if the sending is of order five. Now, slowly make the old road smaller and smaller until all parts of the road reach the None. While doing that, the new road also changes. What? The new road never touched the None? That is a lie, because after everything has ended, all parts of the new road is also at one place, and you can't slowly change a road that goes five times around the None into a road that is at one place without touching the None at some point in time.
origin はもちろん、 zero すら言えないので、none を固有名詞にするという暴挙に出た。「連続的に」も無理なので slowly で逃げる。「n次方程式」方面がかなり苦戦すると予想していたが、勝因は order という語がかなりの多義語であるがゆえに頻度も高かったことか。読み返してみると、第一文で円形の経路を書く際に The None を中心と指定するのを忘れているな。普通なら centered at the origin と書けば終わるのに、まず center という語の使用が許されてないからなぁ。very middle とかで逃げればいいのだろうか。第二文に The road must be drawn so that there should be the None in the very middle of the big round road. って足せばいいか。
ということで改訂版。
みなさんも Up-Goer Five Text Editor で遊んでみると楽しいのではなかろうか。
電華打字機のエミュレータを作った
この記事は KMC Advent Calendar 2021 - Adventar の 25 日目の記事です。
好きな本の宣伝と文脈導入を同時に行う
そういえば、この本はかなり好き。1880年代にはタイプライターというものがまだ新しく、多様な方式のものがあったが、1900年頃になるとだいぶその種類が減ってきた。https://t.co/41QXAMKS5b
— jekto.vatimeliju@hsjoihs@.sozysozbot. (@sosoBOTpi) 2021年2月21日
このことにより、「それぞれの字に対応するキー」以外の仕組みで文字を入力することを人類は思いつかなくなり、「中国語のためのキーが5000個あって横5メートルあるタイプライター」というのが新聞のネタ枠に載るようになった。 pic.twitter.com/3AF6aB7F5N
— jekto.vatimeliju@hsjoihs@.sozysozbot. (@sosoBOTpi) 2021年2月21日
この巨大な空想上の機械という風刺画は、中国語という言語が「技術的に非効率的」であるという一見中立的な主張をしているように見えるが、実のところはかつて活気に満ちて多様だった想像力がレミントンに滅ぼされた様を表現する風刺画になっている、という非常に示唆的な書き出しで第一章が始まる。
— jekto.vatimeliju@hsjoihs@.sozysozbot. (@sosoBOTpi) 2021年2月21日
さらに、レミントン式タイプライターが覇権を取ったことにより「それぞれの字に対応する40個強キーとシフトキー」以外の方式がなくなり、大文字小文字キーが分かれていた英語タイプライター(1枚目)を流用したタイ語タイプライター(2枚目)が生産できなくなり、無理矢理シフト式に押し込む必要が出た pic.twitter.com/gN888Vstcp
— jekto.vatimeliju@hsjoihs@.sozysozbot. (@sosoBOTpi) 2021年2月21日
当時レミントンと競合していたUnderwood社のタイプライターの発明者 Cousin は、94種の文字を42個のキーで打つのは大変なのでもう少し文字を削らないと「ヨーロッパの現代語」のようにタイ語を入力できるようにならない、という言葉を残している。
— jekto.vatimeliju@hsjoihs@.sozysozbot. (@sosoBOTpi) 2021年2月21日
「Cousinは、タイ語がUnderwoodに対応できないことを問題視したのであり、Underwoodがタイ語に対応できないことを問題視したのではなかった」と、この本は痛烈に批判する。
— jekto.vatimeliju@hsjoihs@.sozysozbot. (@sosoBOTpi) 2021年2月21日
こういう批判の目を持つのって大事ですよね。
本題
さて、この本を書いた Thomas Mullaney という人はスタンフォードの先生で、私はマウンテンビューのコンピュータ歴史博物館に行ったときに「この本面白そう」と買ったという経緯があります。
時は流れ、3ヶ月後。高仲芹という人が発明した中国語用のタイプライター『電華打字機』についての記事をその先生が出していたのを見掛けました。
この本の著者がn時間前に記事を出しとるな。「0~5, 0~9, 0~9, 0~9 の四桁で漢字を入れるタイプライターのデモンストレーションをやった人に会えて話を聞けた」とのことであるhttps://t.co/CiYBiCL7Qi
— jekto.vatimeliju@hsjoihs@.sozysozbot. (@sosoBOTpi) 2021年5月18日
この人70年経っても未だにこの文字コード覚えてたらしい。すごい。
— jekto.vatimeliju@hsjoihs@.sozysozbot. (@sosoBOTpi) 2021年5月18日
1秒に1回転する直径18cm、長さ28cmの円筒に5400文字が刻印されていて、0-3-1-4 を押すと「我」が打てるらしい pic.twitter.com/4J9UQBC12V
— jekto.vatimeliju@hsjoihs@.sozysozbot. (@sosoBOTpi) 2021年5月18日
さて「この文字コード表ってどっかにあるのかな」と調べてみたところ、スタンフォードの図書館にはあることを確認。9月からアメリカに戻って授業を受けるので、せっかくだからこれを借りて再現実装つくりたい!という気持ちになりました。
ということで、9月に渡米し、
@_lem0n_ この文字コード表をゲットしました https://t.co/PLsjBcXjmN
— jekto.vatimeliju@hsjoihs@.sozysozbot. (@sosoBOTpi) 2021年9月22日
その後、少しずつ入力していきました。日本語で使わない漢字がかなり多く、入力には苦労することもありましたが、 zi.tools というサイトのおかげでなんとか終わらせることができました。
これ、部品から漢字を出すのに非常に便利なので最近お世話になってる。https://t.co/6cWhB1X64w 字統网 https://t.co/ESRnuN0D18
— jekto.vatimeliju@hsjoihs@.sozysozbot. (@sosoBOTpi) 2021年11月9日
@yi_bai_cn 非常に助かっております。ありがとうございます
— jekto.vatimeliju@hsjoihs@.sozysozbot. (@sosoBOTpi) 2021年11月21日
ご愛用いただきありがとうございます https://t.co/iTbzG5tn3c
— Yi Bai (@yi_bai_cn) 2021年11月21日
なお、この経験を活かして、2021年11月4日のKMC例会講座で「漢字入力テクニック」という発表をさせていただきました。
そうして本日2021年12月25日、ついに!
これの文字コード表を全て(0000~5389まで)入力!いや~大変だった。 https://t.co/PLsjBcGgkN
— jekto.vatimeliju@hsjoihs@.sozysozbot. (@sosoBOTpi) 2021年12月25日
文字コードを入れきったので、あとは実装を再現するだけです。ゆくゆくは写真から頑張って 3D モデルを作る予定ですが、とりあえず動くものが欲しかったので、機能を再現することを目標に、当時の録画を注視。
左上0、左下1、右上6、右下2。0162は「文」、0612は「追」で、かつ最終的に打たれた文に「英文」「中文」とかは出てきてるけど「追」は多分出てきてないので、左上 → 左下 → 右上 → 右下の順序で確定と見てよさそうだな pic.twitter.com/Vpu1AzpD2W
— jekto.vatimeliju@hsjoihs@.sozysozbot. (@sosoBOTpi) 2021年12月25日
0?78 が見えるけどこれ 0478「是」でしょ。この順序で正しそうだな。あとはボタンが解除されるタイミングさえ分かればなんとかなるんだが、よくわかんないなぁ pic.twitter.com/ZZGG9aBlTs
— jekto.vatimeliju@hsjoihs@.sozysozbot. (@sosoBOTpi) 2021年12月25日
まあ、完全な再現である必要はないのよな。
— jekto.vatimeliju@hsjoihs@.sozysozbot. (@sosoBOTpi) 2021年12月25日
・100の位が押されると、押されたやつが固定され、それ以外の100と10が解除
・10の位が押されると、押されたやつが固定され、それ以外の10と1が解除
・1の位が押されると、押されたやつが固定され、字が打たれる
という仕様にでもするか?(んー同字反復)
とりあえずテキトーにエミュレータを作りました♪https://t.co/skH3wcMW8N pic.twitter.com/PcWfxQIDYU
— jekto.vatimeliju@hsjoihs@.sozysozbot. (@sosoBOTpi) 2021年12月25日
ということで、できました ♪
架空世界の表意文字用の手書き文字認識を実装したい (part 1)
この記事は創作+機械学習 Advent Calendar 2021の22日目です。
自己紹介パート
(記事の技術的内容には本質的な関わりがないので、お時間のない方はこのパートは読み飛ばしていただいても構いません。)
こんにちは、hsjoihs です。
創作の種類の一つに「架空世界創作」、つまり、架空の世界の言語・文化・地理などを創作するという形態があり、ご縁あって、2017年頃から私もファイクレオネという架空世界についての創作を手伝わせていただいております。
さて、架空の世界の言語を創作している以上、用いられている文字も架空になります。上記地図ではペメセペ・ルヨットという一種のアルファベットを用いていますが、架空世界ファイクレオネではこれ以外にも様々な文字体系が用いられているという設定となっております。私はその中でも、ファイクレオネで使われている表意文字、「燐帝字母」にまつわる諸々の管理を主にさせていただいています。
たとえば、向こうの文化の一つとして、駒の役職が燐帝字母で書かれている架空伝統ゲーム「机戦」を我々は創作しており、現在企業に依頼してそれの製造を行っていただいていたりもするのですが、
このボドゲのオンライン対戦バージョンは私が実装していたりします。
本題
さて、以上の画像に散見された漢字のような文字「燐帝字母」に対して、手書き文字認識を実装したいと思い立ち、2020年7月5日、「そのためのデータセット」を自作するためのツールを作り始めました。
手書き文字の認識のデータセットを自作したいが、タッチパネルの入力を時系列データにしてくれる「だけ」のツールというのがなかなか見つからないし自分でcanvasで書くべきだろうか
— hsjoihs (@hsjoihs) 2020年7月5日
えーすごくテキトーにJSONを生成して集めようとしたらCORSに引っかかるをしています(めんどい~)(なるべく手抜きでJSONを集めるにはどうすればいいんだ)
— hsjoihs (@hsjoihs) 2020年7月5日
jsonファイルをユーザーにダウンロードさせて(これはObject URLで容易にできる)、Slackとかに投げてもらうのが小規模だと楽そう?(少し面倒だけど…。)
— hikalium (@hikalium) 2020年7月5日
誰の生成したデータなのかが自明に分かるのも嬉しいですね。完成しましたありがとうございます
— hsjoihs (@hsjoihs) 2020年7月5日
「ランダムに提示された文字を枠内に手書きし、↲ ボタンを押す」という作業をひたすら繰り返すとデータセットができる、という仕組みが出来上がりました。あとは地道にやっていくだけです。
皆で頑張った(具体的には11人が協力した)結果、2020年7月6日12:00~2020年7月9日12:00の72時間で3万枚(つまり1日で1万枚)という驚異のペースで画像が溜まっていき、2020年7月11日には当初目標としていた5万枚を達成。
その生 JSON、およびそれを変換した SVG と PNG 一枚一枚の生ファイルを git に直コミットして作られた、pull するにも push するにもあまりにも時間が掛かるヤバがこちら。みんなは真似しないでね!
2020年7月14日には、はこつきさん(@re_hako_moon)に学習を回していただき、
いまのところResNet-18+FCのネットワーク構成,各クラス10文字ずつ分離してテストデータを作成(train&validation: 46876, test: 3390)で精度99.08%くらいです
(testは毎回走らせていないのでこれはvalidationですが,だいたい挙動はこんな感じです)
という素晴らしい成果が得られました。めでたしめでたし。
本題2
その後、はこつきさんはかなりの多忙を極め、時は流れ、2021年11月9日、はこつきさんに
- そういえば、このプロジェクトの存在って覚えてます?
- 当時学習に使ったソースコードとかって、3秒で渡すことが可能です?
と訊いたところ、
- 覚えてますよ
- 別のパソコンに入ってますし、ぼくがやるとしても当時のは書き直すと思います
と言われたので、「書き直すかぁ」と思っていました。
思っていたらいつの間にかアドカレ2日前になっていました。ひーん。
ということで、再びはこつきさんと話したところ、
- pretrained からやったほうが文字のタスクにおいても精度がいい
- pytorchなら、torchhubからロードするのがよい
- ロードについては、ここhttps://pytorch.org/hub/pytorch_vision_resnet/ を見たら大丈夫
- あとは https://qiita.com/illumination-k/items/fa7508127d8942c1284f らへんとか読めばイケると思います
と言われました。ありがたい~。
気づいたらアドカレ当日になっていました。うぎゃぁ。
ということで、https://qiita.com/illumination-k/items/fa7508127d8942c1284f を実際に試み、
- 致命的な typo がソースコード内に 3 つあったので修正リクエストを送信
- torch.max ではなく torch.topk を使うことで複数候補を出せるようにする
- japanize-matplotlib というのを使うことで、Google Colab でも漢字を表示できることを突き止める (https://www.teamxeppet.com/matplotlib_in_japanize-colabo/)
- 「JSON だけコミットしてて、SVG や PNG にまだなっていないやつ」をなくす
- この記事を書く
などの活動を行いました。
よし、あとは実データで学習を回すだけ!!!!(現在23時55分)
ということで、今回の記事はここで終わりです♡
今後の楽観的な見通し
- 実データで学習を回す (part 2)
- 手書き文字認識 Web アプリを作る (part 3)
- データが増えるたびに再学習が走り Web アプリがデプロイされる CI とかを整える (part 4)
(こんなにうまくいくかねぇ?)
有象無象
*1:このツールはMITライセンスで公開しているので、「私も架空の文字の手書き文字認識を作りたいので、データセットを作りたい」という人は https://github.com/jurliyuuri/linzi-recognition/ からお使いください。ただし、やっつけ仕事で作っているので、あまり再利用しやすい形にはなっていません。
QWERTY順にソートされた辞書
「たまにABC順に並んだキーボードってありますよね」というところから、「逆にQWERTY順に並んだ英語辞書を見てみたい」という話になった。
まずは考察
q の後には基本的に u が来るものである。しかも QWERTY 順で u はかなり最初の方にあるので、辞書の冒頭は que- で埋まるだろう。qwerty 自体も語としてあることを考えれば、q → qwerty → queer → queen といった配列になるだろうか。
検証
こういう書き捨ては JavaScript でいいだろうと考え、とりあえず比較関数を書く。Haskell とかで書いた方が楽だったかもしれないが、今使ってるマシンに Haskell が入ってないので愚直に書くことに。
var comp = (a, b) => { if (a === "") return -1; if (b === "") return 1; var af = "qwertyuiopasdfghjklzxcvbnm".indexOf(a[0]); var bf = "qwertyuiopasdfghjklzxcvbnm".indexOf(b[0]); if (af < bf){return -1;} else if(af>bf){return 1;} else return comp(a.slice(1), b.slice(1))}
あとは英単語の一覧を http://www-personal.umich.edu/~jlawler/wordlist.html から持ってきてやって、ソートすれば:
あー、そういえば QED があった。
辞書の終わりのほうはどんな感じだろうか。
なるほどなぁ。
誰かやって
- Webster's Dictionary, 1913 とかの版権の切れた辞書を使って、QWERTY順にソートし直しただけの辞書を作って刷ってほしい
紙と鉛筆しかないときに便利な暇つぶし
紙と鉛筆しかないときってありますよね。今日まさにそういう状況が発生したので、そういった際に私が行う様々な暇つぶしのうちの一つを紹介しようと思います
公式
$\frac{n!}{\left(\frac{n+x}{2}\right)!\left(\frac{n-x}{2}\right)!}\approx\frac{2^{n+1}}{\sqrt{2\pi n}}e^{-x^{2}/2n}$ という近似公式があります。*1 ということで、これを使って遊んでみましょうというのが今回のお題です。
n=6, x=2 のとき
左辺は $\frac{6!}{4!2!}=\frac{6\times5}{2}=15$。ということで、右辺に突っ込むことで、n とか x が小さいときにこの公式がどれくらいの精度で成り立つのかを確認したいわけです。
とりあえず $\frac{2^{7}}{\sqrt{6.28\cdot6}}e^{-4/12} \approx \frac{128}{6.14} e^{-1/3}$。えーっと $e^{-1/3}$ ってどうやって求めよう。あ、$e^{-1} \approx 0.367$ は覚えてる。つまり $0.7^3 \approx 0.343$ よりちょっと多い。よって $(0.7+x)^3 \approx 0.343 + 3\cdot 0.49 x$ を解きたい。引き算して $3\cdot 0.49 x = 0.024$。3で割って2を掛けると $x = 0.016$ といったところか。ということで $e^{-1/3} \approx 0.716$ が無事求まった。
$\sqrt{6.28\cdot6} \approx 6.14$ だから、結局 $\frac{128}{6.14} \times 0.716$ だから、えーと $128 \times 716$ を真面目に筆算して、$\frac{91.6}{6.14} = \frac{1}{2}\times\frac{91.6}{3.07}$。はいはいだいたい15っぽいですね。オーケー。
n=100, x=4 のとき
右辺は $\frac{2^{101}}{\sqrt{6.283\cdot100}}e^{-\frac{16}{200}}$ 。えー $e^{-0.08} = 1 - 0.08 + 0.0032 = 1-0.00768$ としてやればよい。2の常用対数は $0.3010299$ とかのはずなので、101倍してやって $2^{101} \approx 10^{30.404}$。平方根はだいたい$\sqrt{625} = 25$ ……だとちょっと精度が足らん気がするな。精度というのは稼げるところで稼いでおきたいので、もうちょい頑張っておくか。えっと $\sqrt{625 + 3.3} = 25\sqrt{1+\frac{3.3}{625}} = 25\sqrt{1+\frac{52.8}{10000}}$ だから、全体に $1-0.00528$ を掛けてやればいい。(※計算ミス!平方根の中から取りだしたのだから、本当は半分にしてやらなきゃいけない。あとそもそもここまでの精度要らない)
ということで求めるべきは $\frac{10^{30.404}}{25}\left(1-0.00528\right)\left(1-0.0768\right)$ であって、100を25で割ってやって $4\cdot 10^{28.404} \cdot \left(1-0.0821\right)$。
さて残るは $10^{0.404}$ の処理だけども……あ、$10^{0.404} \approx \left(10^{0.301}\right)^{4/3}$ としてやれば、これはオクターブと長三度。完八が2/1、完五が3/2、完四が4/3、長三が5/4、短三が6/5なのだから、$2^{1/3} \approx 1.25$。
……真の値はもうちょい大きかった気がする。まあたしかに $125/64 < 2$ だもんな。じゃあ $1.26$ にしておくか。ということで $4\cdot2.52\cdot(1-0.0821)\cdot 10^{28} \approx 9.26\times 10^{28}$ かな。
答え合わせ
- $\frac{2^{7}}{\sqrt{6.28\cdot6}}e^{-4/12} \approx 14.94$
- $\frac{100!}{48!52!} \approx 9.32\times10^{28}$
- $\frac{2^{101}}{\sqrt{6.28\cdot100}}e^{-\frac{16}{200}} \approx 9.34 \times 10^{28}$
ということで、だいぶいい線いけた。
実際の計算用紙
入力に5打必要なハングル
きっかけ
KMC(京大マイコンクラブ)に入って2ヶ月が経とうとしていた今日この頃、例会があったので(こちらは午前3時であるにも関わらず)参加した。例会が終わった後、することもないので(いや寝ろよ)韓国語の単語帳を回していたところ、pelkさんという方から「常々思ってたんですけどハングルってキーボードでどう入力するんでしょう」という質問を頂いた。
その質問に対して、私は「ハングルの入力は、まあある種のIMEを使うのが普通です。ㅇㅏㄴㅎㄷㅏと入力すると、順にㅇ→아→안→않→않ㄷ→않다となります」とテキストチャットで書いたあとで、Google Docs を開き、韓国語作文を即興でしながら入力する様子を画面共有をすることで、実際の入力の様子を見せて説明することができた。
ほえ~
パーツごとに入力していくのか
最大で4パーツ組み合わさりえて, 該当する文字が無ければ即座に次の文字に入力されるんだなぁ
とテキストチャットに書かれているのを見つけた私は、「あ、ㅚとかの一部の母音字は入力に2打を必要とするので、(まあこんな音節はないんですが)욊という音節を入力するには5打必要になりますね」とコメントした。
さて、韓国語初学者である私はここでサクッと5打必要となる音節の実例を提示することができず、入力はできるけれど実際には用いられない文字を使って説明をしてしまったわけだ。ということで気になるのが、果たして実際に使う単語でこの条件を満たす具体例があるのかということである。調べてみよう。
KS X 1001
韓国語がそんなにできないにも関わらず「実際に用いられる文字」の一覧を持ってくるにはどうすればいいか。そういうときに役に立つのが、韓国語のレガシーエンコーディングである KS X 1001 というやつである。このエンコーディングは、韓国語で実際に使う音節のうち、頻度の高い 2350 字を収録している。(ただし、出現頻度がある程度低いやつは入っていないので、例えば하얬다「白かった」に出てくる얬という字が収録から漏れていたりする)
出現頻度とかで決めたからあんまり出ないやつは入ってなかった。これで하얬다が書けなくて困った思い出。
— 広島鍋 (@hiroshima_pot) 2021年1月30日
また、この選出は1987年に行われたので、翌年の正書法改訂で消えた뭏という字(아뭏든「とにかく、いずれにせよ」。今は아무튼と書く) が入っているといった細かい話もある。まあそれはそれとして、とりあえずサクッと使えるのでこの中から探すことにする。
探し方
今回探し求めているのは、以下の条件を満たすやつである。
- 母音字として ㅘ, ㅙ, ㅚ, ㅝ, ㅞ, ㅟ, ㅢ のどれかを含む
- 終声として二重パッチム ㄳ, ㄵ, ㄶ, ㄺ, ㄻ, ㄼ, ㄽ, ㄾ, ㄿ, ㅀ, ㅄ のどれかを含む
今私が使ってるWindows標準のやつだと、2打連続で同じ子音字を打つことによって濃音を入力することはできず、Shift を用いた入力しか受け付けないので、そのような入力は今回は考えないことにした(というか、濃音パッチムがアリなら됐(~になった)即座に提示していた。さすがに됐がパッと出るくらいの韓国語力は私にもある)。同様に、ㅐやㅔは一打での入力しかできないので、これらもカウントしない。
さて、どうやって探すかだが、こういう書き捨ての探索はブラウザの JavaScript コンソールでやってしまうのが手っ取り早い。便利なことに、Namuwiki の완성형/한글 목록/KS X 1001(訳すと、「完成形/ハングル目録/KS X 1001」)というページにスペース区切りで一覧が入っているので、
var a = "가 각 간 (中略) 힘 힙 힛 힝".split(" ")
としてやれば配列a
にハングル一覧が入る。さて、この中から
- 母音字として ㅘ, ㅙ, ㅚ, ㅝ, ㅞ, ㅟ, ㅢ のどれかを含む
- 終声として二重パッチム ㄳ, ㄵ, ㄶ, ㄺ, ㄻ, ㄼ, ㄽ, ㄾ, ㄿ, ㅀ, ㅄ のどれかを含む
という条件を満たすやつを探してやらなければならない。これをするには、Unicodeで定義されている NFD というやつを使うのが便利である。例えば、값 (U+AC12, HANGUL SYLLABLE GABS) という字をNFDに突っ込むと、以下のように3つに分解される。
こう分解されてしまえばもうこっちのもので、後はこれらが条件を満たすかどうかを探るだけでいい。とりあえず、NFDしたやつの n 番目を抜き出す関数を定義して、
var f = (str,n) => str.normalize("NFD")[n]
母音に関する条件を記述して、
var vowel_condition = (s) => [..."와왜외워웨위의"].map(c => f(c, 1)).includes(f(s, 1))
子音についても書いて、
var consonant_condition = (s) => [..."갃갅갆갉갊갋갌갍갎갏값"].map(c => f(c, 2)).includes(f(s, 2))
フィルターを掛けると……
なんと、「괆」ただ一字だけが条件を満たすことが判明!!!!
この形はだいたいㄹ語幹の動詞を名詞化したものなので、괄다で調べると……ありました、「火の勢いが強い」「せっかちで荒々しい」「(生地などが)ごわごわしている」「(木の)やにが多い」。うん、どう考えても初学者が知らない単語です。
結論
- KS X 1001 に出てくる字の中で唯一5打を必要とする特別な文字「괆」。「火の勢いが強いこと」「せっかちで荒々しいこと」「(生地などが)ごわごわしていること」「(木の)やにが多いこと」という意味を表すことができる文字です。
- こいつをクビにして「白かった」とかを入れた方がよかったんじゃなかろうか、KS X 1001。
語学と私 (part3) ― IDIEZという(比較的思想の強い)団体が提供するナワトル語教育を3学期間受けた感想 ―
part 1 はこちら。
part 2 はこちら。
前回までで、ナワトル語の授業を履修することにしたきっかけについては記述したので、以降はその授業がどんな感じであり、履修してどうであったかについて書く。
「ナワトル語」の授業
前回言及した
人「なにやってるんですか」
私「ナワトル語の単語帳回してます」
人「ナワトル語ってなんですか」
私「アステカ帝国の公用語で、今でも160万人ぐらいが話してるみたいですね」
人「はえー」
についてだが、これは実際の構図を(意図的に)ちょっと単純化しすぎた表現になっている。
まず、「アステカ帝国の公用語」というのは(大雑把に言うと)話題が16世紀であり、一方で「今でも160万人ぐらいが話してる」という話題は当然21世紀の話である。前回言及した Launey, M., & Mackay, C. S. (2011). An introduction to classical Nahuatl. New York: Cambridge University Press. の Preface を引用するなら、
Let us specify again that the language described here is Classical Nahuatl, the literary language of the century following the Conquest. Nearly five centuries on, there is clearly no region in which this variety of Nahuatl is still spoken. It is thus a dead language, or rather, a dead variant of a language, in the same way as the English of, say, Christopher Marlowe is a dead form of the English language. No one nowadays speaks exactly like that, but many hundreds of thousands of people speak present-day variants of Nahuatl, some of them fairly close to the classical one, so that travelers to Mexico today may be pleasantly surprised when recognizing words and expressions, thereby gaining more inside knowledge of the country and its people.
「Christopher Marlowe の話していた英語」と言われても伝わらないと思うので、日本語で同じあたりの年代の例を探すなら、1592年の天草版『平家物語』の表紙にある、
NIFONNO
COTOBA TO
Hiſtoria uo narai xiran to
FOSSVRV FITO NO TAME-
NI XEVA NI YAVA RAGVETA-
RV FEIQE NO MONOGATARI.
「日本(にふぉん)の言葉とイストリアを習い知らんと欲(ふぉっ)する人(ふぃと)のために世話(しぇわ)にやわらげたる平家(ふぇいけ)の物語」
とかを提示するのが無難なのかもしれない(歴史の教科書で見たことがあるという人もいるだろうし)。
ということで、なにが言いたかったかというと、前述の通り
であるがゆえに当然この両者の間に差があるぞ、ということである。
さて、今回私が受けたのがナワトル語の授業である旨は散々述べてきたが、これは古典ナワトル語の授業ではない。21世紀に話されている言語を、その言語の母語話者から習ったのである。
IDIEZという団体
今回受けた授業を主催していたのは、IDIEZという団体である。サイトは
http://www.idiezmacehualli.org/ 。まずトップページを見ると、
IDIEZ A.C., es una asociación civil sin fines de lucro, promueve la investigación, la enseñanza y la revitalización de la lengua náhuatl
ナワトル語の研究・教育・言語復興をする団体と書いてある。さて、
El curso que ofrece IDIEZ se enfoca en la cultura y lengua náhuatl (variante de la Huasteca Veracruzana) con un desarrollo curricular de cuatro niveles.
ナワトルの文化と言語(ワステカ・ベラクルス方言)に焦点を当てるとしている。ということで、ナワトル語の中でも「現代ワステカナワトル語」 の授業である、という断り書きを入れておいた方がいいだろう。(cf. Huasteca Nahuatl - Wikipedia) ワステカナワトル以外にも様々な現代ナワトルがあるということにも注意されたい。
ワステカ方言は現代語の最大方言なので、サカテカス組とワルシャワ組が組んで、チコンテペクというワステカ方言の村をベースにして盛んに出版とかやってるんですよね。マヤ系のワステコとは別です。
— Mitchara (@Mitchara) 2019年2月22日
英語版Wikipediaによると、この方言差はそこそこ大きいので相互理解ができるほどではないと書いてある。一方IDIEZ側は「現代ワステカナワトル語を学べば他の方言も分かるようになるよ」と主張していた。この主張はどちらかというとプロパガンダ寄りに私には見えた。他の現代ナワトル語を記述した研究書とかも読んでみたが、やはり現代ワステカナワトル語だけの知識では全然わからないところもかなりある。もちろん分かるところもたくさんあるが。
正書法規則
IDIEZ は古典ナワトル語のアルファベット表記*1にめちゃめちゃ寄せて現代ワステカナワトル語を書く。古典ナワトル語のアルファベット表記というのは、スペイン語を話す人々が作ったものであるので、当然ながら当時のスペイン語に基づいた表記になっている。
さて、当時のスペイン語は k というアルファベットを使わなかった(今でも外来語ぐらいにしか使わない)。ということで「カ」という音を書くには ca と書き、「コ」という音を書くには co と書く。さて、「キ」はどう書くか。ci と書きたくなるが、なんとスペイン語ではこれは「スィ」と読む。ということで「キ」は qui と書き、同様に「ケ」は que と書く。
逆に、「スィ」「セ」は ci, ce と書くが、「サ」「ソ」は ca, co と書くわけにはいかないので za, zo と書く。
結果として、
ca カ |
qui キ |
-c -ク |
que ケ |
co コ |
za サ |
ci スィ |
-z -ス |
ce セ |
zo ソ |
という体系になる。なお、この体系は現在のスペイン語でもバリバリ健在である。たとえば amar (アマル)「愛する」から「私が愛した」を作るには -ar (アル) を取り -é (エ) を加えて amé (アメ)とするのだが、practicar (プラクティカル)「実行する・練習する」から「私が実行した・練習した」を作るには、同じく「アル」を取り「エ」を加えるので「プラクティケ」となる。しかし「ケ」は que と書くので、 practicar が practiqué になるという綴り字の上での変化を喰らう。同様に、「始める」は comenzar (コメンサル)なので「私が始めた」は当然「コメンセ」であるが、これも comenzé ではなく comencé と綴るので、 comenzar が comencé になるわけである。
また、当時のスペイン語は w というアルファベットを使わなかった(今でもやっぱり外来語ぐらいにしか使わない)。ということで*2、ナワトル語にもあるクヮ行やワ行は以下のように表記する。
cua クヮ |
cui クィ |
-uc -クゥ |
cue クェ |
hua ワ |
hui ウィ |
-uh -ゥ |
hue ウェ |
あと、当時のスペイン語では x はシャ行のような音であった *3 ので、ナワトル語のシャ行も x で綴る。たとえば México という国名自体がナワトル語 Mēxihco (メーシッコ) を書き写したものである。ただ、スペイン語の方ではその後シャ行の音がハ行に変化したので、現在のスペイン語では México は「メヒコ」と読む。
話が逸れるが(ほらこうやってどんどん記事が長くなる)、スペイン語をご存知の方のためにさらに補足。日本でスペイン語を学ぶと、z だったり ci, ce だったりは英語の th の音として教わると思うが、当時は ci, ce とかは「スィ」「セ」に近い音で、sa, si, su, se, so は(x- とはまた微妙に異なる)シャ行っぽい音であったとされている。詳しいことは https://en.wikipedia.org/wiki/Early_Modern_Spanish と
https://en.wikipedia.org/wiki/Nahuatl_orthography と
https://en.wikipedia.org/wiki/Phonological_history_of_Spanish_coronal_fricatives をご覧頂きたいが、せっかくなのでナワトル語に絡んだ話をしておくと、たとえばスペイン語 Castilla「スペイン、カスティーリャ」(カステラの語源でもある。もちろんカステラの方はポルトガル語を経由しているが)は古典ナワトル語では Caxtillān という形で入っているし、逆にナワトルの xōchitl (ショーチトル)を suchitl と s で表記している写本もあるようである。他の例は https://davidbowles.medium.com/mexican-x-part-xi-rise-of-a-new-x-4c30c0f74ad8 など。
まだ延ばすのかよ
さて、前回タイトルに 「IDIEZという(比較的思想の強い)団体が提供するナワトル語教育を2学期間受けた感想」と入れることができなかったので今回は「IDIEZという(比較的思想の強い)団体が提供するナワトル語教育を3学期間受けた感想」をタイトルに入れてみたが*4、感想もほぼ書いていないし IDIEZ の思想の強さにも全然言及できていない。ということでこの連載はもうちょい続く予定である。
*1:普段の私なら「ラテン文字表記」とか書いちゃうけど、これは一応一般向け記事ということになっているので
*2:この書き方には語弊がある。たとえば、当時のスペイン語ではクヮという音は qua と書いたりしたので、Launey, M., & Mackay, C. S. (2011). An introduction to classical Nahuatl. New York: Cambridge University Press. によると、実際の写本ではクヮは qua と書かれることが多かったらしい。というか1815年まではスペイン語では cuando とか cuatro とかは quando や quatro と綴るのを正則としていたようである。ワ行については、そもそも hu- で綴るのは珍しく、ワ・ウィ・ウェはそれぞれ ua/oa, ui/vi, ue/ve と綴るのが普通だったとのことである。
*4:学期の数が1個増えていることに注意。もたもたしてたら記事を書き上げる前に春学期終わっちゃったよ