Yahoo!Japan の日本語形態素解析Webサービスで遊んでみる
日本語対応のサーチエンジンをつくるとなったときに、肝となるであろう形態素解析。 この Web API をなんと Yahoo!Japan が解放してきました! こりゃーおもしろそう、ってことで早速 WordPress でちょっとしたプラグインを書いて、エントリをたべさせて遊んでみました。 🙂
Yahoo!デベロッパーネットワーク – テキスト解析 – 日本語形態素解析
日本語文を形態素に分割し、品詞、読みがなの付与、統計情報を取得できる機能を提供します。
サーチエンジンは日本語を取得しそのページにいったい何が書いてあるかと言うことを判断してインデックスしています(たぶん)。 英語などスペースで区切られた体型を持つ言語では、単語の現れる回数などで割と簡単(いやそれでもいろいろ難しいのだろうけど)にインデックスできそうですが、日本語ではこれができません。 単語間の区切りがないためまず文章から単語を抽出しなければいけない上に、さらに複雑に品詞によって単語が変化するので始末に負えない。。
てなわけで形態素解析というのは、こういった文章から単語やその品詞を解析する技術です。 おそらく、Yahoo! Japan でインデキシングに使われているルーチンのサブセットをそのまま解放してくれたのですから、これはとても興味深いことです。
前に、茶筅という形態素解析のソフトを使って遊んだことがありました。
hiromasa.zone :o) ≫ あなたのブログは何ブログ?
利用させていただいたのは、形態素解析システム茶筌。 詳しくはリンク先を・・・。 茶筅に全エントリをたべさせて、単語でサマって、それででもって、名詞と未知語(多くは茶筅の辞書にない名詞)でランキングしてみました。
やっぱ WordPress が多いのか?! 結果は以下に!(全エントリから 20 以上出現した単語)
このときはエントリを Windows に全部持ってきて、Windows 上で集計をかけたのです。 これが、Web サーバ上でできればいろいろできるだろーなーって思っていたのですが、まさか Web API ででてくるとは! 🙂
てなわけで、Yahoo!Japan の日本語形態素解析Webサービスを WordPress から使えるようにするプラグインを書いてみました。
wp-muramasa-0.01.zip公開停止しています
事前に言っておきますと、まだなんにもできない上に、豪快にバグっています。 :-P とりあえずで Yahoo! API に REST を投げる実験をして、結果見て今後どんなふうにしようかな~レベルのものなので、ユーザインターフェースからしてむちゃくちゃです。 あと、のら PEAR もはいっちゃっていますので、環境によっては redeclare するかもしれません。 万が一入れてみた方がいて、その場合は、、、適当になんとかしてください。。 (笑)
てなかんじで、エントリ選んで Yahoo! に解析してもらって結果を表示できるだけです。 でも、結構面白い! というか、 Yahoo! の形態素解析さすがにとても優秀です。
たとえば以下の文章。
- ここは札幌、北海道。
- 本日、やぼよう?があって Otsukare さんの携帯にメールを送る。 以前のエントリでカラオケの練習している?
- 練習してるかい ?
- ひろまささん。ライバルはこの二人です。
- リンク先は GYAO の「うたブロ」ベータ版ね
- っていうのがあったので、要件とは関係なく、なんとなく「すすきのでお待ちしております」って書きました。
- でその後ブログみたら、、
- 今から北海道に行って来ます
- 去年は「南へ走れ海の道を!!」って感じでしたが、今年は2泊3日でペンギン見てカニ食って温泉入って馬を眺めるために北へ飛びます。ついでに北のワッパーとぷちオフをと思ったのですが、ゴールデンウィークの谷間を利用した29,800円の激安ツアー故の殺人的スケジュールが更に殺人的となってしまうためパス。
- [tegaki]まじでこっちきとるー![/tegaki]
- 絶対会いに行ったる。 そうきめたひろまさくんは、勝手に今日会うことに決め、なんだかんだでつくとおもわれる 20時くらいをめがけてすすきのに出かけたのでした。
- とりあえず、ご飯食べてなかったのでメールがてらマックにイン。 そうこうしていると、Otsukare さんからメールが来ました。
- 「明日いかがですか?」
- うー、明日は仕事で何時になるか分からん。。 意を決して、
- 「今日はお疲れですか?いますすきのです(笑)」
- なんて強引なぼく。 そしたら、
- 「何時になるか分かりませんが、待っていてくれるなら行きます。(・∀・)]
- [tegaki]待ちます、いつまでも[/tegaki]
- マックを出てビールを飲みながら待てるお店に入店。 途中、「いま札幌南整形外科前です」と連絡が入る。
- [tegaki]どこだ!!わからん!![/tegaki]
- 店員さん、お客さん総動員でリサーチ。 どうもここから 30分地点くらいらしい。 近くにいる!
- で、到着メール。 お店のお金を払わずにお迎えに。(笑) 信号の向こうで手を振っている Otsukare さんハケーン。 無事合流。
- お店に戻る(笑)
- 今日は祝日。 いつもならお休みのお店。 あるいみ奇跡だと思った。
- hiromasa.zone の We Love WordPress、このエントリのモデルしてくれた女の子がいました。
- We Love WordPress in Japan!
- From: Otsukare - 2006/8/6 日曜日 Nighttime (Comment) |Edit This
- とうもろこし美味しかったと
- 右側の人に宜しく伝えてください :grin:
- ネタだったはずの、
- From: ひろまさ - 2006/8/7 月曜日 Nighttime (Comment) |Edit This
- そうそう、Otsukare さん車で札幌まできてくれて、すすきので遊(あば)れていかれたんですよ~。 :cool:
- …ボケはこれで良かったでしょうか。(笑)
- 現実に。。(笑)
- というわけで、めちゃ楽しいひとときでした。
- この...
- [tegaki]続きはWebで![/tegaki]
- じゃなくて、Otsukare さんの帰還をお待ちください。 写真がいくつかあるハズです。 :-)
これを名詞サマリを指定して REST すると、、
- [0] => Array
- (
- [count] => 8
- [surface] => tegaki
- [pos] => 名詞
- )
- [1] => Array
- (
- [count] => 6
- [surface] => Otsukare
- [pos] => 名詞
- )
- [2] => Array
- (
- [count] => 4
- [surface] => お店
- [pos] => 名詞
- )
- [3] => Array
- (
- [count] => 4
- [surface] => すすきの
- [pos] => 名詞
- )
- [4] => Array
- (
- [count] => 4
- [surface] => メール
- [pos] => 名詞
- )
- [5] => Array
- (
- [count] => 3
- [surface] => まさ
- [pos] => 名詞
- )
- [6] => Array
- (
- [count] => 3
- [surface] => 札幌
- [pos] => 名詞
- )
- [7] => Array
- (
- [count] => 2
- [surface] => 2006
- [pos] => 名詞
- )
- [8] => Array
- (
- [count] => 2
- [surface] => 8
- [pos] => 名詞
- )
- [9] => Array
- (
- [count] => 2
- [surface] => Comment
- [pos] => 名詞
- )
- [10] => Array
- (
- [count] => 2
- [surface] => Edit
- [pos] => 名詞
- )
- [11] => Array
- (
- [count] => 2
- [surface] => From
- [pos] => 名詞
- )
- [12] => Array
- (
- [count] => 2
- [surface] => Love
- [pos] => 名詞
- )
- [13] => Array
- (
- [count] => 2
- [surface] => Nighttime
- [pos] => 名詞
- )
- [14] => Array
- (
- [count] => 2
- [surface] => This
- [pos] => 名詞
- )
- [15] => Array
- (
- [count] => 2
- [surface] => We
- [pos] => 名詞
- )
- [16] => Array
- (
- [count] => 2
- [surface] => WordPress
- [pos] => 名詞
- )
- [17] => Array
- (
- [count] => 2
- [surface] => お待ち
- [pos] => 名詞
- )
- [18] => Array
- (
- [count] => 2
- [surface] => ここ
- [pos] => 名詞
- )
- [19] => Array
- (
- [count] => 2
- [surface] => ため
- [pos] => 名詞
- )
- [20] => Array
- (
- [count] => 2
- [surface] => エントリ
- [pos] => 名詞
- )
- [21] => Array
- (
- [count] => 2
- [surface] => マック
- [pos] => 名詞
- )
- [22] => Array
- (
- [count] => 2
- [surface] => 今日
- [pos] => 名詞
- )
- [23] => Array
- (
- [count] => 2
- [surface] => 北海道
- [pos] => 名詞
- )
- [24] => Array
- (
- [count] => 2
- [surface] => 練習
- [pos] => 名詞
- )
- [25] => Array
- (
- [count] => 1
- [surface] => 2
- [pos] => 名詞
- )
- [26] => Array
- (
- [count] => 1
- [surface] => 20
- [pos] => 名詞
- )
- [27] => Array
- (
- [count] => 1
- [surface] => 29,800
- [pos] => 名詞
- )
- [28] => Array
- (
- [count] => 1
- [surface] => 3
- [pos] => 名詞
- )
- [29] => Array
- (
- [count] => 1
- [surface] => 30
- [pos] => 名詞
- )
- [30] => Array
- (
- [count] => 1
- [surface] => 6
- [pos] => 名詞
- )
- [31] => Array
- (
- [count] => 1
- [surface] => 7
- [pos] => 名詞
- )
- [32] => Array
- (
- [count] => 1
- [surface] => GYAO
- [pos] => 名詞
- )
- [33] => Array
- (
- [count] => 1
- [surface] => Japan
- [pos] => 名詞
- )
- [34] => Array
- (
- [count] => 1
- [surface] => Web
- [pos] => 名詞
- )
- [35] => Array
- (
- [count] => 1
- [surface] => cool
- [pos] => 名詞
- )
- [36] => Array
- (
- [count] => 1
- [surface] => grin
- [pos] => 名詞
- )
- [37] => Array
- (
- [count] => 1
- [surface] => hiromasa
- [pos] => 名詞
- )
- [38] => Array
- (
- [count] => 1
- [surface] => in
- [pos] => 名詞
- )
- [39] => Array
- (
- [count] => 1
- [surface] => zone
- [pos] => 名詞
- )
- [40] => Array
- (
- [count] => 1
- [surface] => いかが
- [pos] => 名詞
- )
- [41] => Array
- (
- [count] => 1
- [surface] => いくつか
- [pos] => 名詞
- )
- [42] => Array
- (
- [count] => 1
- [surface] => うた
- [pos] => 名詞
- )
- [43] => Array
- (
- [count] => 1
- [surface] => お客さん
- [pos] => 名詞
- )
- [44] => Array
- (
- [count] => 1
- [surface] => お疲れ
- [pos] => 名詞
- )
- [45] => Array
- (
- [count] => 1
- [surface] => お迎え
- [pos] => 名詞
- )
- [46] => Array
- (
- [count] => 1
- [surface] => お金
- [pos] => 名詞
- )
- [47] => Array
- (
- [count] => 1
- [surface] => これ
- [pos] => 名詞
- )
- [48] => Array
- (
- [count] => 1
- [surface] => ご飯
- [pos] => 名詞
- )
- [49] => Array
- (
- [count] => 1
- [surface] => その後
- [pos] => 名詞
- )
- [50] => Array
- (
- [count] => 1
- [surface] => ちき
- [pos] => 名詞
- )
- [51] => Array
- (
- [count] => 1
- [surface] => とうもろこし
- [pos] => 名詞
- )
- [52] => Array
- (
- [count] => 1
- [surface] => どこ
- [pos] => 名詞
- )
- [53] => Array
- (
- [count] => 1
- [surface] => はず
- [pos] => 名詞
- )
- [54] => Array
- (
- [count] => 1
- [surface] => ひととき
- [pos] => 名詞
- )
- [55] => Array
- (
- [count] => 1
- [surface] => ぷち
- [pos] => 名詞
- )
- [56] => Array
- (
- [count] => 1
- [surface] => ぼく
- [pos] => 名詞
- )
- [57] => Array
- (
- [count] => 1
- [surface] => まじ
- [pos] => 名詞
- )
- [58] => Array
- (
- [count] => 1
- [surface] => めちゃ
- [pos] => 名詞
- )
- [59] => Array
- (
- [count] => 1
- [surface] => やぼ
- [pos] => 名詞
- )
- [60] => Array
- (
- [count] => 1
- [surface] => わけ
- [pos] => 名詞
- )
- [61] => Array
- (
- [count] => 1
- [surface] => イン
- [pos] => 名詞
- )
- [62] => Array
- (
- [count] => 1
- [surface] => ウィーク
- [pos] => 名詞
- )
- [63] => Array
- (
- [count] => 1
- [surface] => オフ
- [pos] => 名詞
- )
- [64] => Array
- (
- [count] => 1
- [surface] => カニ
- [pos] => 名詞
- )
- [65] => Array
- (
- [count] => 1
- [surface] => カラオケ
- [pos] => 名詞
- )
- [66] => Array
- (
- [count] => 1
- [surface] => ゴールデン
- [pos] => 名詞
- )
- [67] => Array
- (
- [count] => 1
- [surface] => スケジュール
- [pos] => 名詞
- )
- [68] => Array
- (
- [count] => 1
- [surface] => ツアー
- [pos] => 名詞
- )
- [69] => Array
- (
- [count] => 1
- [surface] => ネタ
- [pos] => 名詞
- )
- [70] => Array
- (
- [count] => 1
- [surface] => ハケーン
- [pos] => 名詞
- )
- [71] => Array
- (
- [count] => 1
- [surface] => ハズ
- [pos] => 名詞
- )
- [72] => Array
- (
- [count] => 1
- [surface] => パス
- [pos] => 名詞
- )
- [73] => Array
- (
- [count] => 1
- [surface] => パー
- [pos] => 名詞
- )
- [74] => Array
- (
- [count] => 1
- [surface] => ビール
- [pos] => 名詞
- )
- [75] => Array
- (
- [count] => 1
- [surface] => ブロ
- [pos] => 名詞
- )
- [76] => Array
- (
- [count] => 1
- [surface] => ブログ
- [pos] => 名詞
- )
- [77] => Array
- (
- [count] => 1
- [surface] => ベータ版
- [pos] => 名詞
- )
- [78] => Array
- (
- [count] => 1
- [surface] => ペンギン
- [pos] => 名詞
- )
- [79] => Array
- (
- [count] => 1
- [surface] => ボケ
- [pos] => 名詞
- )
- [80] => Array
- (
- [count] => 1
- [surface] => モデル
- [pos] => 名詞
- )
- [81] => Array
- (
- [count] => 1
- [surface] => ライバル
- [pos] => 名詞
- )
- [82] => Array
- (
- [count] => 1
- [surface] => リサーチ
- [pos] => 名詞
- )
- [83] => Array
- (
- [count] => 1
- [surface] => リンク
- [pos] => 名詞
- )
- [84] => Array
- (
- [count] => 1
- [surface] => 二人
- [pos] => 名詞
- )
- [85] => Array
- (
- [count] => 1
- [surface] => 人
- [pos] => 名詞
- )
- [86] => Array
- (
- [count] => 1
- [surface] => 今
- [pos] => 名詞
- )
- [87] => Array
- (
- [count] => 1
- [surface] => 今年
- [pos] => 名詞
- )
- [88] => Array
- (
- [count] => 1
- [surface] => 仕事
- [pos] => 名詞
- )
- [89] => Array
- (
- [count] => 1
- [surface] => 以前
- [pos] => 名詞
- )
- [90] => Array
- (
- [count] => 1
- [surface] => 何時
- [pos] => 名詞
- )
- [91] => Array
- (
- [count] => 1
- [surface] => 信号
- [pos] => 名詞
- )
- [92] => Array
- (
- [count] => 1
- [surface] => 入店
- [pos] => 名詞
- )
- [93] => Array
- (
- [count] => 1
- [surface] => 写真
- [pos] => 名詞
- )
- [94] => Array
- (
- [count] => 1
- [surface] => 利用
- [pos] => 名詞
- )
- [95] => Array
- (
- [count] => 1
- [surface] => 到着
- [pos] => 名詞
- )
- [96] => Array
- (
- [count] => 1
- [surface] => 前
- [pos] => 名詞
- )
- [97] => Array
- (
- [count] => 1
- [surface] => 北
- [pos] => 名詞
- )
- [98] => Array
- (
- [count] => 1
- [surface] => 北の
- [pos] => 名詞
- )
- [99] => Array
- (
- [count] => 1
- [surface] => 南
- [pos] => 名詞
- )
- [100] => Array
- (
- [count] => 1
- [surface] => 去年
- [pos] => 名詞
- )
- [101] => Array
- (
- [count] => 1
- [surface] => 右側
- [pos] => 名詞
- )
- [102] => Array
- (
- [count] => 1
- [surface] => 合流
- [pos] => 名詞
- )
- [103] => Array
- (
- [count] => 1
- [surface] => 向こう
- [pos] => 名詞
- )
- [104] => Array
- (
- [count] => 1
- [surface] => 地点
- [pos] => 名詞
- )
- [105] => Array
- (
- [count] => 1
- [surface] => 外科
- [pos] => 名詞
- )
- [106] => Array
- (
- [count] => 1
- [surface] => 奇跡
- [pos] => 名詞
- )
- [107] => Array
- (
- [count] => 1
- [surface] => 女の子
- [pos] => 名詞
- )
- [108] => Array
- (
- [count] => 1
- [surface] => 帰還
- [pos] => 名詞
- )
- [109] => Array
- (
- [count] => 1
- [surface] => 店員
- [pos] => 名詞
- )
- [110] => Array
- (
- [count] => 1
- [surface] => 意
- [pos] => 名詞
- )
- [111] => Array
- (
- [count] => 1
- [surface] => 手
- [pos] => 名詞
- )
- [112] => Array
- (
- [count] => 1
- [surface] => 携帯
- [pos] => 名詞
- )
- [113] => Array
- (
- [count] => 1
- [surface] => 故
- [pos] => 名詞
- )
- [114] => Array
- (
- [count] => 1
- [surface] => 整形
- [pos] => 名詞
- )
- [115] => Array
- (
- [count] => 1
- [surface] => 日曜日
- [pos] => 名詞
- )
- [116] => Array
- (
- [count] => 1
- [surface] => 明日
- [pos] => 名詞
- )
- [117] => Array
- (
- [count] => 1
- [surface] => 月曜日
- [pos] => 名詞
- )
- [118] => Array
- (
- [count] => 1
- [surface] => 本日
- [pos] => 名詞
- )
- [119] => Array
- (
- [count] => 1
- [surface] => 海の
- [pos] => 名詞
- )
- [120] => Array
- (
- [count] => 1
- [surface] => 温泉
- [pos] => 名詞
- )
- [121] => Array
- (
- [count] => 1
- [surface] => 激安
- [pos] => 名詞
- )
- [122] => Array
- (
- [count] => 1
- [surface] => 無事
- [pos] => 名詞
- )
- [123] => Array
- (
- [count] => 1
- [surface] => 現実
- [pos] => 名詞
- )
- [124] => Array
- (
- [count] => 1
- [surface] => 祝日
- [pos] => 名詞
- )
- [125] => Array
- (
- [count] => 1
- [surface] => 続き
- [pos] => 名詞
- )
- [126] => Array
- (
- [count] => 1
- [surface] => 総動員
- [pos] => 名詞
- )
- [127] => Array
- (
- [count] => 1
- [surface] => 要件
- [pos] => 名詞
- )
- [128] => Array
- (
- [count] => 1
- [surface] => 谷間
- [pos] => 名詞
- )
- [129] => Array
- (
- [count] => 1
- [surface] => 車
- [pos] => 名詞
- )
- [130] => Array
- (
- [count] => 1
- [surface] => 近く
- [pos] => 名詞
- )
- [131] => Array
- (
- [count] => 1
- [surface] => 途中
- [pos] => 名詞
- )
- [132] => Array
- (
- [count] => 1
- [surface] => 連絡
- [pos] => 名詞
- )
- [133] => Array
- (
- [count] => 1
- [surface] => 遊
- [pos] => 名詞
- )
- [134] => Array
- (
- [count] => 1
- [surface] => 道
- [pos] => 名詞
- )
- [135] => Array
- (
- [count] => 1
- [surface] => 関係
- [pos] => 名詞
- )
- [136] => Array
- (
- [count] => 1
- [surface] => 馬
- [pos] => 名詞
- )
なんて返ってきます。(返りはほんとは XML です。 PEAR を使って PHP 側で配列に変換している) wp-tegaki のタグが入っているのはご愛敬。
“すすきの”、”ベータ版” 、”お客さん”、”女の子” などが一つの名詞として認識されていますが、これはちゃんと辞書をもっていないと実現できないことですね。 29,800 なんてのもちゃんとくっついてひとつになっています。
あと爆速で一瞬で結果が返ってきます。 すげーな、これ。。
昨日も書きましたが、関連エントリや自動タグ付け、その他もろもろアイディア次第でいろいろできるのではないかと思います。 よしともさんのEntryKeywords 形式でいれるのも汎用性あってよさそうですね~。
もんもんと考えてみることにします。 🙂
From: よしとも - 2007/6/21 Thursday (Comment)
こんばんわ
いきなり自分の名前があってびっくり 😯
EntryKeywords 形式がカスタムフィールドで入れるってことでしたら、dbx_post_advanced フックで専用のフィールドを作るといいかもしれません。
先日このフックを見つけて、ここ数日研究してます。AmazonLink に商品検索フィールドを追加できないかとか、いろいろとたくらみ中
From: ひろまさ - 2007/6/21 Thursday (Comment)
よしともさん、こんにちは。 😀
yo_keyword に解析結果いい感じにしていれたら、EntryKeywords 経由でいい感じにリターンもらえるかな~って考えていました。 😉
dbx_post_advanced、初見でした。 おもしろそうですね! ぼくもちょっと調べてみます。