0.22.2 用日本語パッチ適用後に分類に失敗することがあった問題への対処

3 月に試験公開をしたときから懸案事項だった問題について、ようやく原因がつかめた(おそらく)。
このパッチでは、メールの 1 行 1 行を処理するたびに行われていた Kakasi の辞書を開いて閉じるという処理を、メール 1 通ごとに行うように修正することによってパフォーマンスの向上を図ったのだが、その副作用(?)で、たまにメールの分類を間違える(多くの場合 unclassified になる)という問題が生じていた。この「たまに」というのがくせ者で、確実に問題が起こるのであれば原因究明もしやすいが、どういう条件で起こるのかがさっぱりわからないという状況ではその糸口さえなかなか見つからない。あれこれ気になるところに検証用のコードを追加してテストを続けていたのだけど、3 ヶ月近くもの間たいした進展もないままだった。
どこに原因があるのかもまったく分からない状態では先に進めないので、試しにできるだけ多くの箇所でログを出力するようにしてしばらく動かしてみた。この間、分類ミスは一度もなかったのだけど、せっかく集まったログだからと、20 数メガ(72 万行くらい)のログにざっと目を通してみた。10 万行くらい眺めたところで、気になるところを発見。分かち書き前には正しく表示されているのに、分かち書き後にはなぜか文字化けしている。これはなにかありそうだ。
が、そのメールを探し、UI で表示してみると、分類先も正しく、UI 上では文字化けもしていない。またも「たまに」起こった例なのかとがっかりしつつ、さらにその先を見てみると、同じような症状が起こっているメールを 2 通発見。そのうち 1 通は同じように UI では文字化けしなかったのだが、もう 1 通は、UI での表示でも文字化けが起こっていた。メールの内容を見る限りでは文字化けが起こる原因もなさそうで、いよいよ原因究明に近づいたのか……?
その後、このメールを使ってあちこちテストしてみると、Encode で文字コードを変換したところまでは問題なく、やはり Kakasi分かち書き処理を行ったときに文字化けが発生していることが確認された。具体的になにが原因なのかはわからないが、どうも、Text::Kakasi のオブジェクト(最初に文字コードを指定)を使って分かち書きを行う場合、Encode で別の文字コード間で変換を行ったあとにこのオブジェクトを使うと、文字コードが誤変換されるためか文字化けが起こってしまうようだ。分かち書きを行う前に、パラメータを再度設定することによって問題が解消することも確認できた。
ということで、かなり久しぶりにパッチのアップデートを公開。これですべての問題が解決されたのかどうかはまだわからないが、問題ないようであれば 0.22.2 用の日本語パッチとして公開したいと思う(と同時に 0.23 への適用の準備をしなくては)。これまでのパッチで問題が起こっていた方は、ぜひ適用を(見た目上は問題が起こっていなくても、潜在的な問題があると考えられるので、問題が起こっていない場合でも適用した方がよいと思う)。

井川りかこさんへ 完結編?

hotmail なのに、やはり「明日には使えなくなってしまう」の決まり文句は変わりませんでしたね。もう少しひねりがほしかったところですが、それほどすごい AI を搭載しているわけではないようですね。残念です。
それはそうと、「以前はメールだけの関係と言ってましたが。正直な意見として会ってみたい。そう思ってしまいました。」とか書いてますが、「以前は」っていうか、2 日前なんですけど。やはりコンピュータの世界では、たった 2 日で世界が変わってしまうほど進歩が速いんですかね。驚きです。
しかしもっと驚いたのは、「私の血液型『O型』」でした。一瞬何のことかと考えてしまったんですが、「大型コンピュータ」をひねったんでしょうか。普通のゾンビパソコンかなにかだと思っていたんですが、大型だったとは。ちょっと写真を見てみたくなりましたよ。
最後に、あなたの(もう使用できない)メールアドレスですが、名前の後ろについている「tm」ってなんですかね。ひょっとして、井川りかこTM……、商標でしたか?