8 Oracle Textでのドキュメントの表示方法

Oracle Textには、問合せアプリケーションの結果でドキュメントを表す様々な方法が用意されています。

この章のトピックは、次のとおりです:

8.1 問合せ語句のハイライト表示

テキスト問合せアプリケーションでは、テキスト問合せの場合は問合せ語句をハイライト表示し、ABOUT問合せの場合はテーマをハイライト表示して、選択したドキュメントを表示できます。

ハイライト表示に関連する出力では、次の3タイプの出力を生成できます。

  • マークアップ形式のドキュメント

  • ドキュメントの問合せオフセット情報

  • ドキュメントのコンコーダンス(問合せ語句の出現箇所が前後のテキストとともに戻されます)

この項では、次の項目について説明します。

8.1.1 テキストのハイライト表示

テキストのハイライト表示の場合は、問合せを発行すると、その問合せを満たすドキュメント内のワードがハイライト表示されます。プレーン・テキストまたはHTMLもハイライト表示できます。

8.1.2 テーマのハイライト表示

ABOUT問合せの場合、CTX_DOCプロシージャによって、ABOUT問合せを最も適切に表しているワードまたは句がハイライト表示またはマークアップされます。

8.1.3 CTX_DOCのハイライト表示プロシージャ

CTX_DOCには、次のハイライト表示プロシージャがあります。

  • CTX_DOC.MARKUPおよびCTX_DOC.POLICY_MARKUP

  • CTX_DOC.HIGHLIGHTおよびCTX_DOC.POLICY_HIGHLIGHT

  • CTX_DOC.SNIPPETおよびCTX_DOC.POLICY_SNIPPET

各プロシージャのPOLICYバージョンと非POLICYバージョンは等価ですが、POLICYバージョンに索引は不要です。

ノート:

SNIPPETは、結果セット・インタフェースを使用して生成することもできます。

関連項目:

CTX_QUERY.RESULT_SETの詳細は、『Oracle Textリファレンス』を参照

この項には、次の項目が含まれます。

8.1.3.1 MARKUPプロシージャ

CTX_DOC.MARKUPおよびCTX_DOC.POLICY_MARKUPプロシージャは、ドキュメント参照と問合せを受け取り、マークアップされたドキュメントを戻します。出力は、マークアップされたプレーン・テキストかマークアップされたHTMLのいずれかになります。たとえば、マークアップされたドキュメントを問合せ語句とともに山カッコで囲んで戻すか(<<<tansu>>>)、HTML形式で戻すか(<b>tansu</b>)を指定します。

CTX_DOC.MARKUPおよびCTX_DOC.POLICY_MARKUPは等価ですが、CTX_DOC.POLICY_MARKUPに索引は不要です。

HTMLナビゲーションのマークアップ順序をカスタマイズできます。

CTX_DOC.MARKUP例

次の例は、「CONTEXT問合せアプリケーション」で説明しているWebアプリケーションから取得されています。showDocプロシージャは、HTML文書および問合せを取得して、ハイライト表示されたマークアップを作成し(この場合、問合せ語句は赤で表示されます)、結果をインメモリーのバッファに出力します。次に、htp.printを使用して結果をブラウザに表示します。

procedure showDoc (p_id in varchar2, p_query in varchar2) is

 v_clob_selected   CLOB;
 v_read_amount     integer;
 v_read_offset     integer;
 v_buffer          varchar2(32767);
 v_query           varchar(2000);
 v_cursor          integer;

 begin
   htp.p('<html><title>HTML version with highlighted terms</title>');
   htp.p('<body bgcolor="#ffffff">');
   htp.p('<b>HTML version with highlighted terms</b>');

   begin
     ctx_doc.markup (index_name => 'idx_search_table',
                     textkey    => p_id,
                     text_query => p_query,
                     restab     => v_clob_selected,
                     starttag   => '<i><font color=red>',
                     endtag     => '</font></i>');

     v_read_amount := 32767;
     v_read_offset := 1;
     begin
      loop
        dbms_lob.read(v_clob_selected,v_read_amount,v_read_offset,v_buffer);
        htp.print(v_buffer);
        v_read_offset := v_read_offset + v_read_amount;
        v_read_amount := 32767;
      end loop;
     exception
      when no_data_found then
         null;
     end;

     exception
      when others then
        null; --showHTMLdoc(p_id);
   end;
end showDoc;
end;
/
show errors
set define on

関連項目:

CTX_DOC.MARKUPおよびCTX_DOC.POLICY_SNIPPETの詳細は、『Oracle Textリファレンス』を参照してください。

