5

3つのモデル/テーブルがあるとしましょう:operating_systems、、、wordsおよびprogramming_languages

# operating_systems
name:string created_by:string family:string
Windows     Microsoft         MS-DOS
Mac OS X    Apple             UNIX
Linux       Linus Torvalds    UNIX
UNIX        AT&T              UNIX

# words
word:string defenitions:string
window      (serialized hash of defenitions)
hello       (serialized hash of defenitions)
UNIX        (serialized hash of defenitions)

# programming_languages
name:string created_by:string example_code:text
C++         Bjarne Stroustrup #include <iostream> etc...
HelloWorld  Jeff Skeet        h
AnotherOne  Jon Atwood        imports 'SORULEZ.cs' etc...

ユーザーがを検索するhelloと、システムは「hello」の定義を表示します。これは比較的簡単に実装できます。ただし、ユーザーが検索するUNIX場合、エンジンは次を選択する必要があります:wordまたはoperating_system。また、ユーザーが検索するとwindows(小文字の「w」)、エンジンはを選択wordしますが、も表示する必要がありますAssuming 'windows' is a word. Use as an <a href="etc..">operating system</a> instead

検索クエリのトピックを解析して選択することで、誰かが私を正しい方向に向けることができますか?ありがとう。


注: WAのように計算を実行できる必要はありません。

4

3 に答える 3

2

terms各有効な用語のトークン化されたバージョンを含む、という新しいインデックステーブルを作成します。そうすれば、1つのテーブルを検索するだけで済みます。

# terms
Id Name     Type               Priority
1  window   word               false
2  Windows  operating_system   true

次に、ユーザーの検索用語がどれだけ一致しているかを確認できます。つまり、 「Windows」は2-と100%一致するので、それを想定しますが、それに近い1ので、代わりにそれを提案します。単語がどれだけ一致するかを決定する独自のルールエンジンを作成する必要があります(つまり、「windows」と「Windows」で何が想定されるか)。Priorityルールエンジンが決定できない場合、フィールドが最終決定者になる可能性があります。理論的には、ユーザーアクティビティによって駆動されるため、ユーザーが参照している可能性が高いものを学習します。

于 2010-05-07T16:27:05.127 に答える
1

そして、すべてのキーワードが格納されるデータベース テーブルの形式でキャッシュを作成するのはどうでしょうか。

検索クエリは次のようになります。

SELECT * FROM keywords WHERE keyword = '<YourKeyWord>'   /* mysql */

キーワードテーブルには、モジュールへの何らかの参照が含まれます。

このアプローチの利点は、もちろん高速検索です。

求める動作をシミュレートするために、次の 2 つのクエリを使用できます。

  • 完全一致 (mysql では問題ありません)
  • 大文字と小文字を区別しない検索
于 2010-05-07T16:20:21.970 に答える
0

Wolfram Alpha はあなたの例よりもはるかに複雑です...その内部の仕組みについてはよくわかりませんが (ほとんど読んだことがありません)、非常に大規模で複雑な自動推論システムだと思います。それらを実装するのはかなり簡単ですが (Prolog は基本的に、必要なデータを何でも入れることができる汎用目的のものです)、有用にするのは非常に困難です。

于 2010-05-07T17:43:59.683 に答える