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

Más contenido relacionado

La actualidad más candente

20210526 AWS Expert Online マルチアカウント管理の基本
20210526 AWS Expert Online マルチアカウント管理の基本20210526 AWS Expert Online マルチアカウント管理の基本
20210526 AWS Expert Online マルチアカウント管理の基本Amazon Web Services Japan
 
Azure App Service 運用体験談 ~コスト節約しようとしてダウンした App Service~
Azure App Service 運用体験談 ~コスト節約しようとしてダウンした App Service~Azure App Service 運用体験談 ~コスト節約しようとしてダウンした App Service~
Azure App Service 運用体験談 ~コスト節約しようとしてダウンした App Service~Tomotaka Suzuki(御成門プログラマー)
 
20190130 AWS Black Belt Online Seminar AWS Identity and Access Management (AW...
20190130 AWS Black Belt Online Seminar AWS Identity and Access Management (AW...20190130 AWS Black Belt Online Seminar AWS Identity and Access Management (AW...
20190130 AWS Black Belt Online Seminar AWS Identity and Access Management (AW...Amazon Web Services Japan
 
おひとりさまAWS Organizationsのススメ
おひとりさまAWS OrganizationsのススメおひとりさまAWS Organizationsのススメ
おひとりさまAWS OrganizationsのススメMakio Tsukamoto
 
CodeBuildを身近にするためのはじめの一歩
CodeBuildを身近にするためのはじめの一歩CodeBuildを身近にするためのはじめの一歩
CodeBuildを身近にするためのはじめの一歩淳 千葉
 
SRV413 Deep Dive on Elastic Block Storage (Amazon EBS)
SRV413 Deep Dive on Elastic Block Storage (Amazon EBS)SRV413 Deep Dive on Elastic Block Storage (Amazon EBS)
SRV413 Deep Dive on Elastic Block Storage (Amazon EBS)Amazon Web Services
 
IDaaS を正しく活用するための認証基盤設計 ~Azure Active Directory の構成パターン詳細~
IDaaS を正しく活用するための認証基盤設計 ~Azure Active Directory の構成パターン詳細~IDaaS を正しく活用するための認証基盤設計 ~Azure Active Directory の構成パターン詳細~
IDaaS を正しく活用するための認証基盤設計 ~Azure Active Directory の構成パターン詳細~Trainocate Japan, Ltd.
 
20200422 AWS Black Belt Online Seminar Amazon Elastic Container Service (Amaz...
20200422 AWS Black Belt Online Seminar Amazon Elastic Container Service (Amaz...20200422 AWS Black Belt Online Seminar Amazon Elastic Container Service (Amaz...
20200422 AWS Black Belt Online Seminar Amazon Elastic Container Service (Amaz...Amazon Web Services Japan
 
AWS Black Belt Online Seminar 2017 AWS Cognito
AWS Black Belt Online Seminar 2017 AWS CognitoAWS Black Belt Online Seminar 2017 AWS Cognito
AWS Black Belt Online Seminar 2017 AWS CognitoAmazon Web Services Japan
 
Aws auto scalingによるwebapサーバbatchサーバの構成例
Aws auto scalingによるwebapサーバbatchサーバの構成例Aws auto scalingによるwebapサーバbatchサーバの構成例
Aws auto scalingによるwebapサーバbatchサーバの構成例Takeshi Mikami
 
20190129 AWS Black Belt Online Seminar AWS Identity and Access Management (AW...
20190129 AWS Black Belt Online Seminar AWS Identity and Access Management (AW...20190129 AWS Black Belt Online Seminar AWS Identity and Access Management (AW...
20190129 AWS Black Belt Online Seminar AWS Identity and Access Management (AW...Amazon Web Services Japan
 
Krugle Short 202309v30.pdf
Krugle Short 202309v30.pdfKrugle Short 202309v30.pdf
Krugle Short 202309v30.pdfJunKawakita1
 
Introduction to Amazon Relational Database Service
Introduction to Amazon Relational Database ServiceIntroduction to Amazon Relational Database Service
Introduction to Amazon Relational Database ServiceAmazon Web Services
 
SAP on Azure インフラ設計解説:HA/DR、Backupからパフォーマンス最適化まで
SAP on Azure インフラ設計解説:HA/DR、Backupからパフォーマンス最適化までSAP on Azure インフラ設計解説:HA/DR、Backupからパフォーマンス最適化まで
SAP on Azure インフラ設計解説:HA/DR、Backupからパフォーマンス最適化までHitoshi Ikemoto
 
20190731 Black Belt Online Seminar Amazon ECS Deep Dive
20190731 Black Belt Online Seminar Amazon ECS Deep Dive20190731 Black Belt Online Seminar Amazon ECS Deep Dive
20190731 Black Belt Online Seminar Amazon ECS Deep DiveAmazon Web Services Japan
 
20200617 AWS Black Belt Online Seminar Amazon Athena
20200617 AWS Black Belt Online Seminar Amazon Athena20200617 AWS Black Belt Online Seminar Amazon Athena
20200617 AWS Black Belt Online Seminar Amazon AthenaAmazon Web Services Japan
 
セキュリティ設計の頻出論点
セキュリティ設計の頻出論点セキュリティ設計の頻出論点
セキュリティ設計の頻出論点Tomohiro Nakashima
 
Amazon Pinpoint × グロースハック活用事例集
Amazon Pinpoint × グロースハック活用事例集Amazon Pinpoint × グロースハック活用事例集
Amazon Pinpoint × グロースハック活用事例集Amazon Web Services Japan
 
AWS Black Belt Online Seminar 2017 AWS X-Ray
AWS Black Belt Online Seminar 2017 AWS X-RayAWS Black Belt Online Seminar 2017 AWS X-Ray
AWS Black Belt Online Seminar 2017 AWS X-RayAmazon Web Services Japan
 

La actualidad más candente (20)

20210526 AWS Expert Online マルチアカウント管理の基本
20210526 AWS Expert Online マルチアカウント管理の基本20210526 AWS Expert Online マルチアカウント管理の基本
20210526 AWS Expert Online マルチアカウント管理の基本
 
Azure App Service 運用体験談 ~コスト節約しようとしてダウンした App Service~
Azure App Service 運用体験談 ~コスト節約しようとしてダウンした App Service~Azure App Service 運用体験談 ~コスト節約しようとしてダウンした App Service~
Azure App Service 運用体験談 ~コスト節約しようとしてダウンした App Service~
 
20190130 AWS Black Belt Online Seminar AWS Identity and Access Management (AW...
20190130 AWS Black Belt Online Seminar AWS Identity and Access Management (AW...20190130 AWS Black Belt Online Seminar AWS Identity and Access Management (AW...
20190130 AWS Black Belt Online Seminar AWS Identity and Access Management (AW...
 
おひとりさまAWS Organizationsのススメ
おひとりさまAWS OrganizationsのススメおひとりさまAWS Organizationsのススメ
おひとりさまAWS Organizationsのススメ
 
CodeBuildを身近にするためのはじめの一歩
CodeBuildを身近にするためのはじめの一歩CodeBuildを身近にするためのはじめの一歩
CodeBuildを身近にするためのはじめの一歩
 
Black Belt Online Seminar Amazon CloudWatch
Black Belt Online Seminar Amazon CloudWatchBlack Belt Online Seminar Amazon CloudWatch
Black Belt Online Seminar Amazon CloudWatch
 
SRV413 Deep Dive on Elastic Block Storage (Amazon EBS)
SRV413 Deep Dive on Elastic Block Storage (Amazon EBS)SRV413 Deep Dive on Elastic Block Storage (Amazon EBS)
SRV413 Deep Dive on Elastic Block Storage (Amazon EBS)
 
IDaaS を正しく活用するための認証基盤設計 ~Azure Active Directory の構成パターン詳細~
IDaaS を正しく活用するための認証基盤設計 ~Azure Active Directory の構成パターン詳細~IDaaS を正しく活用するための認証基盤設計 ~Azure Active Directory の構成パターン詳細~
IDaaS を正しく活用するための認証基盤設計 ~Azure Active Directory の構成パターン詳細~
 
20200422 AWS Black Belt Online Seminar Amazon Elastic Container Service (Amaz...
20200422 AWS Black Belt Online Seminar Amazon Elastic Container Service (Amaz...20200422 AWS Black Belt Online Seminar Amazon Elastic Container Service (Amaz...
20200422 AWS Black Belt Online Seminar Amazon Elastic Container Service (Amaz...
 
AWS Black Belt Online Seminar 2017 AWS Cognito
AWS Black Belt Online Seminar 2017 AWS CognitoAWS Black Belt Online Seminar 2017 AWS Cognito
AWS Black Belt Online Seminar 2017 AWS Cognito
 
Aws auto scalingによるwebapサーバbatchサーバの構成例
Aws auto scalingによるwebapサーバbatchサーバの構成例Aws auto scalingによるwebapサーバbatchサーバの構成例
Aws auto scalingによるwebapサーバbatchサーバの構成例
 
20190129 AWS Black Belt Online Seminar AWS Identity and Access Management (AW...
20190129 AWS Black Belt Online Seminar AWS Identity and Access Management (AW...20190129 AWS Black Belt Online Seminar AWS Identity and Access Management (AW...
20190129 AWS Black Belt Online Seminar AWS Identity and Access Management (AW...
 
Krugle Short 202309v30.pdf
Krugle Short 202309v30.pdfKrugle Short 202309v30.pdf
Krugle Short 202309v30.pdf
 
Introduction to Amazon Relational Database Service
Introduction to Amazon Relational Database ServiceIntroduction to Amazon Relational Database Service
Introduction to Amazon Relational Database Service
 
SAP on Azure インフラ設計解説:HA/DR、Backupからパフォーマンス最適化まで
SAP on Azure インフラ設計解説:HA/DR、Backupからパフォーマンス最適化までSAP on Azure インフラ設計解説:HA/DR、Backupからパフォーマンス最適化まで
SAP on Azure インフラ設計解説:HA/DR、Backupからパフォーマンス最適化まで
 
20190731 Black Belt Online Seminar Amazon ECS Deep Dive
20190731 Black Belt Online Seminar Amazon ECS Deep Dive20190731 Black Belt Online Seminar Amazon ECS Deep Dive
20190731 Black Belt Online Seminar Amazon ECS Deep Dive
 
20200617 AWS Black Belt Online Seminar Amazon Athena
20200617 AWS Black Belt Online Seminar Amazon Athena20200617 AWS Black Belt Online Seminar Amazon Athena
20200617 AWS Black Belt Online Seminar Amazon Athena
 
セキュリティ設計の頻出論点
セキュリティ設計の頻出論点セキュリティ設計の頻出論点
セキュリティ設計の頻出論点
 
Amazon Pinpoint × グロースハック活用事例集
Amazon Pinpoint × グロースハック活用事例集Amazon Pinpoint × グロースハック活用事例集
Amazon Pinpoint × グロースハック活用事例集
 
AWS Black Belt Online Seminar 2017 AWS X-Ray
AWS Black Belt Online Seminar 2017 AWS X-RayAWS Black Belt Online Seminar 2017 AWS X-Ray
AWS Black Belt Online Seminar 2017 AWS X-Ray
 

Destacado

いろいろ考えると日本語の全文検索もMySQLがいいね!
いろいろ考えると日本語の全文検索もMySQLがいいね!いろいろ考えると日本語の全文検索もMySQLがいいね!
いろいろ考えると日本語の全文検索もMySQLがいいね!Kouhei Sutou
 
自分をチューニングするために今年やってみたこと
自分をチューニングするために今年やってみたこと自分をチューニングするために今年やってみたこと
自分をチューニングするために今年やってみたこと優之 田中
 
Solrベースの全文検索サーバ Fess
Solrベースの全文検索サーバ FessSolrベースの全文検索サーバ Fess
Solrベースの全文検索サーバ FessShinsuke Sugaya
 
機械学習で名古屋っぽいを判定する
機械学習で名古屋っぽいを判定する機械学習で名古屋っぽいを判定する
機械学習で名古屋っぽいを判定する優之 田中
 
普通のWebエンジニアに学ぶ テーブル設計指南書
普通のWebエンジニアに学ぶ テーブル設計指南書普通のWebエンジニアに学ぶ テーブル設計指南書
普通のWebエンジニアに学ぶ テーブル設計指南書優之 田中
 
【読書会】プロになるためなるためのWeb技術入門
【読書会】プロになるためなるためのWeb技術入門【読書会】プロになるためなるためのWeb技術入門
【読書会】プロになるためなるためのWeb技術入門優之 田中
 
NGUIでスクロールビュー
NGUIでスクロールビューNGUIでスクロールビュー
NGUIでスクロールビュー優之 田中
 
サーバ構築実践入門
サーバ構築実践入門サーバ構築実践入門
サーバ構築実践入門優之 田中
 
クローラを作る技術と設計 (毎週のハンズオン勉強会資料)
クローラを作る技術と設計 (毎週のハンズオン勉強会資料)クローラを作る技術と設計 (毎週のハンズオン勉強会資料)
クローラを作る技術と設計 (毎週のハンズオン勉強会資料)ひとし あまの
 
全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころ
全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころ全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころ
全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころShinsuke Sugaya
 
MySQL Casual Talks Vol.4 「MySQL-5.6で始める全文検索 〜InnoDB FTS編〜」
MySQL Casual Talks Vol.4 「MySQL-5.6で始める全文検索 〜InnoDB FTS編〜」MySQL Casual Talks Vol.4 「MySQL-5.6で始める全文検索 〜InnoDB FTS編〜」
MySQL Casual Talks Vol.4 「MySQL-5.6で始める全文検索 〜InnoDB FTS編〜」Kentaro Yoshida
 
ナレッジを共有する文化をつくるために
ナレッジを共有する文化をつくるためにナレッジを共有する文化をつくるために
ナレッジを共有する文化をつくるためにRecruit Lifestyle Co., Ltd.
 
乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩-
乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩-乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩-
乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩-Takuya Akiba
 
Elasticsearch+nodejs+dynamodbで作る全社システム基盤
Elasticsearch+nodejs+dynamodbで作る全社システム基盤Elasticsearch+nodejs+dynamodbで作る全社システム基盤
Elasticsearch+nodejs+dynamodbで作る全社システム基盤Recruit Technologies
 
Pythonによるwebアプリケーション入門 - Django編-
Pythonによるwebアプリケーション入門 - Django編- Pythonによるwebアプリケーション入門 - Django編-
Pythonによるwebアプリケーション入門 - Django編- Hironori Sekine
 
最強オブジェクト指向言語 JavaScript 再入門!
最強オブジェクト指向言語 JavaScript 再入門!最強オブジェクト指向言語 JavaScript 再入門!
最強オブジェクト指向言語 JavaScript 再入門!Yuji Nojima
 
0からわかるAlfresco
0からわかるAlfresco0からわかるAlfresco
0からわかるAlfrescoMoritakaSoma
 
MySQL 5.7 InnoDB 日本語全文検索
MySQL 5.7 InnoDB 日本語全文検索MySQL 5.7 InnoDB 日本語全文検索
MySQL 5.7 InnoDB 日本語全文検索yoyamasaki
 
人は一ヶ月でエンジニアになれるのか - 詳細解説
人は一ヶ月でエンジニアになれるのか - 詳細解説人は一ヶ月でエンジニアになれるのか - 詳細解説
人は一ヶ月でエンジニアになれるのか - 詳細解説Livesense Inc.
 

Destacado (20)

いろいろ考えると日本語の全文検索もMySQLがいいね!
いろいろ考えると日本語の全文検索もMySQLがいいね!いろいろ考えると日本語の全文検索もMySQLがいいね!
いろいろ考えると日本語の全文検索もMySQLがいいね!
 
自分をチューニングするために今年やってみたこと
自分をチューニングするために今年やってみたこと自分をチューニングするために今年やってみたこと
自分をチューニングするために今年やってみたこと
 
Solrベースの全文検索サーバ Fess
Solrベースの全文検索サーバ FessSolrベースの全文検索サーバ Fess
Solrベースの全文検索サーバ Fess
 
機械学習で名古屋っぽいを判定する
機械学習で名古屋っぽいを判定する機械学習で名古屋っぽいを判定する
機械学習で名古屋っぽいを判定する
 
JMeter基礎
JMeter基礎JMeter基礎
JMeter基礎
 
普通のWebエンジニアに学ぶ テーブル設計指南書
普通のWebエンジニアに学ぶ テーブル設計指南書普通のWebエンジニアに学ぶ テーブル設計指南書
普通のWebエンジニアに学ぶ テーブル設計指南書
 
【読書会】プロになるためなるためのWeb技術入門
【読書会】プロになるためなるためのWeb技術入門【読書会】プロになるためなるためのWeb技術入門
【読書会】プロになるためなるためのWeb技術入門
 
NGUIでスクロールビュー
NGUIでスクロールビューNGUIでスクロールビュー
NGUIでスクロールビュー
 
サーバ構築実践入門
サーバ構築実践入門サーバ構築実践入門
サーバ構築実践入門
 
クローラを作る技術と設計 (毎週のハンズオン勉強会資料)
クローラを作る技術と設計 (毎週のハンズオン勉強会資料)クローラを作る技術と設計 (毎週のハンズオン勉強会資料)
クローラを作る技術と設計 (毎週のハンズオン勉強会資料)
 
全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころ
全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころ全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころ
全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころ
 
MySQL Casual Talks Vol.4 「MySQL-5.6で始める全文検索 〜InnoDB FTS編〜」
MySQL Casual Talks Vol.4 「MySQL-5.6で始める全文検索 〜InnoDB FTS編〜」MySQL Casual Talks Vol.4 「MySQL-5.6で始める全文検索 〜InnoDB FTS編〜」
MySQL Casual Talks Vol.4 「MySQL-5.6で始める全文検索 〜InnoDB FTS編〜」
 
ナレッジを共有する文化をつくるために
ナレッジを共有する文化をつくるためにナレッジを共有する文化をつくるために
ナレッジを共有する文化をつくるために
 
乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩-
乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩-乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩-
乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩-
 
Elasticsearch+nodejs+dynamodbで作る全社システム基盤
Elasticsearch+nodejs+dynamodbで作る全社システム基盤Elasticsearch+nodejs+dynamodbで作る全社システム基盤
Elasticsearch+nodejs+dynamodbで作る全社システム基盤
 
Pythonによるwebアプリケーション入門 - Django編-
Pythonによるwebアプリケーション入門 - Django編- Pythonによるwebアプリケーション入門 - Django編-
Pythonによるwebアプリケーション入門 - Django編-
 
最強オブジェクト指向言語 JavaScript 再入門!
最強オブジェクト指向言語 JavaScript 再入門!最強オブジェクト指向言語 JavaScript 再入門!
最強オブジェクト指向言語 JavaScript 再入門!
 
0からわかるAlfresco
0からわかるAlfresco0からわかるAlfresco
0からわかるAlfresco
 
MySQL 5.7 InnoDB 日本語全文検索
MySQL 5.7 InnoDB 日本語全文検索MySQL 5.7 InnoDB 日本語全文検索
MySQL 5.7 InnoDB 日本語全文検索
 
人は一ヶ月でエンジニアになれるのか - 詳細解説
人は一ヶ月でエンジニアになれるのか - 詳細解説人は一ヶ月でエンジニアになれるのか - 詳細解説
人は一ヶ月でエンジニアになれるのか - 詳細解説
 

Más de 優之 田中

CloudFormationを活用したリソース管理と環境構築の自動化
CloudFormationを活用したリソース管理と環境構築の自動化CloudFormationを活用したリソース管理と環境構築の自動化
CloudFormationを活用したリソース管理と環境構築の自動化優之 田中
 
Unity2Dを使ったミニゲーム開発のすすめ
Unity2Dを使ったミニゲーム開発のすすめUnity2Dを使ったミニゲーム開発のすすめ
Unity2Dを使ったミニゲーム開発のすすめ優之 田中
 
【名古屋】2014/2/8 Unity勉強会2
【名古屋】2014/2/8 Unity勉強会2【名古屋】2014/2/8 Unity勉強会2
【名古屋】2014/2/8 Unity勉強会2優之 田中
 
【名古屋】2014/2/8 Unity勉強会1
【名古屋】2014/2/8 Unity勉強会1【名古屋】2014/2/8 Unity勉強会1
【名古屋】2014/2/8 Unity勉強会1優之 田中
 
NGUIとUnity2Dをつかってみた
NGUIとUnity2DをつかってみたNGUIとUnity2Dをつかってみた
NGUIとUnity2Dをつかってみた優之 田中
 
Linuxの基礎勉強会
Linuxの基礎勉強会Linuxの基礎勉強会
Linuxの基礎勉強会優之 田中
 
ネットワーク基礎勉強会2回目
ネットワーク基礎勉強会2回目ネットワーク基礎勉強会2回目
ネットワーク基礎勉強会2回目優之 田中
 
【読書会】ネットワークのきそ
【読書会】ネットワークのきそ【読書会】ネットワークのきそ
【読書会】ネットワークのきそ優之 田中
 

Más de 優之 田中 (11)

CloudFormationを活用したリソース管理と環境構築の自動化
CloudFormationを活用したリソース管理と環境構築の自動化CloudFormationを活用したリソース管理と環境構築の自動化
CloudFormationを活用したリソース管理と環境構築の自動化
 
NGUI基礎
NGUI基礎NGUI基礎
NGUI基礎
 
Unity2Dを使ったミニゲーム開発のすすめ
Unity2Dを使ったミニゲーム開発のすすめUnity2Dを使ったミニゲーム開発のすすめ
Unity2Dを使ったミニゲーム開発のすすめ
 
【名古屋】2014/2/8 Unity勉強会2
【名古屋】2014/2/8 Unity勉強会2【名古屋】2014/2/8 Unity勉強会2
【名古屋】2014/2/8 Unity勉強会2
 
【名古屋】2014/2/8 Unity勉強会1
【名古屋】2014/2/8 Unity勉強会1【名古屋】2014/2/8 Unity勉強会1
【名古屋】2014/2/8 Unity勉強会1
 
NGUIでimage button
NGUIでimage buttonNGUIでimage button
NGUIでimage button
 
NGUIとUnity2Dをつかってみた
NGUIとUnity2DをつかってみたNGUIとUnity2Dをつかってみた
NGUIとUnity2Dをつかってみた
 
Linux基礎2回目
Linux基礎2回目Linux基礎2回目
Linux基礎2回目
 
Linuxの基礎勉強会
Linuxの基礎勉強会Linuxの基礎勉強会
Linuxの基礎勉強会
 
ネットワーク基礎勉強会2回目
ネットワーク基礎勉強会2回目ネットワーク基礎勉強会2回目
ネットワーク基礎勉強会2回目
 
【読書会】ネットワークのきそ
【読書会】ネットワークのきそ【読書会】ネットワークのきそ
【読書会】ネットワークのきそ
 

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

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