23

数千ページの新聞記事をOCRedしています。各ページの新聞、号、日付、ページ番号、OCRed テキストは、mySQL データベースに格納されています。

ここで、Google のような検索エンジンを PHP で構築して、クエリが与えられたページを見つけたいと考えています。高速で、検索に 1 秒もかからない必要があります。

どうすればいいですか?

4

9 に答える 9

15

SphinxSearchを試すこともできます。Craigslist は sphinx を使用しており、mysql と postgresql の両方に接続できます。

于 2009-02-02T05:50:43.367 に答える
10

興味深い検索エンジンがいくつかあります。「Google のように」の意味がわからないので、その部分は無視します。

  • Luceneエンジンを見てみましょう。オリジナルは高性能ですが Java で書かれています。Lucene から PHP への移植版(既に他の場所で言及されています) がありますが、遅すぎます。
  • Xapian Projectを真剣に見てください。これは速い。これは C++ で書かれているため、おそらくターゲット サーバー用にビルドする必要がありますが、PHP バインディングがあります。
于 2009-02-02T05:23:23.923 に答える
10

MySQL の全文検索がクエリごとに 20 秒かかる場合は、設定が間違っているか、能力の低いハードウェアで実行されているかのどちらかです。一部の大規模サイトでは、単純な古い MyISAM 検索を使用して成功しています。

ただし、私の投票はSolrです。これは Lucene に基づいているため、最高の組み合わせの製品のすべての機能とパフォーマンスを得ることができますが、RESTful API を使用すると、PHP から非常に簡単に作成できます。dWの記事もあります。

于 2009-02-02T08:44:26.747 に答える
4

すべてのファイルを Google ドキュメントに置き、その結果を自分の Web サイトにスクレイピングすることができます。

私の懸念は、OCR の精度がまだ問題であることです。そのため、検索要件の 1 つの考慮事項は、「あいまい」検索を実行する機能です。OCR が "hot" に対して "hat" という単語を誤って認識した場合、検索エンジンは十分に賢く、類似しているが正確ではない結果を返します。Oracle には、2 つの文字列の類似性を比較するUTL_MATCHという関数があります。

このような機能があれば便利です。

于 2012-10-18T16:08:13.063 に答える
2

あなたのシナリオは、自分でロールバックしたいことを示唆しています。一般的な検索エンジンの出発点としては、次のものが含まれます。

市販のソリューションを使用する場合:

于 2009-02-02T05:24:48.210 に答える
2

Google 検索アプライアンスや Google Enterprise などを試してみませんか? 関連するコストがかかりますが、車輪を再発明する必要がなくなり、「google like」検索が可能になります。

于 2009-02-02T05:33:51.203 に答える
1

Sphiderを確認することをお勧めします。私の経験では、それは非常に高速で、インデックス作成を自動的に行います。また、オープン ソースであるため、コードを取得して必要に応じて変更することもできます。

于 2009-02-02T05:28:22.413 に答える
1

PHP のこのLuceneポートを確認します。

于 2009-02-02T05:16:52.343 に答える
0

sqlite には非常に優れた全文検索機能があります (sqlite FTS 3/4 を参照してください - 驚くほど優れています)。

シンプルなPHP diyアプローチが必要な場合は、索引付けされている用語のハッシュで分割された多数の小さなファイルを使用して索引付けを行うと、非常にうまく機能し、設計に注意すればphpでも検索が非常に高速になります。(アイデアは、ハッシュとレコード ID に一致する用語を含む非常に小さなファイルを検索する必要があるだけの用語を検索することです。HD スペースを節約したい場合は、bitarray スライスを使用してレコード ID を表すことができます) ..しかし、全文のすべての単語のインデックス作成はphpでは遅くなります..その部分は実際にはcで行う必要があります

「ファジー」検索の場合は、メタフォン ハッシュの使用を検討してください。

ビルド済みのフルテキスト ツールについては、以下をチェックしてください: sqlite FTS 3/4 (sqlite には非常に優れたフルテキスト検索機能があります!)、Sphinx、kinoSearch (kinoSearch は Lucene に少し似ていますが、バックエンドは C で、使いやすい perl ラッパーを備えています - cLucene もありますが、それはまだプレアルファだと思います)

Java Lucene (または Java ベースのもの) は、おそらく JVM を実行するために大量の RAM を確保する必要があります。

于 2013-02-28T04:32:47.693 に答える