はじめてのSWIG3 (はてなキーワード抽出とその問題点)

とりあえずデバッグ用に findKeywordsをC++ で作ってみる。

void Hige::findKeywords(char** list, const char* text) {
    using namespace std;
    Darts::DoubleArray da;
    int count = 0;
    while (list[count]) {
    count++;
    }
    Darts::DoubleArray::result_type  r [1024];

    size_t size = da.commonPrefixSearch(text, r, sizeof(r), strlen(text));

    // このあたりは手抜き
    for (int i = 0; i < size; i++) {
        printf("match %s\n", list[r[i]]);
    }
}


いろいろ不恰好なところがありますが、まずは動くものを作ろうということで。
list はキーワードのリスト、textは日記本文です。


Perl側からは、

sub main {
	my $hige = HatenaSwig::Hige->new;
	my $wordlist = # ソート済のはてなキーワードの配列リファレンスを得る
	$hige->findKeywords($wordlist->{keywords}, '電車男ガンダムです');
}


と使います。


さて結果なのですが以下の感じです。

match 電車
match 電車男


はてな的には電車男ガンダムが抽出されるのが期待されます。
ということなので改善しなければいけない点は


さてそうなると、dartsに手を入れる感じになるのかなぁと悩み中。
なんでガンダムが抽出されないんだろうか?