Upload
yasukazu-kawasaki
View
2.463
Download
2
Embed Size (px)
Citation preview
Pythonで
ブックマーク検索エンジンを
作ってみた。
ニコ生Pythonユーザー会(PyNLUG)
かわ
2009/12/26 プログラミング生放送勉強会 第2回
本日のアジェンダ
• ニコ生Pythonユーザー会(co116049)について• 自己紹介• Pythonでブックマーク検索エンジン
o OpenIDo 検索システムo 今後の展開
2009/12/26 プログラミング生放送勉強会 第2回
ニコ生Pythonユーザー会(co116049)
ニコニコ生放送界隈で、Pythonを愛好するゆる〜い集まり。
参加資格• ニコニコ動画のアカウント登録している方(必須)• Pythonを愛してやまない(任意)• Pythonってよく分かんないけど、何か好き(任意)• Python大嫌い(任意)• ニシキヘビを飼っている(狩っているでも可)
2009/12/26 プログラミング生放送勉強会 第2回
ニコ生Pythonユーザー会(co116049)
参加方法http://com.nicovideo.jp/community/co116049 にアクセス
←クリック
2009/12/26 プログラミング生放送勉強会 第2回
ニコ生Pythonユーザー会(co116049)
参加特典• コミュニティで放送ができる(ただしプレミア会員のみ)• 誰かが放送されると、マイページに表示される
以上
2009/12/26 プログラミング生放送勉強会 第2回
自己紹介
HatenaID: kawa1128Twitter: @kawa1128ニコ生コミュニティ:co70366
http://com.nicovideo.jp/community/co70366WEB:http://www.kawa1128.jp/
ニコ生での活動:• Python放送(メイン)• 気まぐれに歌う• 時々ピアノを弾く• 自分で撮った写真のスライドショー(延々30分)
2009/12/26 プログラミング生放送勉強会 第2回
自己紹介
主な使用言語(利用頻度順): Perl Python C/C++ Ruby
2009/12/26 プログラミング生放送勉強会 第2回
自己紹介
自分のブックマークを整理したい!
↓自分がブックマークしたということは、自分にとって、重要?
↓ちょっと検索してみよう
↓あれ、このページってこないだ「お気に入り」に入れなかっ
たっけ?
2009/12/26 プログラミング生放送勉強会 第2回
ブックマーク検索エンジン
結論自分のブックマークをブックマークを一ヶ所で管理して、検索
すれば、自分得?
検索エンジンにも興味あるし、作ってしまおう!!
類似サービス
・はてなのブックマーク(はてぶ)
→気にしない、気にしない。検索エンジン作ってみたいよ!どうせなら、いろんな人に使って欲しいよね
2009/12/26 プログラミング生放送勉強会 第2回
ブックマーク検索エンジンOpenID
・OpenID(オープンアイディー)とはウェブサイトによらず使用できる認証システムの標準、およびそこで使用される識別子である。 (by Wikipedia 日本語版)
・自分でユーザー認証とかしなくても、他のところがやってくれる↓
自分でパスワードの管理をしなくてすむ。ただし、ユーザー管理の必要はある。
利用例)ATND: http://atnd.org/
2009/12/26 プログラミング生放送勉強会 第2回
ブックマーク検索エンジンOpenIDの仕組み
1. End User(サイト利用者)がConsumer(自サイト)にアクセス– Consumerに対して、End UserはIdentifierを渡す– Consumerは受け取ったIdentifierを元にIdentity Provider(実際に認
証するサイト)をDiscoveryする。– End Userは、Identity Providerで、認証をする。– Identity Providerから、Consumerにリダイレクトされてくる。
2009/12/26 プログラミング生放送勉強会 第2回
ブックマーク検索エンジンOpenIDの仕組み
2009/12/26 プログラミング生放送勉強会 第2回
ブックマーク検索エンジンOpenIDの例 はてなを利用した例
1. OpenID認証を利用したサイトに対して、はてなのIdentifier(http://www.hatena.ne.jp/kawa1128/)を渡す。
2. 受け取ったら、Identiferをライブラリに渡して、Discoveryする。
3. Discoveryした結果、認証するためのページのURIを得る。4. そこにリダイレクトさせるように、HTTP Status 301をクライア
ントにかえす。(この際に認証後にリダイレクトするページを渡しておく)
5. クライアントのブラウザが認証するサイトを表示する。6. 認証する。7. Identify Providerから、リダイレクトされてくる。8. 認証完了
2009/12/26 プログラミング生放送勉強会 第2回
ブックマーク検索エンジンOpenIDの例 はてなを利用した例
受け取る情報openid.sig xNttUpcaC57H/3vRPM=
openid.return_to http://www.kawa1128.jp/test/openid/verify.cgi?janrain_nonce=2009-12-23T15%3A14%3A08ZKCFGIu&openid1_claimed_id=http%3A%2F%2Fwww.hatena.ne.jp%2Fkawa1128%2F
janrain_nonce 2009-12-23T15:14:08ZKCFGIu
openid.response_nonce 2009-12-23T15:14:13ZmLDjrU
openid.claimed_id http://www.hatena.ne.jp/kawa1128/
openid.mode id_res
openid1_claimed_id http://www.hatena.ne.jp/kawa1128/
openid.signed mode,claimed_id,identity,return_to,response_nonce,assoc_handle
openid.identity http://www.hatena.ne.jp/kawa1128/
openid.assoc_handle 1260465265:cPZRiL75:bf7e6ec7eb
2009/12/26 プログラミング生放送勉強会 第2回
ブックマーク検索エンジンOpenIDの例 Pythonコード例
import openid.consumer.consumerimport openid.store.filestoreimport openid.extensions.sreg
auth_uri = 'http://www.hatena.ne.jp/kawa1128/'
openidsession = dict()store = openid.store.filestore.FileOpenIDStore("./store")consumer= openid.consumer.consumer.Consumer(openidsession, store)
request = consumer.begin(auth_uri)urlroot = "http://www.kawa1128.jp"urlredirect = request.redirectURL(urlroot, urlroot + '/test/openid/verify.cgi')
print 'Status: 301 Moved'print 'Location: ', urlredirectprint
2009/12/26 プログラミング生放送勉強会 第2回
ブックマーク検索エンジン検索エンジン
• 自分最適化 (いまんとこスケールさせることは考えない)
• そもそも、自分で登録するんだからノイズが少ないので、スコアリングロジックは単純に!
• でも、技術的追求はしたいよね。• 形態素解析とかは、むりだけどね。
というわけで、
DBとしてSQLite3を利用 形態素解析器として、MeCabを利用。
2009/12/26 プログラミング生放送勉強会 第2回
ブックマーク検索エンジン検索エンジンのしゅるい
• 形態素解析を利用したものo 検索精度は割と高めo ディスク容量は中程度o Indexingに時間はかかる
• N-gram方式を利用したものo 検索漏れがないo Indexingが早いo ディスク容量は結構使う
2009/12/26 プログラミング生放送勉強会 第2回
ブックマーク検索エンジンクローラーとインデクサ
• リンクの深さ 5段くらい?• 一度クロールしても、しばらくして、ブックマーク
に新たに追加された場合再度クロール。それ以外の場合際クロールはしない。
• 認証とかされているとお手上げ。• 一度インデックシングした情報は消さない• できれば、キャッシュとして、クロールしたページ
は残しておきたい。
2009/12/26 プログラミング生放送勉強会 第2回
ブックマーク検索エンジンインデクサ & サーチャー
1.スクレイピングして単語に分解。2.単語を単語DBに登録3.出現位置と、URLをロケーションDBに登録
2009/12/26 プログラミング生放送勉強会 第2回
ブックマーク検索エンジンDB構成
UserDB----------------------openiduser_id
BookMarkDB-----------------------user_idurl_iddate
URLDB----------------------URLurl_id
WordDB-----------------------wordword_id
LocationDB----------------------url_idword_idposition
2009/12/26 プログラミング生放送勉強会 第2回
ブックマーク検索エンジン宣伝!
http://bs.kawa1128.jp/
絶賛公開予定!!!!
2009/12/26 プログラミング生放送勉強会 第2回
ブックマーク検索エンジン宣伝!
http://bs.kawa1128.jp/
絶賛公開予定!!!!
未定!!
2009/12/26 プログラミング生放送勉強会 第2回
この子たちのために完成せず。
2009/12/26 プログラミング生放送勉強会 第2回
ブックマーク検索エンジンそのた
詳細は、はてなダイアリーでかいていこうと思うので、そちらを参照くださいませ。
→ http://d.hatena.ne.jp/kawa1128/
その他、個人的なことは
→ http://www.kawa1128.jp/
Twitterで聞いてもおk→ @kawa1128 で!
2009/12/26 プログラミング生放送勉強会 第2回
最後までお聞きくださりありがとうございました。