KOSHIAN に続いてTSUBUANをつくりました。
URLを与えるとそのページに含まれる本文らしき文章をXMLで返すAPIです。
RESTで引数はurlしかありませんが、一応仕様はこちらに。
http://zuzara.dyndns.org/docs/contentextractionapi.html
サンプルレスポンス:
http://zuzara.dyndns.org/api/tsubuan?url=http://blog.zuzara.com/2006/12/12/173/
アルゴリズムは以前作ったスクリプト の改良、といった感じです。精度をちゃんと数字にしていませんが、汎用的にどんなブログでも取得できるようになったと思います。必ずしもブログのみが対象ではなく、言語による依存もありません。精度実験では中国語のブログも対象にしてみました。
以前あった、ceekzさんのアイディアも使わせていただきました。
ブログの本文抽出にチャレンジ – Ceekz Logs
・直前のエントリと diff を取る
・RSS の description と比較する
と、句読点の数も本文らしき箇所の候補が複数あった場合、考慮しています。
現時点で認識しているうまく抽出できないケースは、
本文の文字数が極端に少ない
はてなのように1つのページに複数の記事がある
一部の、Yahoo!ブログやspaces.live.comのようにdivが改行ごとに含まれるような場合
コメントがやたら長い
本文以外にもたくさん文章がある
サイドバーなど、不要な文字列も混じる
HTMLを解析しているのでHTMLがきれいでないとうまくいきません。コメントに関しては、分離したかったのですが本文の一部として取得するケースが多いと思います。
またAPIとしては若干、結果を返すまでの時間が長いです。あくまで実験という位置づけで試していただければ幸いです。
注意点
サーバの回線が細いのが不安です。
将来的にドメイン名が変わる可能性が高いです。
蹴飛ばしてケーブルが抜ける等の生活に密着した原因でサーバが止まる可能性があります。
やむを得ず後方互換性のない仕様に変更される可能性があります。
事前の告知なしにサービスを終了する可能性もゼロではありません。
お断り
このAPIは無保証です。本APIを利用して発生したいかなる損害に対しても責任を負いません。
商用利用はご相談ください。
1秒に1回以下のリクエストとしてください。
研究目的等で大量のデータを解析する必要がある場合、ご相談ください。
スパイウェアや不正利用、その他法律に反することには利用できません。
本サービスと全く同機能のサービスを本サービスを利用して公開しないでください。
ご意見等はお気軽にコメント欄までお願いします。
メールでもOKです。
2007年10月11日現在停止中
現在サーバを止めています。
特徴語抽出APIのKOSHIAN のアルゴリズムを少し改善しました。
APIの仕様に変更はありませんが抽出されるキーワードに若干の違いが出るかと思います。
第2弾のAPIとして「TSUBUAN」をつくっています。年末ぐらいにリリースできそうです。
diggで日本の記事が取り上げられているとちょっとうれしいのですがこんなのが。
digg – 100,000 Numbers: Japanese Man’s Search Of Meaning Of Life By Memorizing PI
達成したのは10月4日らしい。すごすぎる。そしてTheJapanTimesの写真 の原口氏がお茶目すぎる。
公式サイトもありました。
前人未到の100,000桁の新記録を達成!
PIって何の略だっけ、と思ってググる と何やらすごいドメインのサイトが。
http://3.141592653589793238462643383279502884197169399375105820974944592.jp/
グーグル先生の電卓機能はπ = 3.14159265と書いている。
で、PIはπですね。。そういえば英語圏の入力だとπって文字は打てないのか。
結論としては速度はほぼ同じ。
ただし、配列の階層を深くしたときには面白い結果が出た。
コード(test.php):
<?php
// Configure Command => './configure' '--disable-all' '--without-all' '--enable-json'
$data = array();
for ($i = 0; $i < $argv[1]; $i++) {
$data[] = array(uniqid() => uniqid(), $data); // 階層をどんどん深くする配列
//$data[] = uniqid(); // 単純な配列
}
if (@$argv[2] == '1') {
$buf = json_encode($data);
json_decode($buf);
} else {
$buf = serialize($data);
unserialize($buf);
}
実行(Linux上のterminalで):
% time /usr/local/src/php-5.2.0/sapi/cli/php -c /etc/php.ini test.php 10 1
PHP5.2.0はコードのコメントにあるconfigureオプションをつけて、makeだけして実行。他のバージョンが動いていたのでmake installはしていない。
ベンチマークはいつものPEARのBenchmark_Timer.phpでやると実際の経過秒と表示される秒数に乖離が見られたのでtimeでやった。適当に10回ぐらいやって平均値を出す。
結果。json_encodeとだけあるのは、json_decodeのところをコメントにして実行したとき。serializeも同じ。縦軸は実行にかかった秒数。横軸はargv[1]の数(配列の深さと大きさ)です。
まず、json_decodeがargv[1]を10にしたところで落ちる。(エラーメッセージは表示されない)json_encodeだけなら20でも2秒程度で動く。
注目は、serialize。16を超えたところで一気に処理速度が落ち、20だと40秒近く要した。unserializeは配列の階層が増えても落ちることはなかった。
普通はそれほど深い階層の配列にすることはないが、注意は必要かもしれない。
階層が1の配列、array(1, 2, 3, …)の場合、10000でjson_encode+json_decode、serialize+unserializeともに10秒程度。
なおCPUは
% cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 15
model : 4
model name : Intel(R) Pentium(R) D CPU 2.80GHz
stepping : 7
cpu MHz : 2793.245
cache size : 1024 KB
Ubuntuに乗り換えて 3週間程。解決しない不満点がまだあります。
デュアルモニタのせいか、Firefoxなどが突然落ちる
gvimやterminalとのコピペのコマンドがスムーズでない
switch xorg.conf files (dual, single)
試していませんが、外部ディスプレイを外したときはデュアルディスプレイの設定を解除できるようです。
しかし、、ときどきすっと吸い込まれるように落ちる現象の原因が突き止められず。
The application ‘Gecko’ lost its connection to the display
云々、というエラーは出るのですが。
コピペの問題は、puttyの右クリックでペースト、Windowsのgvimはクリップボードとバッファが同じに扱われるのに慣れているせいです。
逆にWindowsXPよりいい点は、
フォントがきれい
当然のことながらgccがネイティブで使える、LAMPそのままの開発環境
フォントはとにかくきれい。
で、Windows Vista。
ClearTypeのメイリオは、ClearTypeなしのOsakaフォントより読みづらい、というのが第一印象。GUI全体で適用されるのでまずまずきれいですが、どうもブラウザやエディタには向いていない。好みの問題だとは思いますが、Osakaフォントのアンチエイリアスの方が好みです。
ただ、VistaでClearTypeをオフにするとメイリオを使っているすべての文字がガタガタになってしまう。そうするとテーマをクラシックにすることになり、、XPと何も変わらないという事態に。。
問題点としては
インストーラーがディスプレイの解像度をちゃんと認識しなかったのでダサかった
ドライバは認識するのに音が鳴らなかった(Vista用があった ので入れたら直った)
アイコンがかっこよくなったが、icoによっては引き伸ばされてダサい
exeを実行するときに右クリックして「管理者として実行」しないとうまく動かないアプリがあった(keyctrl )
紙copi Liteがインストールできない!
XPよりよくなった点は、、うーん。
肝心のセキュリティ面は、アラートがずいぶん増えたなぁ、という印象。XPで別段困っていなかったので、恩恵を感じることもなく。
Aero等、見た目の機能を全部切ってしまうと新OSのワクワク感は激減なわけですが、さすがにWindowsとしての操作感はUbuntu(Gnome)に比べて安定している気がします。
Ubuntuと比べると起動時間はどっこいどっこい。
Mac OS X Leopardももうじきご登場のようで。こちらも楽しみではあります。
追記:
今さっきVistaで、iTunesで曲をインポート中にきゅぅんと嫌な音を立てていきなり電源が落ちた。。
そういえばUbuntuで一番面白かったバグは、長時間使用していた最中にウィンドウのテーマが突然変わり始め、しばらくしてから元に戻るという現象。あまりの出来事に呆然としてしまった。
lang=enを指定できるようにしました。対象が英文のときに指定してください。
documentもブログの記事からAPIと同じドメインに移動させつつ更新。怪しげですが英語で書いてみました。
Documentation for Term Extraction API “KOSHIAN”
ところでKOSHIANのアルゴリズムについてですが、要素としては
キーワードとなる辞書をごりごり作成
キーワードと入力された文章のパターンマッチング
前処理に形態素解析器(MeCabとかChaSen)は利用していません。はてブを見たら 形態素解析のタグが一番大きくなっていてびっくりしました(笑)
辞書さえ作れればどんな言語にでもほぼ同じアルゴリズムでキーワードを抽出できるはずです。辞書は複数の情報源の組み合わせですが、Wikipediaを多く利用させていただいています。
現状で認識している問題点:
入力時の全角英数字を半角に統一すべき
表記のぶれに対して完全ではない
3文字ぐらいの短いカタカナ単語が部分一致でヒットしてしまう
辞書の更新
まだまだ要改善。が、精度はある程度のところで見切りをつけたいと思っています。100%の精度は実現不可能だと思うので。
早いうちに、キーワードに重み付けした結果を出せるようにしたい。
特徴語抽出は基礎技術的な位置付けなので、このAPIを使ってアプリをつくっていく予定。乞うご期待。
文章からキーワードを抜き出すKOSHIAN API を使って100shiki.comの2005〜2006年の記事を解析してみました。記事本文の中に10回以上登場したキーワードのランキングになります。
順位、キーワード
登場回数
1. サイト
881
2. サービス
381
3. ツール
179
4. ブログ
170
5. RSS
134
6. ウェブ
124
7. データ
76
8. コンテンツ
74
9. IPOD
69
10. 検索エンジン
67
11. アイテム
63
12. 結果
61
13. インターフェース
57
14. ユニー
57
15. メール
57
16. URL
55
17. ページ
54
18. イデア
53
19. ファイル
49
20. ワード
48
21. オンライン
48
22. メッセージ
45
23. システム
43
24. リスト
41
25. 時代
41
26. ボタン
40
27. 組み合わせ
38
28. ニュース
38
29. GOOGLE
37
30. ゲーム
36
31. 毎日
36
32. カード
35
33. インターネット
34
34. クリック
34
35. デザイン
33
36. シーン
32
37. ネット
31
38. AJAX
31
39. テキスト
31
40. ブックマーク
31
41. PODCASTING
31
42. ビジネス
31
43. リンク
30
44. 自転車
29
45. マウス
29
46. ダウンロード
29
47. コード
29
48. ソフトウェア
28
49. チェック
28
50. ユーザー
28
51. コメント
28
52. キーボード
27
53. 日本
27
54. 部屋
27
55. プログラム
27
56. カメラ
27
57. パソコン
27
58. サーバー
26
59. バッグ
26
60. インストール
25
61. ポイント
24
62. メディア
24
63. ウィンドウ
23
64. FLICKR
22
65. コンセプト
22
66. リアル
22
67. メッセンジャー
20
68. ブラウザ
20
69. アプリケーション
20
70. ブロガー
20
71. クリエイティブ
20
72. RSSリーダー
20
73. SKYPE
19
74. ガジェット
19
75. 携帯電話
19
76. .COM
19
77. ビデオ
19
78. ドラッグ
18
79. どんどん
18
80. 開発
18
81. SHUFFLE
18
82. テレビ
18
83. コミュニケーション
17
84. フィード
17
85. コンピュータ
17
86. イベント
17
87. おしゃれ
17
88. ケース
17
89. ショー
16
90. アクセス
16
91. トレンド
16
92. 文字
16
93. アラー
16
94. デスクトップ
16
95. マンガ
16
96. THE
16
97. FLASH
16
98. アップロード
16
99. オークション
16
100. ストーリー
16
101. ニッチ
16
102. プロジェクト
16
103. デジタル
16
104. トイレ
16
105. アプリ
15
106. スポーツ
15
107. DVD
15
108. スペース
15
109. レビュー
15
110. レイアウト
15
111. コミュニティ
15
112. コスト
15
113. レベル
14
114. セキュリティ
14
115. プラグイン
14
116. キャラクター
14
117. ドメイン
14
118. USB
14
119. リアルタイム
14
120. リズム
14
121. スライド
13
122. コピー
13
123. ランダム
13
124. ラジオ
13
125. ポケット
13
126. ジョン
13
127. ポート
13
128. HTML
13
129. CSS
13
130. USBメモリー
13
131. SNS
13
132. イメージ
13
133. カスタマイズ
12
134. ペット
12
135. パスワード
12
136. 100
12
137. アイコン
12
138. ホームページ
12
139. ワイン
12
140. ソーシャルブックマーク
12
141. カレンダー
12
142. お気に入り
11
143. ドロップ
11
144. ライト
11
145. WIKI
11
146. WINDOWS
11
147. バック
11
148. GPS
11
149. バックアップ
11
150. ベッド
11
151. カバー
11
152. マーケット
11
153. ダイエット
11
154. 最適化
11
155. フィードバック
11
156. マーケティング
11
157. プロセス
11
158. ベース
11
159. ストレス
11
160. コーヒー
11
161. ステップ
11
162. デジカメ
10
163. API
10
164. フラッシュ
10
165. ブログパーツ
10
166. 正規表現
10
167. レンジ
10
168. ブックマークレット
10
169. ギフト
10
170. かわいい
10
171. アクセサリー
10
172. イミン
10
173. タイトル
10
174. チャット
10
175. モニター
10
176. プログラミング
10
177. フォーム
10
若干、意味不明のキーワードも混じってしまっているのでAPIの精度にはまだまだ改良の余地がありそうです。とはいえ、ちょっと意外だったり面白いキーワードも抽出されていて興味深いです。
データは2M程で、同じネットワーク内のマシンからPHPで書いたスクリプトでAPIを叩いて解析すると3.5秒程度。
前回いただいた 100shiki.comのデータを再び使わせていただきました。ちなみにAPIはこのときの開発合宿の成果物の1つです。
文章からキーワードを抜き出すAPIを実験的に公開します!
専門用語で言うところの特徴語抽出です。
APIとして公開することで実証実験、精度向上を目指します。
ぜひいろいろ試してみてください。
2007年10月11日現在停止中
現在サーバを止めています。
ご要望が多ければ復活するかもしれません。コメントください。
仕様
URL
http://zuzara.dyndns.org/api/koshian
入力
method
parameter
value
description
GET/POST (REST)
q
string
キーワードを抜き出したい文章(UTF-8)
出力
ResultSet
ルート要素
Result
キーワード(アルファベットは大文字に変換されます。文章中に登場した順序で出力され、重複は排除されません。UTF-8。)
id(Resultの属性)
同義語は同じidになります。
エラー
<error>
<message>GET/POST param q is invalid.</message>
</error>
米Y!の同じ機能を持ったAPIを参考にしています。
Term Extraction Documentation for Yahoo! Search Web Services
サンプルレスポンス
http://zuzara.dyndns.org/api/koshian?q=Microsoft+マイクロソフト
<ResultSet>
<Result id="2454">MICROSOFT</Result>
<Result id="2454">マイクロソフト</Result>
</ResultSet>
デモフォーム
適当な文章を入力してください。
注意点
サーバの回線が細いのが不安です。
将来的にドメイン名が変わる可能性が高いです。
蹴飛ばしてケーブルが抜ける等の生活に密着した原因でサーバが止まる可能性があります。
やむを得ず後方互換性のない仕様に変更される可能性があります。
事前の告知なしにサービスを終了する可能性もゼロではありません。
お断り
このAPIは無保証です。本APIを利用して発生したいかなる損害に対しても責任を負いません。
商用利用はご相談ください。
1秒に1回以下のリクエストとしてください。
研究目的等で大量のデータを解析する必要がある場合、ご相談ください。
スパイウェアや不正利用、その他法律に反することには利用できません。
本サービスと全く同機能のサービスを本サービスを利用して公開しないでください。
ご意見等はお気軽にコメント欄までお願いします。
メールでもOKです。