9.4 ルールベース分類

ルールベース分類は、Oracle Text分類アプリケーションを作成するための基本的なソリューションです。

ルールベース分類の基本的なステップは、次のとおりです。ステップの詳細は、例で説明します。

  1. 分類するドキュメント用の表を作成し、それにドキュメントを移入します。

  2. ルール表(カテゴリ表ともいう)を作成します。ルール表は、開発者がネーミングしたカテゴリ(「medicine(医学)」または「finance(会計)」など)、およびドキュメントをこれらのカテゴリにソートするルールで構成されます。

    これらのルールが実際の問合せとなります。たとえば、"hospital"、"doctor"、"disease"というワードを含むドキュメントとして、"medicine"カテゴリを定義します。したがって、"hospital OR doctor OR disease"という形式でルールを設定します。

  3. ルール表でCTXRULE索引を作成します。

  4. ドキュメントを分類します。

関連項目:

問合せに使用できる演算子の詳細は、CTXRULEパラメータおよび制限事項を参照

9.4.1 ルールベース分類の例

この例では、様々な主題に関する新しい記事を収集し、分類します。ルールを作成したら、それを索引付けし、MATCHES文を使用してドキュメントを分類できます。

ドキュメントを分類するには:

  1. データを格納するためのスキーマを作成します。

    news_tableに、分類するドキュメントが格納されます。news_categories表に、カテゴリおよびカテゴリを定義するルールが格納されます。news_id_cat表に、分類後のドキュメントIDおよび関連するカテゴリが格納されます。

    create table news_table (
           tk number primary key not null,
           title varchar2(1000),
           text clob);
    
    create table news_categories (
            queryid  number primary key not null,
            category varchar2(100),
            query    varchar2(2000));
    
    create table news_id_cat (
            tk number, 
            category_id number);
  2. SQLLDRを使用してドキュメントをロードします。

    SQLLDRプログラムを使用して、news_tableにHTMLの新しい記事をロードします。ファイル名およびタイトルはloader.datから読み取ります。

    LOAD DATA
         INFILE 'loader.dat'
         INTO TABLE news_table
         REPLACE
         FIELDS TERMINATED BY ';'
         (tk         INTEGER EXTERNAL,
          title      CHAR,
          text_file  FILLER CHAR,
          text       LOBFILE(text_file) TERMINATED BY EOF)
  3. カテゴリを作成し、カテゴリごとにルールを記述します。

    定義済カテゴリは、Asia (アジア)、Europe (ヨーロッパ)、Africa (アフリカ)、Middle East (中東)、Latin America (ラテン・アメリカ)、United States (米国)、Conflicts (紛争)、Finance (会計)、Technology (科学技術)、Consumer Electronics (家庭用電化製品)、World Politics (国際政治)、U.S. Politics (米国政治)、Astronomy (天文学)、Paleontology (古生物学)、Health (健康)、Natural Disasters (自然災害)、Law (法律)およびMusic News (ミュージック・ニュース)です。

    ルールとは、カテゴリに対するドキュメントを選択する問合せのことです。たとえば、Asiaカテゴリには、「China or Pakistan or India or Japan」というルールがあります。news_categories表にルールを挿入します。

    insert into news_categories values
      (1,'United States','Washington or George Bush or Colin Powell');
    
    insert into news_categories values
      (2,'Europe','England or Britain or Germany');
    
    insert into news_categories values
      (3,'Middle East','Israel or Iran or Palestine');
    
    insert into news_categories values(4,'Asia','China or Pakistan or India or Japan');
    
    insert into news_categories values(5,'Africa','Egypt or Kenya or Nigeria');
    
    insert into news_categories values
      (6,'Conflicts','war or soldiers or military or troops');
    
    insert into news_categories values(7,'Finance','profit or loss or wall street');
    insert into news_categories values
      (8,'Technology','software or computer or Oracle 
       or Intel or IBM or Microsoft');
    
    insert into news_categories values
      (9,'Consumer electronics','HDTV or electronics');
    
    insert into news_categories values
      (10,'Latin America','Venezuela or Colombia 
       or Argentina or Brazil or Chile');
    
    insert into news_categories values
      (11,'World Politics','Hugo Chavez or George Bush 
       or Tony Blair or Saddam Hussein or United Nations');
    
    insert into news_categories values
      (12,'US Politics','George Bush or Democrats or Republicans 
       or civil rights or Senate');
    
    insert into news_categories values
      (13,'Astronomy','Jupiter or Earth or star or planet or Orion 
       or Venus or Mercury or Mars or Milky Way 
       or Telescope or astronomer 
       or NASA or astronaut');
    
    insert into news_categories values
      (14,'Paleontology','fossils or scientist 
       or paleontologist or dinosaur or Nature');
    
    insert into news_categories values
      (15,'Health','stem cells or embryo or health or medical
       or medicine or World Health Organization 
       or virus or centers for disease control or vaccination');
    
    insert into news_categories values
      (16,'Natural Disasters','earthquake or hurricane or tornado');
    
    insert into news_categories values
      (17,'Law','Supreme Court or legislation');
    
    insert into news_categories values
      (18,'Music News','piracy or anti-piracy 
       or Recording Industry Association of America 
       or copyright or copy-protection or CDs 
       or music or artist or song');
    
    commit;
  4. news_categories問合せ列にCTXRULE索引を作成します。
    create index news_cat_idx on news_categories(query)
    indextype is ctxsys.ctxrule;
  5. ドキュメントを分類するには、CLASSIFIER.THIS PL/SQLプロシージャ(この例のために設計された単純なプロシージャ)を使用します。

    このプロシージャは、news_tableをスクロールし、各ドキュメントをカテゴリと照合して、分類された結果をnews_id_cat表に書き込みます。

    create or replace package classifier as procedure this;end;/
    
    show errors
    
    create or replace package body classifier as
    
     procedure this
     is
      v_document    clob;
      v_item        number;
      v_doc         number;
     begin
    
      for doc in (select tk, text from news_table)
         loop
            v_document := doc.text;
            v_item := 0;
            v_doc  := doc.tk;
            for c in (select queryid, category from news_categories
                 where matches(query, v_document) > 0 )
              loop
                v_item := v_item + 1;
                insert into news_id_cat values (doc.tk,c.queryid);
              end loop;
       end loop;
    
     end this;
    
    end;
    /
    show errors
    exec classifier.this

9.4.2 CTXRULEパラメータおよび制限事項

次の考慮事項は、CTXRULE索引の索引付けに適用されます。

  • SVM_CLASSIFIER分類子を使用する場合は、BASIC_LEXERCHINESE_LEXERJAPANESE_LEXERまたはKOREAN_MORPH_LEXERレクサーを使用できます。SVM_CLASSIFIERを使用しない場合は、BASIC_LEXERレクサー・タイプのみを使用して問合せセットを索引付けできます。

  • filter、memory、datastore、[no]populateの各パラメータは、CTXRULE索引タイプには適用できません。

  • CREATE INDEXのSTORAGE句は、問合せでCTXRULE索引を作成するためにサポートされています。

  • ワードリストは、問合せセットに対するステミング操作でサポートされています。

  • CTXRULEに対する問合せは、CONTAINS問合せと類似しています。CONTAINS演算子(ABOUTANDNEARNOTORSTEMWITHINおよびTHESAURUS)とともに、基本的なフレーズ(dog house)がサポートされています。MATCHES演算子を使用してドキュメントを分類する場合、セクション・グループがサポートされています。フィールド・セクションもサポートされていますが、CTXRULEではフィールド問合せが直接サポートされないため、CONTEXT問合せに対しては問合せリライトを使用する必要があります。

  • データベースをエクスポートまたはダウングレードする前に、CTXRULE索引を削除する必要があります。

関連項目: