新しく記事を書いていて、以前に使ったタグと同じものを紐付けたいと思った時、
過去にどんなタグを使ったのか迷うことがよくあります。
Tagwire Plugin の作者である
小川宏高さんは、
タグを入力する際に
JavaScript を使って入力単語の補完を行い、タグ候補をリストアップする方法を提案されています。
しかし、可能であれば記事内容からキーワードを抽出し、これをタグとして自動的に設定してくれると更に楽チンです。
先日の記事において我々はキーワード付与のための強力な正規表現式を手にしています。
そこで今回、これを利用して記事内容からタグ候補を自動的に抽出できるようにしてみました。
当サイトには 170 弱のタグが登録されている程度('05年11月現在)ですが、
なかなか好調で記事作成時のタグ入力作業が随分と楽になりました。
はじめに
文章解析をきっちりと考えるなら、
形態素解析
だとか出現頻度の
統計まで考える必要がありますが、
設置の手間が大きかったり、とりわけそこまで抽出精度を要求するわけでもないので今回は使用しません。
実際のところ、タグデータベースがある程度充実してくると、
そこから生成された正規表現式を使うだけで実用上は十分だったりします。
タグがある程度の数が登録されるまでは自前でタイプする必要がありますが、データベースが充実してくるに従い、
不要なものを削除して、特に新しく紐付けたいタグについてだけ入力すれば済むようになってくるはずです。
Ogawa::Memorandaで公開されている
小川宏高さん作の
Tagwire pluginを基本に、
キーワード抽出に必要な正規表現式を得るための改造を済ませておきます。
そして更に、tagwire.pl に以下のコードを追加します。
MTTagsAutoDiscovery
<MTTagsAutoDiscovery> コンテナタグは、
コンテナ内に含まれる文章から regexp_XXX で指定された正規表現式を使ってタグの抽出を行い、
発見された単語を MovableType 管理画面の記事の投稿画面のキーワード欄に設定します。
またコンテナタグは、そこに含まれるコンテクストに関係なく、常にそのエントリのキーワードを返します。
つまり <$MTEntryKeywords$> と同じです。
regexp_file
-
指定されたファイルの内容をタグ検索のための正規表現式として使用します。
その動作は <$MTInclude file="..."$> に準じます。
regexp_template
-
指定されたインデックステンプレートによって生成されたファイルの内容をタグ検索のための正規表現式として使用します。
その動作は <$MTLink template="..."$> に準じます。
regexp_module
-
指定されたテンプレートモジュールの構築結果を、タグ検索のための正規表現式として使用します。
その動作は <$MTInclude module="..."$> に準じます。
構築のたびに正規表現式の生成が行われるため、タグ数が増えた場合にパフォーマンス上の問題となる可能性があります。
regexp_file、regexp_template、regexp_module が何れも指定されていない場合、
内部的にデフォルトパラメータを用いて MTTagsAsRegexp を呼び出します。
そのため、構築のたびに正規表現式の生成が行われるため、
タグ数が増えた場合にパフォーマンス上の問題となる可能性があります。
ignore_tags
-
デフォルトで pre,textarea,script 内部に含まれるテキストにはタグリンクを生成しません。
他に追加していしたい HTML タグがある場合、それらのタグをコンマで区切って指定することができます。
apply_tags
-
ignore_tags とは逆に、その内部でタグリンクを生成させたい HTML タグをコンマで区切って指定することができます。
これらの指定はデフォルトのignore_tags < ignore_Tags < apply_tags の順に優先されます。
記事内容からタグを抽出するため、
個別エントリアーカイブに
<MTTagsAutoDiscovery> タグを追加します。
regexp_file、regexp_template、regexp_module の詳細については、
はてなキーワードよろしく記事文中のタグを自動リンクする
"正規表現式の生成と
テンプレートタグの修正"の節を参照してください。
使い方
Step1. 記事作成
エントリの内容(body)と追記(extend)を書いた後、キーワード欄に
[?]とだけ入力して、
一旦記事を「公開」の状態で保存してください。
キーワード欄が空欄または、[?]以外の文字列が入力されている時はキーワード抽出を行ないません。
下書き状態でもキーワード抽出できればいいのですが… その方が便利そうです。
Step2. タグ候補の修正
キーワード欄に発見されたタグ候補が幾つか列挙されているので、必要なだけ削除/追加して
再度、保存してください。
保存し忘れると ? タグが登録されたままになります。
寄せられたコメント (最新 5 件を表示しています)
3.3になっても、
「Tagwire Pluginで記事内容からタグ候補を自動的に抽出する」
機能を便利に利用していますが、
最近、既存のキーワードに無い変な文字を抽出してくるようになりました。
毎回特定の文字ではないのですが、決まって一文字で、
日常使わないような見た事もないような文字の場合が多いようです。
Jcode.pmは"Jcode.pm,v 2.6 2006/07/02 07:56:06"で
Tagwireのタグは全て標準のタグと競合しないようにリネームしてあります。
他にチェックすべきポイントはありますか?
教えていただけると助かります。宜しくお願いします。
3.3からタグ機能が標準装備になりました。
これと何らかの競合を起こしているように思えますが,
ちょっと調査しきれていません。
あと,タグ候補の自動抽出は同様に可能とも思いますが,
おそらく専用にプラグインなりを作って対処することになりそうです。
チョイチョイ☆って感じでは難しいんじゃないでしょうか?
先般はお世話になりました。
あれ以来、便利に利用させていただいておりますが、
MTを3.3にアップデートして以来、
キーワード欄に表示されるタグ候補が「,」(コンマ)から始まり表示されます。
,サッカー,シュート,パス…とこんな感じです。
タグ候補を修正してタグ欄にコピーする際に調整すれば利用上の不都合はないのですが、
気になっていたので報告させていただきました。
また、3.3で装備された機能を用いて、Tagwaireを使用せずにタグ候補を自動的に抽出する方法はありますか?
できたらいいな程度の要望なのですが、お知恵を拝借できれば幸いです。
こんにちは。
このブログ(Open MagicVox.net)は ShiftJIS で運用していますが
特に問題なく日本語キーワードも抽出できています。
UTF-8 でもいけるんじゃないでしょうか?
はじめまして。
ぴろりさんのタグ候補自動抽出にチャレンジしてみたいと
思うのですが、UTF-8のブログでも問題ないでしょうか?
また、日本語も抽出されるのでしょうか?
質問ばかりですみません、よろしくお願いいたします。