アペフチ

Middleman Blogの類似記事をGroongaを使ってリストアップするRubyGemを作った

この日記はGroonga Advent Calendar 2015の21日目の記事です。今日は25日です。大幅に遅れてしまって、本当に申し訳ありません。

Middlemanでブログの類似記事一覧を作る拡張にMiddleman-Blog-Similarがある。類似判定のアルゴリズムを選べたりといい所もあるのだがこれは今のMiddleman v4に対応していない。それにGroonga Advent CalendarのネタとしてもGroongaが使いたかったので、Groongaの類似文書検索機能を使って同様のことをやってみた。

https://github.com/KitaitiMakoto/middleman-blog-similar-groonga

使うにはmiddleman-blog-similar-groongaをインストールし、config.rb

activate :blog_similar_groonga

と追記する。

拡張を有効化するとブログ記事向けのレイアウトでsimilar_articlesというヘルパーが使えるようになる。ここでイテレートされるオブジェクトには

  • key.key(パス)
  • title
  • path
  • body(タグを取り除いたもの)

の属性があって、わざわざ他記事のBlogArticlesオブジェクトまで辿らなくても済むようになっている。類似記事のタイトルを表示しつつリンクにしたいだけなら充分だろう。

<section>
  <h2>類似記事</h2>
  <ul>
  <% similar_articles.each do |article| %>
    <li><%= link_to article.title, article.key.key %></li>
  <% end %>
  </ul>
</section>

として使うことができる。

今は本文での類似しか見ていないが、タイトルやタグを使ったほうが人間の感覚に合うだろうから、改善を続けていきたい。

名前は似ているがMiddleman-Blog-Similarとは全く互換性が無いので注意すること。