13

Google App Engineを使用して Web アプリケーションを作成したい(参照言語はPythonになります)。私のアプリケーションには単純な検索エンジンが必要なので、ユーザーはキーワードを指定してデータを見つけることができます。

たとえば、これらの行を含む 1 つのテーブルがある場合:

1 オフィススペース
2 2001: 宇宙の旅
3 ブラジル

ユーザーが「スペース」をクエリすると、行 1 と 2 が返されます。ユーザーが「オフィス スペース」をクエリすると、結果も行 1 と 2 になります (行 1 が最初)。

これを簡単な方法で行うための技術的なガイドライン/アルゴリズムは何ですか?
この背後にある理論への良い指針を教えてもらえますか?

ありがとう。

編集:ここでは複雑なものを探しているわけではありません(大量のデータのインデックス作成など)。

4

13 に答える 13

8

このテーマに関するTim Bray の一連の投稿を読んでください。

  • バックグラウンド
  • 検索エンジンの使用
  • 基本
  • 適合率と再現率
  • 検索エンジン インテリジェンス
  • トリッキーな検索用語
  • ストップワード
  • メタデータ
  • 国際化
  • ランキング結果
  • XML
  • ロボット
  • 要件リスト
于 2008-10-07T02:06:11.550 に答える
6

全文検索エンジンを構築していたとき、この 2 冊の本は非常に役に立ちました。

情報検索

ギガバイトの管理

于 2008-10-06T21:14:52.433 に答える
4

可能であれば、私はそれを自分で構築しません。

App Engine には、全文検索エンジンの基本が含まれており、その使用方法を説明したすばらしいブログ投稿がここにあります。

バグ トラッカーには、最近注目を集めている機能のリクエストもあります。そのため、可能であれば、それが実装されるまで保留することをお勧めします。

于 2008-10-07T02:30:26.477 に答える
3

いつものようにウィキペディアから始めます。通常、最初に開始するのは逆索引の作成です。

于 2008-10-06T21:21:49.953 に答える
3

ここに元のアイデアがあります:

索引を作成しないでください。真剣に。

私はしばらく前に同様の問題に直面しました。ドキュメントから大量のテキストをすばやく検索する方法が必要でした。単語だけでなく、大きなドキュメント内の単語の近接 (この単語はその単語の近くにあるか) を照合する必要がありました。私はCでそれを書くことになったばかりで、その速度には驚かされました. 最適化やインデックス作成を必要としないほど十分に高速でした。

今日のコンピューターの速度では、金属上で直接実行されるコード (コンパイル済みコード) を作成する場合、多くの場合、必要なパフォーマンスを得るために order log(n) 型のアルゴリズムは必要ありません。

于 2008-10-06T22:58:42.723 に答える
3

ルセン自律か!これらはすぐに使えるソリューションではありません。インターフェイスの上にラッパーを記述する必要があります。
彼らは確かにステミング、文法、関係演算子などを処理します

于 2008-10-07T10:41:51.430 に答える
1

まず、インデックスを作成します。入力を確認し、単語に分割します。単語
ごとに、それがすでにインデックスにあるかどうかを確認します。現在のレコード番号をインデックスリストに追加する場合は、単語とレコード番号を追加します。
単語を検索するには、(おそらくソートされた)インデックスに移動し、その単語のすべてのレコード番号を返します。
Pythonの組み込みストレージタイプを使用して、合理的なサイズのリストに対してこれを行うのは非常に簡単です。

追加の改良として、単語のベース部分のみを保存する必要があります。たとえば、「find」は「finding」の場合は、ステミングアルゴリズムを検索します。

于 2008-10-06T21:59:14.967 に答える
1

情報検索入門という本は、この分野への良い入門書を提供します。

デッドツリーバージョンはCambridgeUniversityPressから発行されていますが、上記のリンクから無料のオンライン版(HTMLおよびPDF)を見つけることもできます。

于 2008-10-08T01:37:25.493 に答える
0

本「Managing Gigabytes」を調べてください。膨大な量のプレーンテキストデータの保存と検索がカバーされています。圧縮と実際の検索の両方、およびそれぞれに使用できるさまざまなアルゴリズム。

また、平文検索の場合は、キーワード -> ドキュメント インデックス システムではなく、ベクトル ベースの検索システムを使用することをお勧めします。これは、ベクトル ベースのシステムの方がはるかに高速であり、さらに重要なことに、関連性ランキングを比較的簡単に提供できるためです。

于 2008-10-08T02:26:31.853 に答える
0

今週末、この記事を見つけました: http://www.perl.com/pub/a/2003/02/19/engine.html

単純なものを実行するのはそれほど複雑ではないように見えます (ただし、エンタープライズ タイプのソリューションになるには、高度な最適化が必要になります)。Project Gutenberg のデータを使って概念実証を試みる予定です。

探求して学べるものを探しているだけなら、これは良いスタートだと思います。

于 2008-10-07T02:40:28.580 に答える
0

私が尋ねた質問も参照してください: How-to: Ranking Search Results .

確かにもっと多くのアプローチがありますが、これは私が今のところ使用しているものです。

于 2008-10-06T21:23:36.427 に答える
0

正直なところ、私がこのことを理解しているよりも賢い人たちです。solr アプリをロードして、appengine アプリから json 呼び出しを行い、solr にインデックス作成を任せます。

于 2008-10-06T22:49:56.937 に答える
-1

これを試してみてください: 変数テーブルが検索エントリのリストであるとします。

query = input("Query: ").strip().lower()#Or raw_input, for python 2
end = []
for item in table:
    if query in item.strip().lower():
        end.append(item)

print end #Narrowed results

すべてのアイテムを繰り返し処理して、クエリがそれらのいずれかにあるかどうかを確認します。シンプルなアプリ内検索機能で動作します。ただし、インターネット全体ではないかもしれません。

于 2017-01-04T21:45:06.197 に答える