Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

PHPで全文検索エンジンをつくるまで

8.035 visualizaciones

Publicado el

PHPで全文検索エンジンをつくるまで

Publicado en: Software
  • Dating direct: ♥♥♥ http://bit.ly/2F4cEJi ♥♥♥
       Responder 
    ¿Estás seguro?    No
    Tu mensaje aparecerá aquí
  • Dating for everyone is here: ❤❤❤ http://bit.ly/2F4cEJi ❤❤❤
       Responder 
    ¿Estás seguro?    No
    Tu mensaje aparecerá aquí

PHPで全文検索エンジンをつくるまで

  1. 1. PHPで全文検索エンジンをつくるまで @masayuki5160 14年12月3日水曜日
  2. 2. はじめに 以前から検索エンジンをつくってみたいなーと思ってい て、やっとつくれました。やはり面白い分野だったんで すが、かなり広範な知識が必要でした。でも大学でちゃ んと習ったことばかりだったという、、先生方すいませ んw そんな話をつらつらまとめます。難しい話ではないで す。今まで縁がなかった人向けに少しだけまとめます。 PHPを選択しているのはPHPならわかる人多いよね、とい う理由です。 14年12月3日水曜日
  3. 3. 本資料の対象者 こんな人に向けて話します。 • 全文検索エンジンなにそれ? • PHPしかわからんけど、興味ある! • 独学したけど、挫折しちゃった。。 詳しい方はぜひ間違ってる点など指摘頂けると助かりま す! 14年12月3日水曜日
  4. 4. アジェンダ 1. 全文検索エンジンを作ってみるまで (1) 自然言語処理 (2) クローラー 2. 全文検索エンジンの開発(Mecabを使用) (1) 概要 (2) 実際のソース 3. 全文検索エンジンをつくってみて 14年12月3日水曜日
  5. 5. アジェンダ 検索エンジン 自然言語処理 クローラ それぞれ検索エンジンをつくるために必要な知識。でも、異なる分野 だったりするのでややこい。さらに人工知能の話もここに絡んできた りすることもあるのでさらにとっつきにくく見えます。 14年12月3日水曜日
  6. 6. んじゃはじめます。 まずは自然言語処理のお話から。 14年12月3日水曜日
  7. 7. 1-(1) 自然言語処理 ヒトが日常話している言葉をコンピュータに認識させる 処理、技術のこと。ちょっと考えればわかるけど、これ ってすごい大変。たとえば、 • 英語、日本語... など言語はいっぱい • それぞれの言語で文法違うよね 検索エンジンを作るときにはこれをクリアする必要があ る。まずは基本から、ということで"わかち書き"のお話 し。 14年12月3日水曜日
  8. 8. 1-(1) 自然言語処理 • わかち書き 語の区切りに空白をはさんで記述することをわかち書き といいます。つまり 日本語はわかち書き、英語は違いま すね。英語はわかち書きではないので、空白をつかえば 語を区切っていくことが容易にできそうですね。 でも日本語は、、うまく語を区切ると難しいですよね。 というわけで形態素解析のお話しにいきましょう。 14年12月3日水曜日
  9. 9. 1-(1) 自然言語処理 • 形態素解析 さあ困った、ということで日本語の文法の知識(文法の ルールの集まり)や辞書(品詞等の情報付きの単語リス ト)を情報源として用い形態素(日本語で意味を持つ最小 単位)に分割することを"形態素解析"といいます。 形態素解析をするとどうなるか、こんな感じです。 ※Mecabを使用したサンプルです. Mecabについては後述. 14年12月3日水曜日
  10. 10. 1-(1) 自然言語処理 形態素解析する文章 Mecabのテストです 14年12月3日水曜日
  11. 11. 1-(1) 自然言語処理 これを形態素解析してみると、、 14年12月3日水曜日
  12. 12. 1-(1) 自然言語処理 Mecab => 名詞,固有名詞,組織,,,, の => 助詞,連体化,,,,,の,ノ,ノ テスト => 名詞,サ変接続,,,,,テスト,テスト,テスト です => 助動詞,,,*,特殊・デス,基本形,です,デス, デス 14年12月3日水曜日
  13. 13. 1-(1) 自然言語処理 形態素に分割されてますね! 14年12月3日水曜日
  14. 14. 1-(1) 自然言語処理 ということで形態素解析をすることで日常話している言 葉をコンピュータに認識させることできそうですね。 でも形態素解析のプログラムなんてつくってたら大変 だ~、、ということで先ほどでてきた"Mecab"の紹介。 14年12月3日水曜日
  15. 15. 1-(1) 自然言語処理 • Mecab オープンソースの日本語形態素解析エンジンで品詞情報 を利用した解析・推定を行うことができます。MeCabは Googleが公開した大規模日本語n-gramデータの作成にも 使用されています。 セットアップもけっこう簡単。インストール手順につい ては下記を参照。 MecabをEC2上にインストールする 14年12月3日水曜日
  16. 16. 1-(1) 自然言語処理 • まとめ 自然言語処理のざっくり基本的なお話しはこの程度で。 今回はMecabを使用した全文検索エンジンを実装する前提 でしたので形態素解析のお話しのみ駆け足でしました が、もちろん分かち書きの言語を分割するのは別の方法 もあります(n-gram解析など)。 奥が深い分野ですのでぼくもまだまだ勉強中。。 14年12月3日水曜日
  17. 17. んで次はクローラーのお話! 14年12月3日水曜日
  18. 18. 1-(2) クローラー クローラーとは、Webページから自動で情報収集するプ ログラムのこと。たとえば、 • Googleの検索エンジン • マーケティング分析で使用するためにSNSの書き込み を収集するプログラム • 特定のサイトをチェックにいくプログラム など。意外に身近でお世話になってるものばかりですよ ね。 14年12月3日水曜日
  19. 19. 1-(2) クローラー んじゃどう実装してるの、てなりますが実際にみてみる のが早いと思いますので今回は下記2例を紹介します。 • Wgetでクローラー • Twitterのクローリング(API経由) というわけでお話をしていきますが、 クローラーは設定 次第で短時間に大量のリクエストを任意のサービス、サ ーバにおくることになります。そのあたりをしっかり理 解して実装していってください。 14年12月3日水曜日
  20. 20. 1-(2) クローラー • Wgetでクローラー Wgetはなにかしらのサーバセットアップするときに使用 したことあるかと思います。有名なダウンローダーです ね。 $ wget http://hogehoge/test.txt て感じで気軽にダウンロードできますよね。このWgetが なんでクローラーかというと、再帰ダウンロード機能が あるから! 14年12月3日水曜日
  21. 21. 1-(2) クローラー • Wgetでクローラー “再帰ダウンロード”とは任意のページ内のURLリンク先も ダウンロードするよ、てこと。使い方はこんな感じ。 $ wget -r -l2 http://hogehoge/test.html “-r”が再帰ダウンロードすることを指定し、-l(数字)で最 初のページからリンク先を辿る回数を指定します。(幅優 先探索ですね) 14年12月3日水曜日
  22. 22. 1-(2) クローラー • Wgetでクローラー というわけで、“再帰ダウンロード”のおかげで、Wgetは ダウンロードしたHTMLを解析してリンク抽出まで可能な のでWgetは立派なクローラーとして機能しそうですね。 ぜひ試しにWgetでクローリングしてみてください! さて次はTwitterのクローリングのお話。 14年12月3日水曜日
  23. 23. 1-(2) クローラー • Twitterのクローリング Wgetを使ったクローリングで気づいたと思いますが、ク ローラーを作るときに必要なのがHTMLの解析処理。でも 今回は下記理由からAPI経由でのクローリングを行いま す。 • HTML解析はやっぱり手間 • サイトがかわったら解析処理の修正もいる • HTMLだと収集可能なデータが限定(Twitterの場合) 14年12月3日水曜日
  24. 24. 1-(2) クローラー • Twitterのクローリング というわけでTwitter APIを使用したクローラーを作るので すが、 Twitter APIを使用したドキュメントは数多くあるの で詳細は割愛します。 ソースはこんな感じでできますのでぜひお試しください. 14年12月3日水曜日
  25. 25. 1-(2) クローラー • まとめ なんとなく感じたと思いますが、クローラーはクローラ ーでまた別の分野、てくらい掘り下げるといろいろでて くる奥深いもの。 ・どうクロールする? ・負荷は? ・ログイン画面とかあったらどないする? とかね。いろいろ調べてみるとこれまたおもしろい。 14年12月3日水曜日
  26. 26. さて、やっと本題の全文検索エンジ ンのお話ですw 14年12月3日水曜日
  27. 27. 2 全文検索エンジンの開発 やっとここまできましたw でもいままでの自然言語処 理、クローラーの部分て全文検索エンジンを作りはじめ るのに実は必要な知識だったりします。 で今回作ってみる全文検索エンジンですが、 • PHP • MySQL • Mecab て環境でいきます。この方がイメージつく方多いのでい いかと思います。 14年12月3日水曜日
  28. 28. 2-(1) 概要 • 概要図(検索するとき) PHPサーバMySQL 検索ワードをGET送信 転置インデックスから検索 14年12月3日水曜日
  29. 29. 2-(1) 概要 • 概要図(インデックスを作るとき) PHPサーバ (Mecabでの形態素解析) MySQL ・解析対象ドキュメントを格納 ・転置インデックスを格納 ポイントは”転置インデックス” 14年12月3日水曜日
  30. 30. 2-(1) 概要 • 転置インデックス ざっくりいうと"本の索引"みたいなもの。はてなキーワ ード"転置インデックス"の説明がわかりやすい。例えば 下記のようなものが転置インデックス。 単語ドキュメントID Pearl 1, 2, 304 ... Perl 1, 5, 10, 12, 15 ... Python 5, 10, 32 ... 14年12月3日水曜日
  31. 31. 2-(1) 概要 • 転置インデックス 転置インデックスのテーブルを作成しておくことで検索 したいワードがきまればそれに紐づくドキュメントはす ぐわかるよね、ということです。 で、このテーブル"転置インデックス"をつくるために前述 の形態素解析(Mecab)を使用していく、ということ。 14年12月3日水曜日
  32. 32. 2-(2) 実際のソース というわけで実際のソースはこんな感じでできます。 今回は前述のTwitterよりクローリングして取得したデー タを全文検索できるよう転置インデックスを作成してい ます。下記のような感じで動作します。 14年12月3日水曜日
  33. 33. 3 全文検索エンジンをつくってみて もちろんここから改善するポイントもありますが、こ こまでやったから興味がでてくることってけっこうあり ます。たとえば、 • OSSの全文検索エンジンてどうなってんの? • 形態素解析してあつめたトークンをもとにテキスト マイニングしてみたいよね • もうひと踏ん張りすれば機械学習もいけるね 突っ込んで調べてみるとおもしろいと思います、ぜひ。 14年12月3日水曜日
  34. 34. おわりに ざっくりの説明でしたが、それぞれ奥深い分野ですので 突っ込んで調べてみると面白いと思います。 参考文献にも記載していますが、最近なぜか関連の良書 がどんどんできてますのでそちらを読むとさらに理解も 深まっていいかと思いますのでぜひー 14年12月3日水曜日
  35. 35. おわり! 14年12月3日水曜日
  36. 36. 参考文献 • PHPによる機械学習(PHPで、ていうのがとっつきやすくいい本でした。 Mecabについても詳しいです。) • 検索エンジン自作入門~手を動かしながら見渡す検索の舞台裏(非常に難 解ですが良書ですね。) • Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例(ク ローラーのお話が詳しいかつRubyなのでよみやすいですね。あと実例が 豊富なのもうれしい。) • [Web開発者のための]大規模サービス技術入門(Perlでの全文検索エンジ ン開発の章があります。) 14年12月3日水曜日

×