Download - Pythonで検索エンジン2
![Page 1: Pythonで検索エンジン2](https://reader034.vdocuments.net/reader034/viewer/2022042514/5587fdccd8b42a503f8b46f5/html5/thumbnails/1.jpg)
Pythonで
ブックマーク検索エンジンを
作ってみた。
ニコ生Pythonユーザー会(PyNLUG)
かわ
![Page 2: Pythonで検索エンジン2](https://reader034.vdocuments.net/reader034/viewer/2022042514/5587fdccd8b42a503f8b46f5/html5/thumbnails/2.jpg)
2009/12/26 プログラミング生放送勉強会 第2回
本日のアジェンダ
• ニコ生Pythonユーザー会(co116049)について• 自己紹介• Pythonでブックマーク検索エンジン
o OpenIDo 検索システムo 今後の展開
![Page 3: Pythonで検索エンジン2](https://reader034.vdocuments.net/reader034/viewer/2022042514/5587fdccd8b42a503f8b46f5/html5/thumbnails/3.jpg)
2009/12/26 プログラミング生放送勉強会 第2回
ニコ生Pythonユーザー会(co116049)
ニコニコ生放送界隈で、Pythonを愛好するゆる〜い集まり。
参加資格• ニコニコ動画のアカウント登録している方(必須)• Pythonを愛してやまない(任意)• Pythonってよく分かんないけど、何か好き(任意)• Python大嫌い(任意)• ニシキヘビを飼っている(狩っているでも可)
![Page 4: Pythonで検索エンジン2](https://reader034.vdocuments.net/reader034/viewer/2022042514/5587fdccd8b42a503f8b46f5/html5/thumbnails/4.jpg)
2009/12/26 プログラミング生放送勉強会 第2回
ニコ生Pythonユーザー会(co116049)
参加方法http://com.nicovideo.jp/community/co116049 にアクセス
←クリック
![Page 5: Pythonで検索エンジン2](https://reader034.vdocuments.net/reader034/viewer/2022042514/5587fdccd8b42a503f8b46f5/html5/thumbnails/5.jpg)
2009/12/26 プログラミング生放送勉強会 第2回
ニコ生Pythonユーザー会(co116049)
参加特典• コミュニティで放送ができる(ただしプレミア会員のみ)• 誰かが放送されると、マイページに表示される
以上
![Page 6: Pythonで検索エンジン2](https://reader034.vdocuments.net/reader034/viewer/2022042514/5587fdccd8b42a503f8b46f5/html5/thumbnails/6.jpg)
2009/12/26 プログラミング生放送勉強会 第2回
自己紹介
HatenaID: kawa1128Twitter: @kawa1128ニコ生コミュニティ:co70366
http://com.nicovideo.jp/community/co70366WEB:http://www.kawa1128.jp/
ニコ生での活動:• Python放送(メイン)• 気まぐれに歌う• 時々ピアノを弾く• 自分で撮った写真のスライドショー(延々30分)
![Page 7: Pythonで検索エンジン2](https://reader034.vdocuments.net/reader034/viewer/2022042514/5587fdccd8b42a503f8b46f5/html5/thumbnails/7.jpg)
2009/12/26 プログラミング生放送勉強会 第2回
自己紹介
主な使用言語(利用頻度順): Perl Python C/C++ Ruby
![Page 8: Pythonで検索エンジン2](https://reader034.vdocuments.net/reader034/viewer/2022042514/5587fdccd8b42a503f8b46f5/html5/thumbnails/8.jpg)
2009/12/26 プログラミング生放送勉強会 第2回
自己紹介
自分のブックマークを整理したい!
↓自分がブックマークしたということは、自分にとって、重要?
↓ちょっと検索してみよう
↓あれ、このページってこないだ「お気に入り」に入れなかっ
たっけ?
![Page 9: Pythonで検索エンジン2](https://reader034.vdocuments.net/reader034/viewer/2022042514/5587fdccd8b42a503f8b46f5/html5/thumbnails/9.jpg)
2009/12/26 プログラミング生放送勉強会 第2回
ブックマーク検索エンジン
結論自分のブックマークをブックマークを一ヶ所で管理して、検索
すれば、自分得?
検索エンジンにも興味あるし、作ってしまおう!!
類似サービス
・はてなのブックマーク(はてぶ)
→気にしない、気にしない。検索エンジン作ってみたいよ!どうせなら、いろんな人に使って欲しいよね
![Page 10: Pythonで検索エンジン2](https://reader034.vdocuments.net/reader034/viewer/2022042514/5587fdccd8b42a503f8b46f5/html5/thumbnails/10.jpg)
2009/12/26 プログラミング生放送勉強会 第2回
ブックマーク検索エンジンOpenID
・OpenID(オープンアイディー)とはウェブサイトによらず使用できる認証システムの標準、およびそこで使用される識別子である。 (by Wikipedia 日本語版)
・自分でユーザー認証とかしなくても、他のところがやってくれる↓
自分でパスワードの管理をしなくてすむ。ただし、ユーザー管理の必要はある。
利用例)ATND: http://atnd.org/
![Page 11: Pythonで検索エンジン2](https://reader034.vdocuments.net/reader034/viewer/2022042514/5587fdccd8b42a503f8b46f5/html5/thumbnails/11.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042514/5587fdccd8b42a503f8b46f5/html5/thumbnails/12.jpg)
2009/12/26 プログラミング生放送勉強会 第2回
ブックマーク検索エンジンOpenIDの仕組み
![Page 13: Pythonで検索エンジン2](https://reader034.vdocuments.net/reader034/viewer/2022042514/5587fdccd8b42a503f8b46f5/html5/thumbnails/13.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042514/5587fdccd8b42a503f8b46f5/html5/thumbnails/14.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042514/5587fdccd8b42a503f8b46f5/html5/thumbnails/15.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042514/5587fdccd8b42a503f8b46f5/html5/thumbnails/16.jpg)
2009/12/26 プログラミング生放送勉強会 第2回
ブックマーク検索エンジン検索エンジン
• 自分最適化 (いまんとこスケールさせることは考えない)
• そもそも、自分で登録するんだからノイズが少ないので、スコアリングロジックは単純に!
• でも、技術的追求はしたいよね。• 形態素解析とかは、むりだけどね。
というわけで、
DBとしてSQLite3を利用 形態素解析器として、MeCabを利用。
![Page 17: Pythonで検索エンジン2](https://reader034.vdocuments.net/reader034/viewer/2022042514/5587fdccd8b42a503f8b46f5/html5/thumbnails/17.jpg)
2009/12/26 プログラミング生放送勉強会 第2回
ブックマーク検索エンジン検索エンジンのしゅるい
• 形態素解析を利用したものo 検索精度は割と高めo ディスク容量は中程度o Indexingに時間はかかる
• N-gram方式を利用したものo 検索漏れがないo Indexingが早いo ディスク容量は結構使う
![Page 18: Pythonで検索エンジン2](https://reader034.vdocuments.net/reader034/viewer/2022042514/5587fdccd8b42a503f8b46f5/html5/thumbnails/18.jpg)
2009/12/26 プログラミング生放送勉強会 第2回
ブックマーク検索エンジンクローラーとインデクサ
• リンクの深さ 5段くらい?• 一度クロールしても、しばらくして、ブックマーク
に新たに追加された場合再度クロール。それ以外の場合際クロールはしない。
• 認証とかされているとお手上げ。• 一度インデックシングした情報は消さない• できれば、キャッシュとして、クロールしたページ
は残しておきたい。
![Page 19: Pythonで検索エンジン2](https://reader034.vdocuments.net/reader034/viewer/2022042514/5587fdccd8b42a503f8b46f5/html5/thumbnails/19.jpg)
2009/12/26 プログラミング生放送勉強会 第2回
ブックマーク検索エンジンインデクサ & サーチャー
1.スクレイピングして単語に分解。2.単語を単語DBに登録3.出現位置と、URLをロケーションDBに登録
![Page 20: Pythonで検索エンジン2](https://reader034.vdocuments.net/reader034/viewer/2022042514/5587fdccd8b42a503f8b46f5/html5/thumbnails/20.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042514/5587fdccd8b42a503f8b46f5/html5/thumbnails/21.jpg)
2009/12/26 プログラミング生放送勉強会 第2回
ブックマーク検索エンジン宣伝!
http://bs.kawa1128.jp/
絶賛公開予定!!!!
![Page 22: Pythonで検索エンジン2](https://reader034.vdocuments.net/reader034/viewer/2022042514/5587fdccd8b42a503f8b46f5/html5/thumbnails/22.jpg)
2009/12/26 プログラミング生放送勉強会 第2回
ブックマーク検索エンジン宣伝!
http://bs.kawa1128.jp/
絶賛公開予定!!!!
未定!!
![Page 23: Pythonで検索エンジン2](https://reader034.vdocuments.net/reader034/viewer/2022042514/5587fdccd8b42a503f8b46f5/html5/thumbnails/23.jpg)
2009/12/26 プログラミング生放送勉強会 第2回
この子たちのために完成せず。
![Page 24: Pythonで検索エンジン2](https://reader034.vdocuments.net/reader034/viewer/2022042514/5587fdccd8b42a503f8b46f5/html5/thumbnails/24.jpg)
2009/12/26 プログラミング生放送勉強会 第2回
ブックマーク検索エンジンそのた
詳細は、はてなダイアリーでかいていこうと思うので、そちらを参照くださいませ。
→ http://d.hatena.ne.jp/kawa1128/
その他、個人的なことは
→ http://www.kawa1128.jp/
Twitterで聞いてもおk→ @kawa1128 で!
![Page 25: Pythonで検索エンジン2](https://reader034.vdocuments.net/reader034/viewer/2022042514/5587fdccd8b42a503f8b46f5/html5/thumbnails/25.jpg)
2009/12/26 プログラミング生放送勉強会 第2回
最後までお聞きくださりありがとうございました。