4

プロジェクトの「アルファベット順検索」モジュールを実行しています。

つまり、次のようになります

ABCDEF . . . . . . . . . .. . . . . . . .. . . . Z

「 A 」をクリックすると、結果は「 A」でソートされます。これはすべてのアルファベットで同じです。

今、私の問題は次のとおりです。

  • たとえば、「The Mummy」という映画があります。

  • 「 ALPHABET T 」をクリックすると、この対応するフィルムがソートされます。

  • しかし、私のクライアント要件は、ユーザーが「T」ではなく「M」をクリックしたときに「The Mummy」ムービーをソートする必要があるということです。

  • 「a 、an、the」は「ARTICLES」であり、意味はありません。

私の問題が何であるかを誰もが理解できることを願っています....

どんな助けでも、かなりの価値があり、感謝しています。

前もって感謝します

4

3 に答える 3

2

テーブルの内容を変更したくない (したがって、クエリの効率が若干低下する) ことを望まないと仮定すると、次の方法でうまくいくはずです。
(テーブルを変更する余裕がある場合、この回答の最後にある提案を参照してください)

SELECT Title
FROM myTable
WHERE (Title LIKE 'x%' OR Title LIKE 'THE x%')
  -- AND Title NOT LIKE 'THE [^T]%'   
ORDER BY Title

注:
- x は目的の文字を指定します (例: LIKE 'A%' など)
- "AND TITLE NOT LIKE" 追加条件は、"X" が文字 "T" の場合にのみ必要です (それ以外の場合は機能的に冗長ですが、は結果を変更しません) -
のサポート[^xyz](つまり、文字 x、y、または z ではない) が不明なので、を正の同等の say に置き換えることができます。[^T][A-RS-Z0-9]

他にも考慮すべきストップ ワードがいくつかありますが (「A」、「AN」、「OF」など)、本や映画のタイトルの場合は、「THE」のみを考慮するのが一般的です。他の記事を処理する必要がある場合は、次のようにロジックを拡張できます。

SELECT Title
FROM myTable
WHERE (Title LIKE 'x%' 
    OR Title LIKE 'THE x%' 
    OR Title LIKE 'A x%' 
    OR Title LIKE 'AN x%') 
 -- the following is only needed when "x" is either the letter T or A.
 -- AND (Title NOT LIKE 'THE [^T]%' 
 --      AND Title NOT LIKE 'A [^A]%' 
 --      AND Title NOT LIKE 'AN [^A]%'
 --  )
ORDER BY Title



テーブルの内容を変更できる場合は、より良い解決策があります。これらのいくつかは、1 つまたは複数の余分な列を事前に計算することを意味します (新しいレコードが追加されたときなどに、それらを維持します)。

  • たとえば、「sort_column」アプローチについては、この投稿の Cletus の回答を参照してください。余分な列には、望ましくない先頭のノイズ ワードが削除されたタイトルが含まれています。OP の頭文字検索問題におけるフィルタリング フィールドとしての目的に加えて、この列は、頭文字に関係のないフィルターによって生成されたタイトルのリストを、より友好的/賢明な方法で並べ替えるためにも使用できます。および/またはタイトルの先頭 (年で検索してください)。
  • 上記のバリエーションは、「効果的な」最初の文字 (望ましくないノイズを過ぎたもの) のみを保存することです。これにより、列は小さくなりますが、汎用性も低くなります。
  • タイトル列自体を更新して、タイトルの変更された形式を保存することができます。これにより、不要な先頭のノイズ ワードが文字列の末尾の括弧内に移動されます。この慣行は、書誌タイプのカタログでは非常に一般的です。
于 2010-03-10T05:53:08.017 に答える
2

ここで本当に求めているのは、「ストップ ワード」を削除する方法です (「the」は単なる一例です。「of」、「a」などを削除する必要があります)。一連のストップ ワードをハードコーディングしようとするのは大変な苦痛であり、コーパスが変更されると、コードを変更する必要があります。

代わりに、コーパスに基づいてストップ ワードが何であるかを推測するアルゴリズムを使用するようにしてください。このようなことを行うアルゴリズムはよく知られており、検索エンジンで採用されています。非常にうまく機能するものは、TF/IDFと呼ばれます。

于 2010-03-10T05:58:38.927 に答える