最近の衝撃事件

うーん、どうも忙しいとだめっすね。 無理にブログのネタとか考えちゃうわけですが、こういうときは自然体で行くのが一番、ていうことでテーマもなくつらつらと。 ええと、じゃー最近起こった衝撃的なことを。 🙂

うちのアパートの下には、住民用の駐車場があります。 事件の時間は、4:50。早朝。

[tegaki]ぷーーー[/tegaki]

けたたましいクラクションの音が。 なんぞそれ、とねぼけながらおもいつつ、「あ~、だれか変な車のとめかたして、車でれなくなったんだな、、とうつらうつら。

5分経過。 ・・・鳴りっぱなし。 ねばるなー。

10分経過。 ・・・鳴りっぱなし。 何かおかしい。。

なにか常識を逸している早朝の騒音に、アパート中の住民が起き出す音がきこえました。

ベランダから顔をだして下をのぞいてみると、既に不審に思い駐車場までいっているひとが。 こいつだ、こいつ。 と車をさして、ベランダから顔をだしている人たちにアピール。 なんと、その車、無人。

どーも、クラクションが壊れたらしく鳴りっぱなしに。。 イモビライザーっていうんですか? ぼくは車のことがまるで分からないのであれですが(なんたって免許をとったのが30すぎてからだ)、どーもその手の警報ではなくって、単純に壊れたようです。

ややしばらく鳴り続け、持ち主現れ、JAF の人が到着した模様。 ボンネット開けるも解消されず。

お客様の中に、自動車整備士の免許をお持ちの方はいらっしゃいませんか?

と、お医者さまを探すスッチーさんのまねをしてみたかったですが、みんな殺気立っている中で言う勇気はありませんでした(笑)

結局、鳴りっぱなしでレッカーされていったようでした。。 早朝 50分間クラクション鳴りっぱなしの悲劇的な事件、。

自分って無力だなぁとおもいましたが、きっと専門家ならすぐなおしちゃうんだろーなー。 後日談で原因は「接触」とのことでしたが(なんの接触だったかまでは不明)、素人かんがえだと、バッテリーを抜くとか、ハンドルをはずすとか? ・・・まったくわからんす。。

PHP のちょいなおしなんて比じゃない、高度な知識と手先をつかう難しい作業に違いありません。

なんもしらないひとの、分からないなりの知識って笑えると思うので、ぼくの車について知っていることをいっぱいかいてみます。 200% 間違っている確信がある。(笑)

車といえばエンジン。 ピストンがついてるやつっすね。。 ピストンの数が気筒数?その中にはいる容量が排気量? 昔、F1 は V12 っていってた気がする。

4サイクルってのが、吸入圧縮膨張排気で、ガソリンを圧縮してプラグで点火? これは技術家庭の時間にならったなー。 でもって、この発火点とかがマイコン制御になっていて、ROM 書き換えるとなんかかえれるって友達がいってた。

