2020年10月19日月曜日

漢字のよみがな辞書 yomi-dict / homonym-ja を作った

最近、形態素解析器に読み推定をさせて遊んでいました。 しかし遅い! 熟語や成語のよみがなを調べるだけならパターンマッチングのほうが良いのではと思い、 O(1) で検索できる漢字のよみがな辞書 yomi-dict を作ってみました。

Mecab と比較したベンチマーク結果はこちら。 形態素 N-gram コーパス から抽出した、ひらがな + 漢字の頻出成語 (ex: 走る, 赤い などの原形品詞) を対象とし、11,730 件を読み推定させています。 Mecab より早いことは自明なので、オーダーだけ見れば良いです。

ライブラリ速度精度
yomi-dict20.967ms99.92%
Mecab (IPADic)148,606ms99.94%


だいたい 7,000 倍くらい違うけど、思ったよりは Mecab も早いんだなと思いました。 形態素解析器の中で最速と言われるだけのことはあります。 yomi-dict の読みミスは単純に登録されているかどうかです。 登録されてなくても仕方ないかな、というものしかありません。 Mecab は読み登録されていない成語をすべて正しく読めていましたが、多少の推定ミスがありました。 「ず」と「づ」を間違えたり、変な間違いを結構してます。

上記の結果は IPADic で読み推定させており、ずるいと感じる人もいるかも知れません。 もちろん mecab-ipadic-NEologd などを利用してもいいと思います。 ただ上記の結果で重要だと思うのは、頻出成語の推定ならパターンマッチングでほぼ完璧に処理でき、多少のエラー処理で対処できるということだと思います。 このほんのわずかな手間と比較して、mecab-ipadic-NEologd はメモリ使用量が大きすぎる (1.2GB) のですよね。 一方の yomi-dict は 14MB しかメモリを消費しません。

ところで語句の読みではなく、読みに対応する語句を取得したい場合もあると思います。 IME があれば困ることは少ないと考えられるので、homonym-ja (同音異義語の辞書) も作ってみました。 こちらも O(1) で検索できる省メモリな辞書になっています。 「ぶっちゃけ同音異義語ってどれくらいあるんよ?」という疑問を持って作ってみましたが、想像以上に多かった。Web版 もあります。



追記: ついでに spelling-variants-ja (表記ゆれの辞書) も作ってみました (Web版)。

2020年10月13日火曜日

魔法の塔 2020 まとめ

最近、魔法の塔のようなパズル系 RPG (通称: WWA) がたくさん出てきています。 2020 年は豊作で、WWA Wing 以外でも、おそらく 8 つもありました。

魔法の塔のようなパズル系 RPG はかなりの量をプレイしていますが、どれも操作性も良く面白かったです。 みんな違ってみんな良い。 終盤にかけてダレることがほぼ起きないので、息抜きに最適のゲームと思っています。

感想…となるとなかなか難しいジャンルなので、代わりにまとめページを作ってみました。 ノーマルモードのプレイ難易度を順番に並べると、以下になるでしょうか。


新春ビッグチャレンジ!GOGO初詣

新春ビッグチャレンジ!GOGO初詣 は 主人公を 6人選べますが、いずれも高難易度です。 かなりうまくやらないとクリアは難しい。歯ごたえを求めている人に向いています。


魔塔のマリスの最後のトレジャーハント

魔塔の国のアリス

魔塔のマリスの最後のトレジャーハント魔塔の国のアリス は直感と少し違うところに正解ルートが多いイメージで、他の作品より難易度が高いです。取捨選択をしっかりしないと、なかなか難しい。


ALICE IN WONDER WORLD

新春! レヴィアたんの挑戦状

魔塔のマリスと神のカギ

ALICE IN WONDER WORLD新春! レヴィアたんの挑戦状魔塔のマリスと神のカギ はバランスの良い作品です。 序盤でゲームの方針を掴むことが大事で、ポイントさえ掴んでしまえばあまりハマらず、サクサクいける難易度です。


リリムルワールドへようこそ!

魔塔の悪夢のマリス

リリムルワールドへようこそ!魔塔の悪夢のマリス はさらに難易度が低めです。 変なことをせず直感通りに進めれば、サクサクとクリアできます。 ロジックで詰めるというよりは、敵をなぎ倒しながらクリアしたい人向けです。


どの作品もハードモードとやりこみ要素が用意されているので、初心者から上級者まで楽しみやすいです。 魔塔シリーズのハードモードはかなり難しく、上級者でも苦労すると思う。 ボリュームを楽しむなら リリムルワールドへようこそ!新春ビッグチャレンジ!GOGO初詣 でしょうね。 ALICE IN WONDER WORLD新春! レヴィアたんの挑戦状魔塔のマリスと神のカギ も結構ボリュームがあります。

どれが一番好きかは「人による」と思うので、ぜひ全部プレイしてみましょう!

2020年10月2日金曜日

Google Spreadsheet をブックマークシステムにしたら最高だった

今さらですが、Google Spreadsheet がブックマーク管理に良いかもと思いました。 これまで Google Bookmarks やはてなブックマーク、その他たいていのブックマークサービスを使ってきました。 しかし読んでる量が多くなると、どんなサービスでも必ず破綻するんですよね。 何が問題だったかまとめると、だいたい以下になります。



ヘビーユースを想定していない既存サービス

そもそも私がブックマークをたくさんする理由は、後からその月のことを俯瞰するためです。 情報を俯瞰すると見えてくることがたくさんあります。 しかしそのようなユースケースを、ほぼすべてのサービスが想定していません。

