4.7 CTXRULE索引の作成

ドキュメント分類アプリケーションを作成するには、表または問合せにCTXRULE索引を使用します。着信ドキュメントのストリームがコンテンツで分類されると、問合せによりカテゴリが定義されます。単一ドキュメントの分類には、MATCHES演算子を使用できます。

CTXRULE索引および単純なドキュメント分類アプリケーションを作成するには、次の手順に従います。

  1. 問合せの表を作成します。

    カテゴリ名および問合せテキストを保持するmyqueries表を作成し、この表に分類と各分類を定義する問合せを移入します。

    CREATE TABLE myqueries (
    queryid NUMBER PRIMARY KEY,
    category VARCHAR2(30),
    query VARCHAR2(2000)
    );
    

    たとえば、主題US PoliticsMusicおよびSoccerの分類を考えてみます。

    INSERT INTO myqueries VALUES(1, 'US Politics', 'democrat or republican');
    INSERT INTO myqueries VALUES(2, 'Music', 'ABOUT(music)');
    INSERT INTO myqueries VALUES(3, 'Soccer', 'ABOUT(soccer)');

    ヒント:

    ルール(または問合せ)の表の生成には、CTX_CLS.TRAINプロシージャも使用できます。このプロシージャは入力としてドキュメント・トレーニング・セットを取ります。

  2. CTXRULE索引を作成します。

    CREATE INDEX文を使用してCTXRULE索引を作成し、必要に応じてレクサー、記憶域、セクション・グループおよびワードリストの各パラメータを指定します。

    CREATE INDEX myruleindex ON myqueries(query)
         INDEXTYPE IS CTXRULE PARAMETERS
               ('lexer lexer_pref 
                 storage storage_pref 
                 section group section_pref 
                 wordlist wordlist_pref');
  3. ドキュメントを分類します。

    MATCHES演算子を使用してドキュメントを分類します。

    着信ドキュメントは表newsに格納されるとします。

    CREATE TABLE news ( 
    newsid NUMBER,
    author VARCHAR2(30),
    source VARCHAR2(30),
    article CLOB);
    

    必要に応じて、MATCHESで「BEFORE INSERT」トリガーを作成して、各ドキュメントをそれぞれの分類に基づいて別の表news_routeにルーティングします。

    BEGIN
      -- find matching queries
      FOR c1 IN (select category
                   from myqueries
                  where MATCHES(query, :new.article)>0) 
      LOOP
        INSERT INTO news_route(newsid, category)
          VALUES (:new.newsid, c1.category);
      END LOOP;
    END;

関連項目: