ホームページ >php教程 >php手册 >PHP検索エンジン技術の中核が明らかに

PHP検索エンジン技術の中核が明らかに

WBOY
WBOYオリジナル
2016-06-21 09:02:21977ブラウズ



ウェブ検索エンジンについて話すとき、ほとんどの人は Yahoo を思い浮かべるでしょう。実際、Yahoo はインターネット検索の時代を築きました。ただし、Yahoo が現在 Web 検索に使用しているテクノロジーは、もともと同社が開発したものではありません。 20008月、Yaタイガーは Google(www.google.com) スタンフォード大学の学生が設立したベンチャー企業の技術。理由は非常に簡単です。Google の検索 エンジンは、Yahoo の の以前のテクノロジーよりも高速かつ正確に必要な情報を検索できるからです。 。

残念ながら、短期間に強力で効率的な検索エンジンとデータベースを自社で設計、開発することは技術的にも資金的にも不可能です。しかし、 Yahoo は 他人のテクノロジーを使用しているので、他人の既製の検索エンジン Web サイトも使用できるでしょうか?

プログラミングのアイデアの分析

これを想像できます: クエリをシミュレートして質問します。ある検索エンジン Web サイトは、対応する形式で検索コマンドを発行し、検索結果を返し、結果の HTML コードを分析し、冗長な文字やコードを取り除き、最後に当社ウェブサイトのページに表示されている必要な形式を押します。

このように、問題の鍵は、(検索がより意味のあるものになるように) 正確で、(検索結果の分析に余分な時間が必要なため) 高速な検索情報を選択する必要があるということです。新世代の検索エンジン HTML ソース コード分析とストリッピングに便利) を備えた検索 Web サイト🎜>Google のさまざまな優れた機能。ここでは、PHP を使用して のバックグラウンド処理を実装する方法を確認する例としてそれを選択します。 Google(www.google.com)検索およびフロントエンドのパーソナライズされた表示プロセス。

まず、Google のクエリコマンドの構成を見てみましょう。 www.google.com Web サイトに入り、クエリ バーに abcd と入力して、クリックしますクエリ ボタンをクリックすると、ブラウザのアドレス 列が に変更されることがわかります: "http://www.google.com/search?q=abcd&btnG=Google%CB%D1% CB%F7&hl =zh-CN&lr="Google がフォーム を介していることがわかります。 get メソッドを使用して、クエリ パラメーターを渡し、クエリ コマンドを送信します。 PHPfile() 関数を使用して、このクエリ プロセスをシミュレートできます。

ファイル()関数
構文
: 配列ファイル (文字列ファイル名);
戻り値は配列であり、すべてのファイルが配列変数に読み込まれます。ここでのファイルはローカルまたはリモートにすることができ、リモート ファイルは使用されるプロトコルを示す必要があります。例: result=file(“http://www.google.com/search?q=abcd&btnG=Google%CB%D1%CB%F7&hl=zh-CN&lr= ” )、このステートメントは、単語 "abcdGoogle に対するクエリをシミュレートします。 🎜> " の処理が行われ、検索結果は行ごとの要素の形式で配列変数 result に返されます。ここで読み取られるファイルはリモートであるため、プロトコル名 "http://" が欠落することはできません。

任意の検索でユーザーに検索文字を入力してもらいたい場合は、入力テキスト ボックスと送信ボタンを作成し、検索文字を上に設定できます "abcd"変数に置き換えます: echo
//
パラメータなし form、デフォルトの送信メソッドは get、それ自体に送信されます echo; //
テキスト入力ボックスを構築します echo; //
クエリ送信ボタンを構築します echo
; >if (
isset
(キーワード)) //
送信後
PHP は変数 kwywords を生成します では、送信後に次のプログラムを実行する必要があります { urlencode(キーワード); //
URLエンコード
result=file ("http:/ /www.google.com/search?q=".キーワード。"&btnG=Google%CB%D1%CB%F7&hl=zh-CN&lr= ; 🎜>中
result_string=join(" ", result); //配列を変換$resultに結合文字列、各配列要素はスペースで結合されます
... //さらなる処理
} ?> 上記のプログラムは、ユーザーの入力内容に従ってクエリを実行し、返された結果を文字列変数
$ result_string
に合成することができます。ユーザー入力を

URL
urlencode() 関数を使用する必要があることに注意してください。 > エンコーディング、入力された漢字、スペース、その他の特殊文字は通常どおりクエリできます。これは、Google のクエリ コマンドをシミュレートするためでもあります。可能な限り現実的な検索結果を保証します。 Google

わかりやすくするために、本当に必要なのは検索結果のタイトルであると仮定しましょう。 URLや紹介文など。これはシンプルかつ典型的な要件です。このように、私たちがしなければならないことは、Google 検索結果のヘッダーとフッター (Google ロゴ、再検索入力ボックス、検索結果の説明などを削除し、残りの検索結果から元の HTML 形式のタグを削除します。項目を指定し、必要な形式に置き換えます。

これを行うには、Google の検索結果を注意深く分析する必要があります HTML ソース コードを参照し、ルールを見つけます。 Google の検索結果のテキストが常に最初の ソース コードの
タグと最後から 2 番目の


タグ、および最後から 2 番目の

タグの後には
table 文字が続き、この組み合わせ "

以下のすべての手順は、上記手順 .
result_string = strstr
(
result_string
、""); // は、最初の から result_string

を取得します。 の開始後の文字列 GoogleHeader
position= strpos (result_string,"

テーブル
シンボルの位置
result_string= substr (result_string ,0, 位置);//
最初の

table
シンボル , の前にある文字列 をインターセプトします。 脚注を削除します

アプリケーションと実装

OK、これで便利な HTML ソース コード トランクが完成しました。残りの質問は、これらの検索結果エントリを自律的に分析する方法です。各エントリは非常に規則的に
によって区切られていることがわかりました。つまり、各エントリは 1 つの 段落と 段落に分割されています。 explode() 関数を使用して各エントリを分割します:

構文: explode (文字列区切り文字、文字列 文字列);

区切り文字 以降の各 で切り取った配列を返します。小さな文字列は配列

に保存されます。つまり、
result_array(") >", result_string); //
文字列 "

"
を使用して結果

配列 result_array を取得します。ここで、各要素は検索結果エントリです。各エントリとその HTML 表示形式コードを調べて、必要に応じて result_array for( i=0; i
{ .. . //各エントリを処理する
}
各エントリのいくつかの特徴も簡単に見つけることができます。各エントリはタイトル、要約、紹介、カテゴリ、URL などで構成されています。各部分は行折り返されている、つまり

タグが含まれているため、再度分割されます: (次のハンドラーは上記のループ内に配置されます)
every_item=explode("",
result_array[ i
]);
このようにして、配列 every_item を取得します。ここで、 every_item[0] はタイトルです。 every_item[1] および every_item[2]2 行の概要、 every_item[3] every_item[4]etc のヘッダーに "はじめに:","< が含まれる場合font size=- 1 color=#6f6f6f>Category:< /font>” 文字は紹介またはカテゴリです (一部の結果エントリにはこの項目)、ヘッダーに "" が含まれている場合、 が URL であることがよくあります。この比較を使用して判断します。たとえば、タイトルを含む $every_item[0] を置き換える場合は、正規表現 (省略) も非常に便利です。自体はリンクされています。このリンク属性を変更して、新しいウィンドウでリンクが開くようにしたいと考えています。
echo eregi_replace( {
... //
は、最初の項目を除くエントリ内の各項目を処理します (最初の項目はタイトルであり、すでに表示されています)
... //
その他の形式変更
}

このようにして、リンク属性が変更され、他の多くの表示形式の変更、削除、置換を正規表現で置き換えることができます eregi_replace()で完了です。

この時点で各検索項目の各項目を取得できており、各項目の形式を任意に変更したり、美しいテーブルを載せたりすることもできます。ただし、優れたプログラムはさまざまな動作環境に適応できる必要があり、ここでも例外ではありません。実際、ここでは検索結果から HTML を削除するフレームワーク方法についてのみ説明しました。本当にやらなければならないのは、これを完璧に行うには、検索結果が合計で何件あるか、 ページが何ページに分割されているかなどを表示するなど、多くのことを考慮する必要があります。 🎜>関連するもの"カテゴリー", "はじめに およびその他のコードにより、顧客は元の Web サイトをまったく見ることができなくなります。ただし、HTML を解析することで、これらの内容や要件を抽出することができます。今では誰もが自分で行うことができ、高度にパーソナライズされた検索エンジンを構築できます。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。