狠狠撸

狠狠撸Share a Scribd company logo
Pythonで
ブックマーク検索エンジンを
   作ってみた。

   ニコ生Pythonユーザー会
       (PyNLUG)
         かわ
本日のアジェンダ

? ニコ生Pythonユーザー会(co116049)について
? 自己绍介
? Pythonでブックマーク検索エンジン
  o ?OpenID
  o 検索システム
  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:?kawa1128
Twitter:?@kawa1128
ニコ生コミュニティ:co70366
?????????????????????????????????
    ?http://com.nicovideo.jp/community/co70366
WEB:http://www.kawa1128.jp/


ニコ生での活動:
? Python放送(メイン)
? 気まぐれに歌う
? 時々ピアノを弾く
? 自分で撮った写真のスライドショー(延々30分)
                     2009/12/26 プログラミング生放送勉強会 第2回
自己绍介

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




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

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

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

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

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


         2009/12/26 プログラミング生放送勉強会 第2回
ブックマーク検索エンジン
結論
自分のブックマークをブックマークを一ヶ所で管理して、検索
 すれば、自分得?

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


類似サービス

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

→気にしない、気にしない。検索エンジン作ってみたいよ!
どうせなら、いろんな人に使って欲しいよね第2回
          2009/12/26 プログラミング生放送勉強会
ブックマーク検索エンジン
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.consumer
 import?openid.store.filestore
 import?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:?',?urlredirect
 print?




                                            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                   BookMarkDB                URLDB
 ----------------------   -----------------------   ----------------------
 openid                   user_id                   URL
 user_id                  url_id                    url_id
                          date

WordDB                    LocationDB
-----------------------   ----------------------
word                      url_id
word_id                   word_id
                          position

                            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回
最後までお聞きくださり
ありがとうございました。




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

More Related Content

笔测迟丑辞苍で検索エンジン2