25
Pythonブックマーク検索エンジン作ってみた。 ニコ生Pythonユーザー会 PyNLUG) かわ

Pythonで検索エンジン2

Embed Size (px)

Citation preview

Page 1: Pythonで検索エンジン2

Pythonで

ブックマーク検索エンジンを

作ってみた。

ニコ生Pythonユーザー会(PyNLUG)

かわ

Page 2: Pythonで検索エンジン2

2009/12/26 プログラミング生放送勉強会 第2回

本日のアジェンダ

• ニコ生Pythonユーザー会(co116049)について• 自己紹介• Pythonでブックマーク検索エンジン

o  OpenIDo 検索システムo 今後の展開

Page 3: Pythonで検索エンジン2

2009/12/26 プログラミング生放送勉強会 第2回

ニコ生Pythonユーザー会(co116049)

ニコニコ生放送界隈で、Pythonを愛好するゆる〜い集まり。

参加資格• ニコニコ動画のアカウント登録している方(必須)• Pythonを愛してやまない(任意)• Pythonってよく分かんないけど、何か好き(任意)• Python大嫌い(任意)• ニシキヘビを飼っている(狩っているでも可)

Page 4: Pythonで検索エンジン2

2009/12/26 プログラミング生放送勉強会 第2回

ニコ生Pythonユーザー会(co116049)

参加方法http://com.nicovideo.jp/community/co116049 にアクセス

←クリック

Page 5: Pythonで検索エンジン2

2009/12/26 プログラミング生放送勉強会 第2回

ニコ生Pythonユーザー会(co116049)

参加特典• コミュニティで放送ができる(ただしプレミア会員のみ)• 誰かが放送されると、マイページに表示される

                       以上

Page 6: Pythonで検索エンジン2

2009/12/26 プログラミング生放送勉強会 第2回

自己紹介

HatenaID: kawa1128Twitter: @kawa1128ニコ生コミュニティ:co70366                                 

 http://com.nicovideo.jp/community/co70366WEB:http://www.kawa1128.jp/

ニコ生での活動:• Python放送(メイン)• 気まぐれに歌う• 時々ピアノを弾く• 自分で撮った写真のスライドショー(延々30分)

Page 7: Pythonで検索エンジン2

2009/12/26 プログラミング生放送勉強会 第2回

自己紹介

主な使用言語(利用頻度順): Perl  Python C/C++ Ruby

Page 8: Pythonで検索エンジン2

2009/12/26 プログラミング生放送勉強会 第2回

自己紹介

自分のブックマークを整理したい!

↓自分がブックマークしたということは、自分にとって、重要?

↓ちょっと検索してみよう

↓あれ、このページってこないだ「お気に入り」に入れなかっ

たっけ?

Page 9: Pythonで検索エンジン2

2009/12/26 プログラミング生放送勉強会 第2回

ブックマーク検索エンジン

結論自分のブックマークをブックマークを一ヶ所で管理して、検索

すれば、自分得?

検索エンジンにも興味あるし、作ってしまおう!!

類似サービス

・はてなのブックマーク(はてぶ)

→気にしない、気にしない。検索エンジン作ってみたいよ!どうせなら、いろんな人に使って欲しいよね

Page 10: Pythonで検索エンジン2

2009/12/26 プログラミング生放送勉強会 第2回

ブックマーク検索エンジンOpenID

・OpenID(オープンアイディー)とはウェブサイトによらず使用できる認証システムの標準、およびそこで使用される識別子である。                   (by Wikipedia 日本語版)

・自分でユーザー認証とかしなくても、他のところがやってくれる↓

自分でパスワードの管理をしなくてすむ。ただし、ユーザー管理の必要はある。

利用例)ATND: http://atnd.org/

Page 11: Pythonで検索エンジン2

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にリダイレクトされてくる。 

Page 12: Pythonで検索エンジン2

2009/12/26 プログラミング生放送勉強会 第2回

ブックマーク検索エンジンOpenIDの仕組み 

Page 13: Pythonで検索エンジン2

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. 認証完了

Page 14: Pythonで検索エンジン2

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 

Page 15: Pythonで検索エンジン2

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 

Page 16: Pythonで検索エンジン2

2009/12/26 プログラミング生放送勉強会 第2回

ブックマーク検索エンジン検索エンジン

• 自分最適化                   (いまんとこスケールさせることは考えない)

• そもそも、自分で登録するんだからノイズが少ないので、スコアリングロジックは単純に!

• でも、技術的追求はしたいよね。• 形態素解析とかは、むりだけどね。

というわけで、

 DBとしてSQLite3を利用 形態素解析器として、MeCabを利用。

Page 17: Pythonで検索エンジン2

2009/12/26 プログラミング生放送勉強会 第2回

ブックマーク検索エンジン検索エンジンのしゅるい

• 形態素解析を利用したものo 検索精度は割と高めo ディスク容量は中程度o Indexingに時間はかかる

• N-gram方式を利用したものo 検索漏れがないo Indexingが早いo ディスク容量は結構使う

Page 18: Pythonで検索エンジン2

2009/12/26 プログラミング生放送勉強会 第2回

ブックマーク検索エンジンクローラーとインデクサ

• リンクの深さ 5段くらい?• 一度クロールしても、しばらくして、ブックマーク

に新たに追加された場合再度クロール。それ以外の場合際クロールはしない。

• 認証とかされているとお手上げ。• 一度インデックシングした情報は消さない• できれば、キャッシュとして、クロールしたページ

は残しておきたい。

Page 19: Pythonで検索エンジン2

2009/12/26 プログラミング生放送勉強会 第2回

ブックマーク検索エンジンインデクサ & サーチャー

1.スクレイピングして単語に分解。2.単語を単語DBに登録3.出現位置と、URLをロケーションDBに登録

Page 20: Pythonで検索エンジン2

2009/12/26 プログラミング生放送勉強会 第2回

ブックマーク検索エンジンDB構成

UserDB----------------------openiduser_id

BookMarkDB-----------------------user_idurl_iddate

URLDB----------------------URLurl_id

WordDB-----------------------wordword_id

LocationDB----------------------url_idword_idposition

Page 21: Pythonで検索エンジン2

2009/12/26 プログラミング生放送勉強会 第2回

ブックマーク検索エンジン宣伝!

http://bs.kawa1128.jp/

絶賛公開予定!!!!

Page 22: Pythonで検索エンジン2

2009/12/26 プログラミング生放送勉強会 第2回

ブックマーク検索エンジン宣伝!

http://bs.kawa1128.jp/

絶賛公開予定!!!!

未定!!

Page 23: Pythonで検索エンジン2

2009/12/26 プログラミング生放送勉強会 第2回

この子たちのために完成せず。

Page 24: Pythonで検索エンジン2

2009/12/26 プログラミング生放送勉強会 第2回

ブックマーク検索エンジンそのた

詳細は、はてなダイアリーでかいていこうと思うので、そちらを参照くださいませ。

→ http://d.hatena.ne.jp/kawa1128/

その他、個人的なことは

→ http://www.kawa1128.jp/

Twitterで聞いてもおk→ @kawa1128 で!

Page 25: Pythonで検索エンジン2

2009/12/26 プログラミング生放送勉強会 第2回

最後までお聞きくださりありがとうございました。