おでこのくるまは、オデッセーではない。 間違えがちなので要注意。(←関係ない

エムズライフ by みなみ、のくるまはライフである。(←豆知識

ターボは、走っている速度で空気をすいこんで、強制的にエンジンに酸素をいっぱいとりいれて、大爆発?

2サイクルは、YAMAHA のバイクで、えっと、後ろにオイルをかけれたりする?(←わけわかんない昔の記憶) バイクといえば TRX である。(←Masayan さんのところで覚えた

バイクで知っている車種は、、TRX と、ハヤブサ?(なんか速い?)、ZZR?(絶対違いそう)、ハーレー(ぼぼぼぼって鳴る)、ベンリー50(誰か乗ってた)、えっとあとなんだっけ、50cc のクラッチついてるほんだのやつ。。

うーんと、殿様スタイル。 ちょっぱー。 (←急に出てきた言葉を言ってみた

・・・きっとめちゃあほやな。 まいっか、笑ってください。(笑)

ええと、、、気を取り直して。 PC ねたでも。。

なにかいろいろつくりたいものがあるのですが、お疲れ気味でひとさまに使っていただけるようなものはありません。。

ぴこん、と突如思いつき、実質1時間くらいでできたのが「しょこたんぶろぐ screenlets」。

syokotan

しょこたんぶろぐの RSS を定期観測して、その中から画像を抽出してデスクトップがジェットとして表示するものです。 画面右、はちゅねさんの上のねこちゃんがそれで、左の画像達は取得してきて順次表示用にキャッシュしているものです。 最新の RSS に含まれる画像の中でぱたぱた1分おきに変わっていきます。

画像ぴこっとおしたら、その URL にとんでくとか、こういう Vista とか Google ガジェット芸能人とかの公式ブログで配布したらおもしろいのかな~と思いついてつくりました。 まぁこれは勝手に作っているもので(おまけに UNIX 用だ)、配布なんかできませんが、しょこたんみたいな更新が多いブログではなかなかいいかもです。 🙂

あと関係ないですが衝撃的だったのが、オープンソースメディアプレイヤーの Songbird がアップデートされ「白く」なったことです。。

songbird30

う~、黒い鳥さんが好きだったのにしろくなっちまいました。。 もちろんテーマでかえれるのは知っていますが、サイトのトレードカラーも白くなってしまい、ちょっとしょんぼり。 なんかクローズトソースの商用メディアプレイアーに対する挑戦ぽいソフトで、ダークカラーがお似合いだったのですが、ちょっと残念です(笑)

しかしながらパフォーマンスもチューニングされてきて速くなってきているので、なかなか良いですね!

てなわけで、つれずれでした。。 おしまい、。 🙂

あ、もーいっこあった! このブルーチーズがやばいくらい強烈だった!! ぼくはだいじょうぶだけど、ふつーのひとはだめにちがいない。。

DVC00045

WordPress Related Post for Japanese 1.01 (バグフィックスリリース)

昨日リリースの WordPress Related Post for Japanese のバグフィックス版をリリースします。 DB 構造がかわり、大変申し訳ないのですが辞書再生成となります。 すいません、すいません。。

JSeries に 1.01 としてリリースしております。 このプラグインのオプション削除(これでテーブル再生成および初期化されます)の簡単な手順ものせましたのでお手数ですが 1.00 試された方はご覧のうえアップデートください。

WordPress Plugins/JSeries » WordPress Related Post for Japanese

バージョン 1.01 は 1.00 からデータベースの構造が変わりました。 大変お手数ですが、(wp_)options テーブルから WpJRelated 行を削除してオプションの設定からお願いいたします。(辞書は一度クリアされます)

1.01 はいくつか重要なバグフィックスを含みますので、アップデートは必須とさせてください。

せっかくいい感じに辞書できたかたごめんなさい。。 うちもクリアしました。

昨日はたくさんのコメントありがとうございました。 非常に参考になりました。

以下変更点です。

  • 閲覧時の辞書作成コストの一部を、バックグラウンド側ではなく閲覧側に倒しました。 これにより閲覧時は1クエリふえますが、サーバ負荷は軽減されます。
  • 非公開投稿を関連検索対象としてしまっていたのを修正しました。 (thx yuriko さん) ただし非公開投稿の形態素分析は行います。 これは現在のところ仕様とさせてください。 (Yahoo に非公開投稿の内容が送られるのに抵抗があるかたは適宜ソースを修正してください)
  • MySQL 4 系で create table が動かない問題が修正されたハズです。 (thx yuriko さんをかもとさん)
  • テーブル定義で unique をきっていなかったので、辞書生成タイミングによってはキー重複がおきていたため unique を alter しました。 (tnx をかもとさん)
  • (wp_)morpheme テーブルの yahooid 項目を appid 項目に変更しました。 また関連検索時に appid 項目を アプリケーションID をもってひくように修正しました。(というか実装をわすれてました。。)
    Yahoo! 側のバージョンアップがあった場合のデータ切り替えや、他の形態素解析などがでてきた場合を想定して、既存データそのままに appid でなにかしら区分けしようというのが意図でした。(現在のところあまり意味を持っていません) (to yuriko さん)
  • 関連表示の HTML タグがおもいっきり間違っていたので修正しました(汗) (thx テルミナさんおでこさん)
  • add_options_page でマジックナンバーを使っているのを削除しました。 (thx yuriko さん)
  • get_class 時の小文字化のコメントが不適切だったのを修正しました。(thx yuriko さん)
  • 投稿タイトルの取得を get_the_title() に変更しました。(thx yuriko さん)
  • 不要な global 宣言を削除しました。(prefix の指定を wpdb のメンバに変更しました)
  • 少しだけコードのクリーンアップをしました。
  • テンプレートタグのようにつかえる、getRelated() メソッドを追加しました。 (tnx Masayan さんをかもとさん)

ソース差分は sourceforge の CVS から確認できます。

いやーいっぱい。。 すいません、こんなに使っていただけるのならいっかいアルファリリースすればよかたす。。 PHP 5 完全対応はちょっと遅らせます。 simpleXML の部分だけなのでちょっと迷い中です。

最後の getRelated は以下のようにすれば呼び出せるはずです。

<?php if(isset($wpjr)) echo $wpjr->getRelated(); ?>

is_single() 判定していないので、メッセージループの中にいれると好きな位置に関連が表示できます。 思うほどコストは高くないとは思いますが、関連エントリのタイトルなどを取りに行くため、多くの投稿を一度に表示するトップページのループなどでの利用は負荷の注意をして使ってください。

昨日、yuriko さんから興味深いコメントをいただいていますのでご紹介させてください。

形態素解析自体はもはや枯れた技術だと思うんですが、その結果を用いて記事同士の関連を見つけるのは、けっこう難しいことです。本プラグインでは、単語の出現頻度が似ているものを関連している記事としているようですが、それでどこまで適合率および再現率が出てくるかは、興味深いところです (「適合率」「再現率」という用語については Wikipedia の「情報検索」あたりを参照)。

関連記事を5本しかピックアップしないため再現性は重視されていないわけで、適合率を高めるのがポイントとなるでしょうか。

情報検索というのは、非常に面白い分野ですね。 ぼくはまったくもって素人なのであれですが、同じことをするにもいろいろなアルゴリズムがありそうです。

今回は、動的関連生成(その場で検索してしまう)をしたいという要件が最初にあったため、「高速でそれっぽく」というのがテーマでしたがはたして。 文章の内容によってもいろいろクレンジングやチューニングが必要になってきそうで興味はつきません。 🙂

では最後に開発風景などを。

一生懸命 SQL をかいて抽出を確認中の図。(← SQL が苦手である

jrelated21

CVS コミット前の差分確認中。

jrelated22

まだバグいる予感もしますので、何かありましたらご連絡ください。 🙂

WordPress Related Post for Japanese リリース

形態素解析を行い各投稿の関連記事を出力するプラグイン、WordPress Related Post for Japanese ができたのでおいてみます。 🙂 Yahoo! Japan の提供する形態素解析を用いて、その結果を元にランク付けを行い、シングルページの場合に投稿の最後に関連度トップ5 のタイトルとリンクを付与します。

このプラグインは実は 3年前からつくろうとおもっていたものです(笑)

hiromasa.zone :o) » WordPress Related Entries for J (仮称)

そのエントリに関連するエントリを抽出する、Related Entries for J (仮称) を作り始めてみました。

うーん、この手の日本語の処理は大変です。 漢字コード表とにらめっこで、なんとかデバッグ表示くらいまでは動くようになりました。

N-Gram のまねごとで辞書をつくって検索、、という予定だったのですが N-Gram 解析時にメモリ不足でとんだり、はたまた既存の投稿にたいする辞書作成のよい UI が思いつかなかったりで結局お蔵入りになったのでありました。

時はたち、Yahoo さんが形態素解析 API を提供してくれ、WordPress は wp-cron によるバックグラウンド動作をサポートしてくれ、そしてひろまさくんは PHP が少し分かるようになり(笑)、

[tegaki]期は熟した![/tegaki]

ってことでリリースとあいなりました。 🙂

WordPress Plugins/JSeries » WordPress Related Post for Japanese

Yahoo! Japan が提供する日本語形態素解析APIを利用して、WordPress の投稿をアナライズし、自動的に投稿の下部に「関連する記事」へのリンクを付与するプラグインです。

使い方ですが、プラグイン有効化してほっとけばそのうちいい感じに関連記事がでてくるようになります。 ほっとけば、、というのは過去記事に対しては閲覧をフックして、その投稿に辞書がまだなければ Yahoo! に問い合わせがいくようになっています。 なので、サイトアクセス数にもよりますが 2、3日くらい待ってもらえば次第にいい感じになっていくと思います。

bot の襲撃をうければ一気にできるでしょう。 まったりどうぞ。  🙂

jrelated10

jrelated12

形態素分析なんかはめったにできるもんじゃないので、Yahoo! からの貴重な RAW XML データもそのままテーブルに保持しています。 (wp_)morpheme というテーブルが新規にできているはずです。 最初はこのテーブルのできをみていると面白いかもしれません。

形態素解析。

形態素解析 – Wikipedia

対象言語の文法の知識(文法のルールの集まり)や辞書(品詞等の情報付きの単語リスト)を情報源として用い、自然言語で書かれた文を形態素Morpheme, おおまかにいえば、言語で意味を持つ最小単位)の列に分割し、それぞれの品詞を判別する作業を指す。

形態素解析は日本語を文章として解析してそれぞれの品詞を取得できます。 日本語って英語のようにスペースデリミタじゃないので単語の区切りを切り出すには意味の解析が必要です。

日本語の検索というのはこれが難しくって、形態素しないで普通に文字一致で検索をかけると「京都」の検索で「東京都」があたってしまったり、「パン」の検索で「ルパン」があたってしまったりするわけです。 🙂

今回は、このような不具合をさけるためまずは形態素で名詞を抽出し、それをハッシュして DB に登録。 そのハッシュに対して MySQL の like で検索しています。 またハッシュで格納する際に高頻度ででてくる単語を前に配置し、その位置情報も加味してランキングを決めています。(SQL 一発取りしたかったのもある)

まー紛れも多い実装で、やってみるまではドキドキでしたが、うちのサイトではなかなかの精度ででてきてくれるようで嬉しいです。

逆に、Yahoo! が知らない単語、たとえば「プラグイン」が「プラグ」と「イン」にわかれたり、「タチコマ」が「タチ」と「コマ」に分かれたりしていますが、双方はたいていはセットで出現するため大きな問題にはならなかったようです。

関連出さなくても、(wp_)morpheme テーブルを生成するだけでも後々いろいろ使えるかもしれません。(オプションでそういう設定もできます)

たとえば、WordPress のサイト検索をこのテーブル読むようにおきかえると、頻出順とかにもできますし、先ほどの部分一致の問題も回避できるかもです。 あと、robot 用のメタタグいれても面白いかもですね。 一応、隠しで使えそうな function をいれてあったりもします。(やろうとして力尽きたとも言う)

てなわけで、ぼくてきには機能を満たしているので 1.00 にしていますが、みなさんでいろいろ改造してみてください。 🙂

– まっじくなんばー多かったりソースコメントとかええかげんなのは、堪忍な。