(1) まずは視認性の問題があります。 保存する量が多くなると、タイトル文字を敷き詰めないと、とても処理できなくなってきます。 最近のナウな UI は余白だらけで相性が最悪でした。 古めの UI だとまあまあ使えるのですが、もっと大きな問題が色々あります。

(2) どれも再利用性の問題がありました。私はだいたい月単位で物事を思い出しています。 この月に確かこんな便利なライブラリが紹介されていたな、この月には良いアイディアがあったなと思い出します。 最近はググっても良いものが見つからないことが多いので、これが最も効率的な情報検索手段でした。 しかし月単位でブックマークを表示ができるサービスはほぼありません。 また少しタグ付けをミスしたり、管理構造を変えようと修正し始めると、もう大変。 既存サービスはとても管理できる代物ではありません。

(3) ブックマークの削除も大変です。 指でポチポチ消すか、まとめて全部消すか。 面倒だからといって掃除を怠ると、最終的にはブックマークが溢れかえり、破綻します。 何十回もの破綻を経て、ブックマークは「後から振り返った時に重要になるもの」だけにしていますが、それでも既存サービスでは管理不可能でした。

上記の問題を解決する方法がなくて、仕方なくHTMLにブックマークをベタ打ちするようになりました。 自分用に調整しやすいため、これはすこぶる使いやすかったです。

しかし今度は置く場所が問題になりました。 気軽な更新もしにくくなりました。 使いやすいのでブログに載せていたのですが、たいていの人はあまりニュース見てないはず。 これでも保存したい量の 1/5 くらいまで圧縮してるんですが、やはり多くの人には邪魔かなと思っていました。 GitHub に保存したり、Netlify に上げることも考えたんですが、あまりにも使い勝手が悪い。 Twitter でふぁぼっている人もたくさんいるけど、再利用性が最悪で、なおかつ凄い見にくくなるのでブログのほうがまだ穏やかだと思う。

割と困っていたのですが、ふと Google Spreadsheet に書いたらどうなるだろうと思いました。 実際にやってみたら、なかなか良かったです。


おすすめの使い方

Google Spreadsheet をブックマークシステムにするとき、まずはオートフィルタでカテゴリごとに検索できるのが良いですね。 カテゴリの付け方も、何十回もの破綻を経た結果、せいぜい10こにするのが良いと思ってます。 タブ機能を使えば月ごとにも管理できますし、どの月にあったかあやふやになった時も、すべてのタブから検索する機能があるので、非常に使い勝手が良いです。

ということで直近数ヶ月のニュース関連をパパっと移行してブログをサッパリさせました。 まだ新しいものしか反映させてませんが、少しずつ移行する予定です。 ついにブックマークの完璧な管理方法を見つけたかも?

2020年10月1日木曜日

手書き100マス計算、タイプ100マス計算を作った

手書き100マス計算タイプ100マス計算を作りました。 自動採点機能が付いており、子供 1人でも遊びやすい 100マス計算です。



最近、数字認識を少し頑張ってみたのですが、その結果、AI もほとんど完璧な認識をしてくれるようになりました。 精度については Zenn にまとめたので、興味がある人は読んでみてください。 これだけ精度が良ければ今までより踏み込んだ UI のゲームが作れそうと思い、またゲームを作ってみることにしました。

小学生の算数ゲームとして一番有名なのは 100マス計算なので、作ってみました。 100マス計算は私も小さい頃は学校でよくやった (ただの100問計算だったかも) のですが、最近の子はそのような計算練習をしたことがない子のほうが多いようです。 でもねえ、やってると明らかに計算速度が変わるので、私はやったほうが良いと思ってます。

100 マス計算には良いところが色々あるのですが、一番良いのは、早く解くためにほんの少しだけ短期記憶を利用するところです。 短期記憶をほとんど使ってない子は結構な割合でいるので、かなり良い訓練になります。 現代社会では思考力も重要なのですが、まずはこのようなほんの少しの脳のトレーニングから始めて、 頭の回転速度を高くしないことには思考力も活かせません。 あと 100 マス計算は 3 分間もあればできる勉強なのですが、その 3 分間の集中が持たない子も結構います。 やると決めた時にスイッチを入れる訓練にもなるのではと思ってます。

学校で 100マス計算をやらなくなった要因は 3つくらい考えられて、1つは競争教育をやめたことによるものだと思います。 2つめは教科書の内容が変わったことです。 少し昔より範囲が少し増えたことで練習が減ったので、計算練習に取り組む時間が減ったと言われています。 ただもっと昔は範囲がずっと多かったはずなので、関連性は不明ですね。 3つめは採点が面倒ということです。3年生くらいになると少し時間が掛かるので、面倒でやらなくなってしまったかも知れません。

1, 2 はともかく 3 の採点が面倒という部分に関しては、今回作ったアプリで完全解決です。 自動採点をしてくれるので、子供 1 人でも遊べます。 結構よくできていると思うのでおすすめ。 ついでに以前作った、手書de暗算タイプde暗算 も遊びやすく改良しました。 暗算のほうが問題としては少し難しめで頭を使うので、100マス計算のほうが導入には良いかも知れません。

あと今回作った100マス計算は、35÷3のような余りのある割り算も出てきます。 小学校高学年で算数が苦手な場合、このへんの計算が非常に遅いことが多いので、割と長く使えるアプリになってると思います。