クワッドダンプを使用して、フリーベース検索APIのローカルバージョンを構築しようとしています。名前を照合するためにどのアルゴリズムを使用しているのでしょうか。例として、freebase.comにアクセスして「ハイキング」と入力すると、次のようになります。
- 「アポハイキング協会」
- "ハイキング"
- 「ジョージア州のハイキング」
- 「バージニアの国有林のハイキング」
- "ハイキングコース"
クワッドダンプを使用して、フリーベース検索APIのローカルバージョンを構築しようとしています。名前を照合するためにどのアルゴリズムを使用しているのでしょうか。例として、freebase.comにアクセスして「ハイキング」と入力すると、次のようになります。
うわー、たくさんの推測!推測もせずに水を濁しすぎないようにしたいと思います。
オートコンプリートボックスは、基本的にFreebase Suggestを利用しており、FreebaseSuggestはFreebaseSearchサービスを利用しています。検索サービスによって照合のためにインデックスが付けられる文字列には、1)名前、2)指定された言語のすべてのエイリアス、3)関連するウィキペディアの記事からのリンクアンカーテキスト、4)識別子(Freebaseではキーと呼ばれる)が含まれます。ウィキペディアの記事のタイトル(およびリダイレクト)のように。
さまざまなものがどのように重み付け/ブーストされるかは明らかにされていませんが、しばらく遊んでみると、物事の感触をつかむことができます。APIからわかるように、タイプやその他の基準によるフィルタリング/重み付けを行う機能もあり、これはコンテキストに応じて機能する可能性があります。たとえば、アルバムにレコードレーベルを追加する場合、レコードレーベルとして入力されたトピックは、そうでないものに比べてブーストされます(ただし、他のタイプのものにアクセスして、ユースケースを考慮に入れることができます)。ターゲットトピックに適切なタイプがまだ適用されていない場合)。
これで、サービスがどのように機能するかについて少し洞察が得られますが、とにかくゼロから始めているので、必要なことを実行する検索サービスを構築してみませんか?
ところで、グーグル以前のメタウェブ検索の実装はLuceneの上に基づいていたので、それを出発点として使用するよりも間違いなく悪いことをする可能性があります。メーリングリストのアーカイブで詳細の一部を読むことができます
おそらく、英語名、エイリアス、表示されたWikipediaスニペットなど、選択したフィールドに対して転置インデックスを使用します。アプリケーションでは、Luceneのようなものを使用してそれを実現できます。
アルゴリズムの面では、次の論文が良い概要だと思います
ほとんどの場合、辞書式順序のトライです。
利用可能なアルゴリズムは多数あります。ボイヤー-ムーア、スミス-ウォーターマン-ゴトー、クヌースモリス-プラットなどです。レーベンシュタインなどの距離の編集アルゴリズムも確認することをお勧めします。目的に最も適したものを見つけるために、いろいろと試してみる必要があります。
このようなアルゴリズムの実装は、シェフィールド大学のSimmetricsライブラリです。