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;