Archive for December, 2006

ブログの記事本文を抽出するAPI: TSUBUAN

Dec 28 2006 Published by funaki under つくる

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日現在停止中
現在サーバを止めています。

5 responses so far

KOSHIANの抽出アルゴリズムを少し改善

Dec 24 2006 Published by funaki under つくる

特徴語抽出APIのKOSHIANのアルゴリズムを少し改善しました。
APIの仕様に変更はありませんが抽出されるキーワードに若干の違いが出るかと思います。

第2弾のAPIとして「TSUBUAN」をつくっています。年末ぐらいにリリースできそうです。

No responses yet

3.141592653589793238462643383279502884197169399375105820974944592.jp

Dec 23 2006 Published by funaki under 感動する

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はπですね。。そういえば英語圏の入力だとπって文字は打てないのか。

No responses yet

PHP5.2.0でserialize()とjson_encode()はどちらが速いのか

Dec 22 2006 Published by funaki under いじる

結論としては速度はほぼ同じ。
ただし、配列の階層を深くしたときには面白い結果が出た。

コード(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

One response so far

Windows Vista vs. Linux Ubuntu

Dec 14 2006 Published by funaki under いじる

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で一番面白かったバグは、長時間使用していた最中にウィンドウのテーマが突然変わり始め、しばらくしてから元に戻るという現象。あまりの出来事に呆然としてしまった。

2 responses so far

KOSHIANの特徴語抽出アルゴリズムについて

Dec 12 2006 Published by funaki under いじる

lang=enを指定できるようにしました。対象が英文のときに指定してください。
documentもブログの記事からAPIと同じドメインに移動させつつ更新。怪しげですが英語で書いてみました。

Documentation for Term Extraction API “KOSHIAN”

ところでKOSHIANのアルゴリズムについてですが、要素としては

  • キーワードとなる辞書をごりごり作成
  • キーワードと入力された文章のパターンマッチング

前処理に形態素解析器(MeCabとかChaSen)は利用していません。はてブを見たら形態素解析のタグが一番大きくなっていてびっくりしました(笑)

辞書さえ作れればどんな言語にでもほぼ同じアルゴリズムでキーワードを抽出できるはずです。辞書は複数の情報源の組み合わせですが、Wikipediaを多く利用させていただいています。

現状で認識している問題点:

  • 入力時の全角英数字を半角に統一すべき
  • 表記のぶれに対して完全ではない
  • 3文字ぐらいの短いカタカナ単語が部分一致でヒットしてしまう
  • 辞書の更新

まだまだ要改善。が、精度はある程度のところで見切りをつけたいと思っています。100%の精度は実現不可能だと思うので。

早いうちに、キーワードに重み付けした結果を出せるようにしたい。
特徴語抽出は基礎技術的な位置付けなので、このAPIを使ってアプリをつくっていく予定。乞うご期待。

No responses yet

KOSHIAN APIを使って100shiki.comの頻出キーワードをランキング

Dec 10 2006 Published by funaki under つくる

文章からキーワードを抜き出す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つです。

One response so far

文章からキーワードを抜き出すAPI: KOSHIAN

Dec 10 2006 Published by funaki under つくる

文章からキーワードを抜き出す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です。

4 responses so far