5 Oracle Textでのドキュメントの表示方法
Oracle Textには、問合せアプリケーションの結果でドキュメントを表す様々な方法が用意されています。この章では、ドキュメントの表示方法を説明します。
この章のトピックは、次のとおりです:
5.1 問合せ語句のハイライト表示
Oracle Textの問合せアプリケーションでは、テキスト問合せの場合は問合せ語句をハイライト表示し、ABOUT
問合せの場合はテーマをハイライト表示して、選択したドキュメントを表示できます。
ハイライト表示に関連する出力では、次の3タイプの出力を生成できます。
-
マークアップ形式のドキュメント
-
ドキュメントの問合せオフセット情報
-
ドキュメントのコンコーダンス(問合せ語句の出現箇所が前後のテキストとともに戻されます)
この項では、次の項目について説明します。
5.1.1 テキストのハイライト表示
テキストのハイライト表示の場合は、問合せを発行すると、その問合せを満たすドキュメント内のワードがハイライト表示されます。プレーン・テキストまたはHTMLもハイライト表示できます。
5.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リファレンス』を参照
この項には、次の項目が含まれます。
5.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
5.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
から取得する標準のプレーン・テキストのマークアップではなく、様々なフォント・タイプまたは色で、ドキュメントを表示できます。
5.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
には、新しい属性としてradius
とmax_length
の2つがあります。radius
属性は、各セグメントで必要なおよその長さを指定します。一方、max_length
ではすべてのセグメントの合計の長さに上限を設定します。
5.2 ドキュメントの品詞情報の取得
CTX_DOC
パッケージには、指定したドキュメントの品詞情報を取得するためのポリシーを作成するプロシージャが含まれます。これは『Oracle Textリファレンス』のPOLICY_NOUN_PHRASES
、および『Oracle Textリファレンス』のPOLICY_PART_OF_SPEECH
に記載されています。
5.3 テーマのリスト、要旨およびテーマ・サマリーの取得
次の表では、テーマのリスト、要旨およびテーマ・サマリーについて説明します。
表5-1 テーマのリスト、要旨およびテーマ・サマリー
出力タイプ | 説明 |
---|---|
ドキュメントの主要概念のリスト。 リストの各テーマが単一のワードまたは句である場合、あるいはリストの各テーマが親テーマの階層リストである場合は、テーマのリストを生成できます。 |
|
ドキュメントの概要を最も適切に表すドキュメント内のテキスト。 |
|
ドキュメントの特定のテーマを最も適切に表すドキュメント内のテキスト。 |
この出力を取得するには、提供されているCTX_DOC
パッケージのプロシージャを使用します。このパッケージを使用すると、次の操作を実行できます。
-
主キーに加えて
ROWID
でもドキュメントを識別します。 -
パフォーマンス向上のため、結果をインメモリーに格納します。
5.3.1 テーマのリスト
テーマのリストは、ドキュメントの主要概念のリストです。テーマのリストを生成するには、CTX_DOC.THEMES
プロシージャを使用します。
次のインメモリー・テーマの例では、ドキュメント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;
5.3.2 要旨およびテーマ・サマリー
要旨は、ドキュメントの概要を最も適切に表すドキュメント内のテキストです。テーマ・サマリーは、ドキュメントの単一テーマを最も適切に表すドキュメント内のテキストです。
要旨およびテーマ・サマリーを生成するには、CTX_DOC.GIST
プロシージャを使用します。プロシージャのコール時に、要旨またはテーマ・サマリーのサイズを指定できます。
5.3.2.1 インメモリー要旨
次の例では、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;
5.3.2.2 結果表の要旨
要旨表は、次のように作成します。
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;
5.4 ドキュメントの表示方法およびハイライト表示
通常、問合せアプリケーションでは、問合せから戻されるドキュメントを表示できます。ユーザーがヒットリストからドキュメントを選択すると、アプリケーションはドキュメントを特定の形式で表示します。
Oracle Textでは、様々な方法でドキュメントを表示できます。たとえば、問合せ語句をハイライト表示してドキュメントを表示できます。ハイライト表示できる問合せ語句は、ワード問合せのワードまたは英語でのABOUT
問合せのテーマのいずれかです。
また、PL/SQLパッケージCTX_DOC
を使用して、ドキュメントから要旨(ドキュメントのサマリー)とテーマ情報を取得することもできます。
表5-2は、取得可能な出力と、各出力を取得するためのプロシージャを示しています。
表5-2 CTX_DOCの出力
出力 | プロシージャ |
---|---|
プレーン・テキスト形式、ハイライト表示なし |
|
HTML形式のドキュメント、ハイライト表示なし |
|
ハイライト表示されたドキュメント、プレーン・テキスト形式 |
|
ハイライト表示されたドキュメント、HTML形式 |
|
プレーン・テキスト形式のハイライト・オフセット情報 |
|
HTML形式のハイライト・オフセット情報 |
|
ドキュメントのテーマ・サマリーと要旨 |
|
ドキュメントのテーマ・リスト |
|
関連項目:
図5-1に、次の項でハイライト表示、要旨作成およびテーマ抽出の対象とする元のドキュメントを示します。
5.4.1 ハイライト表示の例
図5-2は、図5-1のドキュメント内の問合せ語句petをハイライト表示した、問合せアプリケーションの画面です。この出力は、「CONTEXT問合せアプリケーション」で説明するテキスト問合せアプリケーションを使用して作成されました。
5.4.2 ドキュメントのテーマ・リストの例
図5-3は、図5-1に示したドキュメントのテーマ・リストを表示している問合せアプリケーションの画面です。この出力は、「CONTEXT問合せアプリケーション」で説明するテキスト問合せアプリケーションを使用して作成されました。
5.4.3 要旨の例
図5-4は、図5-1に示したドキュメントの要旨を表示している問合せアプリケーションの画面です。この出力は、「CONTEXT問合せアプリケーション」で説明する生成されたテキスト問合せアプリケーションを使用して作成されました。