SlideShare 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

PDF
MongoDBではじめるカジュアルなタイムラインシステム
PPT
ザ・ドキュメント~うまくいかないNoSQL~
PDF
汎用apiサーバの構築
PDF
Python と Xpath で ウェブからデータをあつめる
PDF
Nodejsによるapiサーバ構築事例
PDF
Casual Compression on MongoDB
PDF
PythonによるWebスクレイピング入門
PDF
AngularJS+TypeScript - AngularJS 1周年記念勉強会
MongoDBではじめるカジュアルなタイムラインシステム
ザ・ドキュメント~うまくいかないNoSQL~
汎用apiサーバの構築
Python と Xpath で ウェブからデータをあつめる
Nodejsによるapiサーバ構築事例
Casual Compression on MongoDB
PythonによるWebスクレイピング入門
AngularJS+TypeScript - AngularJS 1周年記念勉強会

What's hot (20)

PDF
My misstake on Ansible’s lineinfile module
PPTX
Django/Celeyを用いたデータ分析Webアプリケーションにおける非同期処理の設計と実装
PDF
映画にでてくるハッカーになりたい - YAPC Asia 2010
PDF
どきっ!三行で作るランダムダンジョン!?~WEBもあるよ!~ - 2010/8/21 群馬Web研究会(勉強会)
PDF
bottleで始めるWEBアプリの最初の一歩
PDF
Testing in Sinatra
PDF
初めてのPadrino
PDF
ElasticsearchとTasteプラグインで作るレコメンドシステム
PDF
Start-padrino
PPT
14対話bot発表資料
PDF
Db tech showcase2015 how to replicate between clusters
PDF
これからのJSの話をしよう ~jQueryで作るTwitterアプリ~ (Gunma.web #2 2010/10/9)
PDF
Werkzeugを使ってみた #osakapy 2016/04
PDF
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
PDF
MongoDBざっくり解説
PDF
RxJava初心者の私が良いと思ったやり方、素敵だと思った資料など
PDF
データベース勉強会 In 広島 mongodb
PDF
Bpstudy #37 djagno tips
PDF
MongoDB Configパラメータ解説
PDF
Mac OSにおけるShellコマンドの活⽤用 (Xojo 勉強会)
My misstake on Ansible’s lineinfile module
Django/Celeyを用いたデータ分析Webアプリケーションにおける非同期処理の設計と実装
映画にでてくるハッカーになりたい - YAPC Asia 2010
どきっ!三行で作るランダムダンジョン!?~WEBもあるよ!~ - 2010/8/21 群馬Web研究会(勉強会)
bottleで始めるWEBアプリの最初の一歩
Testing in Sinatra
初めてのPadrino
ElasticsearchとTasteプラグインで作るレコメンドシステム
Start-padrino
14対話bot発表資料
Db tech showcase2015 how to replicate between clusters
これからのJSの話をしよう ~jQueryで作るTwitterアプリ~ (Gunma.web #2 2010/10/9)
Werkzeugを使ってみた #osakapy 2016/04
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
MongoDBざっくり解説
RxJava初心者の私が良いと思ったやり方、素敵だと思った資料など
データベース勉強会 In 広島 mongodb
Bpstudy #37 djagno tips
MongoDB Configパラメータ解説
Mac OSにおけるShellコマンドの活⽤用 (Xojo 勉強会)
Ad

Similar to Pythonで検索エンジン2 (20)

PDF
07 ソーシャルブックマーク(2)
PDF
091009 Identity Conference #6 ritou
PPT
Mohawk presentation-gdg-kobe
PDF
ページャ実装マニアックス
PDF
20091030cakephphandson 02
PDF
リアルFacebookガジェットを作った(ロングバージョン)
PPT
Tokyowebmining5 yokkuns
PDF
データマイニング+WEB勉強会資料第6回
PDF
DSIRNLP#3 LT: 辞書挟み込み型転置インデクスFIg4.5
PDF
はてなブックマーク in Scala
PDF
「Html sql」で図書館hpにアクセスしてみよう
PDF
Elasticsearch入門 pyfes 201207
KEY
Yesodを支える技術
PDF
74thオンラインテキストブックマーク
PDF
実践スクレイピング
PDF
Webteko 20090925
PPTX
Movable type seminar 20120703
PDF
RとSQLiteで気軽にデータベース作成
PDF
20080327 ku-librarians勉強会 #98:データベースからデータだけをいただく方法(web api入門)
PDF
Ocs2012 tokyo/spring plone
07 ソーシャルブックマーク(2)
091009 Identity Conference #6 ritou
Mohawk presentation-gdg-kobe
ページャ実装マニアックス
20091030cakephphandson 02
リアルFacebookガジェットを作った(ロングバージョン)
Tokyowebmining5 yokkuns
データマイニング+WEB勉強会資料第6回
DSIRNLP#3 LT: 辞書挟み込み型転置インデクスFIg4.5
はてなブックマーク in Scala
「Html sql」で図書館hpにアクセスしてみよう
Elasticsearch入門 pyfes 201207
Yesodを支える技術
74thオンラインテキストブックマーク
実践スクレイピング
Webteko 20090925
Movable type seminar 20120703
RとSQLiteで気軽にデータベース作成
20080327 ku-librarians勉強会 #98:データベースからデータだけをいただく方法(web api入門)
Ocs2012 tokyo/spring plone
Ad

Recently uploaded (9)

PPTX
Document from Suhani (2).pptx on the following topic
PPTX
株式会社フライク_______採用ピッチ資料_____update20250801
PDF
AI活用の成果が変わる!生成AI時代の速読・読解力トレーニング「AI Reading Lab」
PPTX
データサイエンス研修提案資料 RIZAPビジネスイノベーション株式会社.pptx
PDF
【QYResearch】世界製薬業界の市場変革と将来展望における多角的な事業展開の探求
PDF
自動鉱山スキャナー、グローバルトップ11企業のランキングと市場シェア2025~2031年.pdf
PDF
西都 採用サイト掲載用ピッチ資料 | 安心して働ける環境と成長できるキャリアパス
PDF
受発注バスターズ説明資料  (2025_08_13~) Saleshub掲載用.pdf
PDF
Fellowship Co.,Ltd. Company Overview for Students
Document from Suhani (2).pptx on the following topic
株式会社フライク_______採用ピッチ資料_____update20250801
AI活用の成果が変わる!生成AI時代の速読・読解力トレーニング「AI Reading Lab」
データサイエンス研修提案資料 RIZAPビジネスイノベーション株式会社.pptx
【QYResearch】世界製薬業界の市場変革と将来展望における多角的な事業展開の探求
自動鉱山スキャナー、グローバルトップ11企業のランキングと市場シェア2025~2031年.pdf
西都 採用サイト掲載用ピッチ資料 | 安心して働ける環境と成長できるキャリアパス
受発注バスターズ説明資料  (2025_08_13~) Saleshub掲載用.pdf
Fellowship Co.,Ltd. Company Overview for Students

Pythonで検索エンジン2