8.1.3.2 HIGHLIGHTプロシージャ

CTX_DOC.HIGHLIGHTおよびCTX_DOC.POLICY_HIGHLIGHTは、問合せとドキュメントを使用して、プレーン・テキスト形式またはHTML形式のいずれかで問合せのオフセット情報を戻します。このオフセット情報を使用して、ドキュメントを表示する独自のカスタム・ルーチンを作成できます。

CTX_DOC.HIGHLIGHTおよびCTX_DOC.POLICY_HIGHLIGHTは等価ですが、CTX_DOC.POLICY_HIGHLIGHTに索引は不要です。

オフセット情報を使用すると、CTX_DOC.MARKUPから取得した標準のプレーン・テキスト・マークアップのかわりに、(フォント・タイプや色を変えるなどして)ハイライト表示したバージョンのドキュメントを表示できます。

関連項目:

CTX_DOC.HIGHLIGHTおよびCTX_DOC.POLICY_HIGHLIGHTの詳細は、『Oracle Textリファレンス』を参照してください。

8.1.3.3 コンコーダンス

CTX_DOC.SNIPPETおよびCTX_DOC.POLICY_SNIPPETは、問合せ語句の出現箇所が前後のテキストとともに戻される、ドキュメントのコンコーダンスを生成します。ドキュメント全体が(問合せ語句のハイライト表示ありまたはなしで)戻されるのではなく、文脈がわかるように問合せ語句がテキスト断片で戻されるため、この結果はKWIC (Key Word in Context)とも呼ばれます。戻される断片内で問合せ語句がハイライト表示される方法を制御できます。

CTX_DOC.SNIPPETおよびCTX_DOC.POLICY_SNIPPETは等価ですが、CTX_DOC.POLICY_SNIPPETに索引は不要です。CTX_DOC.POLICY_SNIPPETおよびCTX_DOC.SNIPPETには、2つの新しい属性が含まれています。radiusでは各セグメントの概算の長さを指定し、max_lengthではすべてのセグメントの合計の長さの上限を設定します。

関連項目:

CTX_DOC.SNIPPETおよびCTX_DOC.POLICY_SNIPPETの詳細は、『Oracle Textリファレンス』を参照してください。

8.2 ドキュメントの品詞情報の取得

CTX_DOCパッケージには、指定したドキュメントの品詞情報を取得するためのポリシーを作成するプロシージャが含まれます。このアプローチの詳細は、『Oracle Textリファレンス』POLICY_NOUN_PHRASESおよび『Oracle Textリファレンス』POLICY_PART_OF_SPEECHを参照してください。

8.3 テーマのリスト、要旨およびテーマ・サマリーの取得

次の表では、テーマのリスト、要旨およびテーマ・サマリーについて説明します。

表8-1 テーマのリスト、要旨およびテーマ・サマリー

出力タイプ 説明

テーマのリスト

ドキュメントの主要概念のリスト。

各テーマは、単一のワード、単一の句または親テーマの階層リストになります。

要旨

ドキュメントの概要を最も適切に表すドキュメント内のテキスト。

テーマ・サマリー

ドキュメントの特定のテーマを最も適切に表すドキュメント内のテキスト。

テーマ、要旨およびテーマ・サマリーのリストを取得するには、CTX_DOCパッケージのプロシージャを使用して、次のようにします。

  • 主キーに加えてROWIDでもドキュメントを識別します。

  • パフォーマンス向上のため、結果をインメモリーに格納します。

8.3.1 テーマのリスト

テーマのリストは、ドキュメントの主要概念のリストです。テーマのリストを生成するには、CTX_DOC.THEMESプロシージャを使用します。

関連項目:

CTX_DOC.THEMESのコマンド構文の詳細は、『Oracle Textリファレンス』を参照してください。

次のインメモリー・テーマの例では、ドキュメント1のトップ10のテーマを生成し、それをthe_themesというインメモリー表に格納します。次に、表内をループして、ドキュメント・テーマを表示します。

declare
 the_themes ctx_doc.theme_tab;

begin
 ctx_doc.themes('myindex','1',the_themes, numthemes=>10);
 for i in 1..the_themes.count loop
  dbms_output.put_line(the_themes(i).theme||':'||the_themes(i).weight);
  end loop;
end;

次の例では、結果表のテーマを作成しています。

create table ctx_themes (query_id number, 
                         theme varchar2(2000), 
                         weight number);

