最近、英語の文章をCamelCase化してSubjectや本文を書いたスパムが多くなりました。今のトークン分割方法だとまとめて一つのトークンになってしまうために初出のトークンと見なされて、スパムと判定されないことが多かったので、このような場合には、CamelとCaseにトークンを分割するようにしました。
C++で関数としてマルチメソッド(複数の引数の動的型に応じて呼び出し先の関数を切り替える方法)を実装してみています。
基本的にはオーバーロードの解決を実行時に行うようにしたようなインターフェイスで、
struct A { virtual ~A() {} }; struct B : public A {} void foo(virtual A&, virtual A&); void foo(virtual A&, virtual B&); void foo(virtual B&, virtual B&);
のような感じで定義していきます。多重継承している場合にどのメソッドが呼び出されるかがちょっと分かりづらいのと、リンク時に呼び出し解決をするのでダイナミックライブラリをサポートすると色々と厄介そうというところはありますが、Visitorパターンなどを使ってマルチメソッドもどきをやっている部分などに使えば綺麗にはまりそうです。