Yahoo!形態素解析APIを使ってブログの記事にタグをつけてみる
ブログの各記事にタグをつけてタグページを作ろうと思い、Yahoo!の形態素解析Webサービスを利用して、各記事にタグ付けをしてみました。
» F.Ko-Jiがよく書いているキーワード一覧 – F.Ko-Jiの「一秒後は未来」
何かあったらマズいので、タグページは念のためサブドメインにしています。(最初は同じドメインにしていたけど途中で変更した。)
MTのデータベースを読み書きしたくなかったので、ディレクトリに静的ファイルとして格納されている各記事のHTMLファイルをプログラムで読み込んで、ひとつずつAPIにリクエストして返ってきたデータを別のデータベースに格納しました。
以下、作業メモです。
タグの抽出
- タグの抽出対象は各エントリーのタイトルと本文とする。
- ApacheではリクエストできるURLが全体で8196バイトという制限があるので、本文が長い場合はその長さを超えないようにバッサリ切る。
- 形態素解析APIではfilterパラメータで解析結果に含める品詞を指定できる。今回は名詞だけでOK。
- すべての名詞をタグにすると膨大な量になるため、ある回数以上登場するものだけをデータベースに保存。
- データベースには、タグのID、ページのID、そのページにおけるタグの出現回数などを記録。
- 「raquo」や「こと」といったタグにふさわしく名詞はその都度除外する。
タグの表示
- データを取り出すとき、MySQLではWHERE句で大文字小文字を区別しないため、GROUP BYで重複を避ける。
- あるタグのついた記事一覧を表示するURLは http://tag.fkoji.com/tag/タグ名 とする。これは rel-tag というMicroformatの仕様にもとづいている。
- このURLで任意のタグを表示できてしまうとマズいので、データベースに格納されていないタグが指定されたときは 404 Not Found を返す。
- ブログの各ページにその記事につけられたタグを表示。
- タグページへのリンクには rel="tag" という属性を入れる。
- タグが一つ指定されたときは、さらにタグで絞り込みができるようにする。
- タグ一覧はタグクラウドで表示。
ひとつ問題だったのは、ブログの更新とタグ付けが連動していないところで、これについてはあるURLにアクセスしたらタグづけを自動的に実行できるようにしてみました。
記事にタグをつけておくと色々と便利なことができるのですが、それは別エントリーで。
コメントを残す