この例では、リストの各要素が単一テーマであるテーマ・リストを取得しています。

begin
ctx_doc.themes('newsindex','34','CTX_THEMES',1,full_themes => FALSE);
end;

この例では、リストの各要素が親テーマの階層リストであるテーマ・リストを取得しています。

begin
ctx_doc.themes('newsindex','34','CTX_THEMES',1,full_themes => TRUE);
end;

8.3.2 要旨およびテーマ・サマリー

要旨は、ドキュメントの概要を最も適切に表すドキュメント内のテキストです。テーマ・サマリーは、ドキュメントの単一テーマを最も適切に表すドキュメント内のテキストです。

要旨およびテーマ・サマリーを生成するには、CTX_DOC.GISTプロシージャを使用します。プロシージャのコール時に、要旨またはテーマ・サマリーのサイズを指定できます。

関連項目:

CTX_DOC.GISTのコマンド構文の詳細は、『Oracle Textリファレンス』を参照してください。

インメモリー要旨の例

次の例では、10個以内の段落のデフォルト・サイズでない全体の要旨を生成します。結果はCLOBロケータの中のメモリーに格納されます。使用後、コードは戻されたCLOBロケータの割当てを解除します。

declare
  gklob clob;
  amt number := 40;
  line varchar2(80);

begin
 ctx_doc.gist('newsindex','34','gklob',1,glevel => 'P',pov => 'GENERIC',       numParagraphs => 10);
  -- gklob is NULL when passed-in, so ctx-doc.gist will allocate a temporary
  -- CLOB for us and place the results there.
  
  dbms_lob.read(gklob, amt, 1, line);
  dbms_output.put_line('FIRST 40 CHARS ARE:'||line);
  -- have to de-allocate the temp lob
  dbms_lob.freetemporary(gklob);
 end;

結果表の要旨の例

要旨表を作成するには、次を入力します。

create table ctx_gist (query_id  number,
                       pov       varchar2(80), 
                       gist      CLOB);

次の例では、ドキュメント34に対して、デフォルト・サイズの段落要旨を戻しています。

begin
ctx_doc.gist('newsindex','34','CTX_GIST',1,'PARAGRAPH', pov =>'GENERIC');
end;

次の例では、10個の段落のデフォルト・サイズでない要旨を生成します。

begin
ctx_doc.gist('newsindex','34','CTX_GIST',1,'PARAGRAPH', pov =>'GENERIC',        numParagraphs => 10);
end;

次の例では、段落数がドキュメントの合計段落数の10パーセントの要旨を生成します。

begin 
ctx_doc.gist('newsindex','34','CTX_GIST',1, 'PARAGRAPH', pov =>'GENERIC', maxPercent => 10);
end;

テーマ・サマリーの例

次の例では、テキストキー34を持つドキュメントのテーマinsectsに対するテーマ・サマリーを戻します。デフォルト・サイズの要旨が戻ります。

begin
ctx_doc.gist('newsindex','34','CTX_GIST',1, 'PARAGRAPH', pov => 'insects');
end;

8.4 ドキュメントの表示およびハイライト表示

通常、問合せアプリケーションでは、問合せから戻されるドキュメントを表示できます。ユーザーがヒットリストからドキュメントを選択すると、そのドキュメントがアプリケーションのなんらかのフォームで表示されます。

Oracle Textでは、ワード問合せのワードまたは英語でのABOUT問合せのテーマのいずれかをハイライト表示するなど、ドキュメントを様々な方法で表示できます。

また、PL/SQLパッケージCTX_DOCを使用して、ドキュメントから要旨(ドキュメントのサマリー)とテーマ情報を取得することもできます。

表8-2は、取得可能な出力と、各出力を取得するためのプロシージャを示しています。

表8-2 CTX_DOCの出力

出力 プロシージャ

プレーン・テキスト形式、ハイライト表示なし

CTX_DOC.FILTER

HTML形式のドキュメント、ハイライト表示なし

CTX_DOC.FILTER

ハイライト表示されたドキュメント、プレーン・テキスト形式

CTX_DOC.MARKUP

ハイライト表示されたドキュメント、HTML形式

CTX_DOC.MARKUP

プレーン・テキスト形式のハイライト表示オフセット情報

CTX_DOC.HIGHLIGHT

HTML形式のハイライト表示オフセット情報

CTX_DOC.HIGHLIGHT

ドキュメントのテーマ・サマリーと要旨

CTX_DOC.GIST

ドキュメントのテーマ・リスト

CTX_DOC.THEMES