この章では、ドキュメントの表示方法を説明します。次の項目について説明します。
Oracle Textの問合せアプリケーションでは、テキスト問合せの場合は問合せ語句をハイライト表示し、ABOUT
問合せの場合はテーマをハイライト表示して、選択したドキュメントを表示できます。
ハイライト表示に関連する出力では、次の3タイプの出力を生成できます。
マークアップ形式のドキュメント
ドキュメントの問合せオフセット情報
ドキュメントのコンコーダンス(問合せ語句の出現箇所が前後のテキストとともに戻されます)
テキストのハイライト表示の場合は、問合せを発行すると、その問合せを満たすドキュメント内のワードがハイライト表示されます。プレーン・テキストまたはHTMLもハイライト表示できます。
ABOUT
問合せの場合、CTX_DOC
パッケージのプロシージャによって、ABOUT
問合せを最も適切に表しているワードまたは句がハイライト表示またはマークアップされます。
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
バージョンに索引は不要です。
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ナビゲーションのマークアップ順序をカスタマイズできます。
次の例は、付録A「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リファレンス』を参照してください。 |
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リファレンス』を参照してください。 |
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.SNIPPET およびCTX_DOC.POLICY_SNIPPET の詳細は、『Oracle Textリファレンス』を参照してください。 |
次の表では、テーマのリスト、要旨およびテーマ・サマリーについて説明します。
表5-1 テーマのリスト、要旨およびテーマ・サマリー
出力タイプ | 説明 |
---|---|
ドキュメントの主要概念のリスト。 リストの各テーマが単一のワードまたは句である場合、あるいはリストの各テーマが親テーマの階層リストである場合は、テーマのリストを生成できます。 |
|
ドキュメントの概要を最も適切に表すドキュメント内のテキスト。 |
|
ドキュメントの特定のテーマを最も適切に表すドキュメント内のテキスト。 |
この出力を取得するには、提供されているCTX_DOC
パッケージのプロシージャを使用します。このパッケージを使用すると、次の操作を実行できます。
主キーに加えてROWID
でもドキュメントを識別します。
パフォーマンス向上のため、結果をメモリー内に格納します。
テーマのリストは、ドキュメントの主要概念のリストです。テーマのリストを生成するには、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;
要旨は、ドキュメントの概要を最も適切に表すドキュメント内のテキストです。テーマ・サマリーは、ドキュメントの単一テーマを最も適切に表すドキュメント内のテキストです。
要旨およびテーマ・サマリーを生成するには、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;
通常、問合せアプリケーションでは、問合せから戻されるドキュメントを表示できます。ユーザーがヒットリストからドキュメントを選択すると、アプリケーションはドキュメントを特定の形式で表示します。
Oracle Textでは、様々な方法でドキュメントを表示できます。たとえば、問合せ語句をハイライト表示してドキュメントを表示できます。ハイライト表示できる問合せ語句は、ワード問合せのワードまたは英語でのABOUT
問合せのテーマのいずれかです。
また、PL/SQLパッケージCTX_DOC
を使用して、ドキュメントから要旨(ドキュメントのサマリー)とテーマ情報を取得することもできます。
表5-2は、取得可能な出力と、各出力を取得するためのプロシージャを示しています。
表5-2 CTX_DOCの出力
出力 | プロシージャ |
---|---|
プレーン・テキスト形式、ハイライト表示なし |
|
HTML形式のドキュメント、ハイライト表示なし |
|
ハイライト表示されたドキュメント、プレーン・テキスト形式 |
|
ハイライト表示されたドキュメント、HTML形式 |
|
プレーン・テキスト形式のハイライト・オフセット情報 |
|
HTML形式のハイライト・オフセット情報 |
|
ドキュメントのテーマ・サマリーと要旨 |
|
ドキュメントのテーマ・リスト |
|
関連項目: 『Oracle Textリファレンス』 |
図5-1に、次の項でハイライト表示、要旨作成およびテーマ抽出の対象とする元のドキュメントを示します。
図5-2は、図5-1のドキュメント内の問合せ語句petをハイライト表示した、問合せアプリケーションの画面です。この出力は、付録A「CONTEXT問合せアプリケーション」で説明するウィザードによって作成されたテキスト問合せアプリケーションを使用して作成されました。
図5-3は、図5-1に示したドキュメントのテーマ・リストを表示している問合せアプリケーションの画面です。この出力は、付録A「CONTEXT問合せアプリケーション」で説明するウィザードによって作成されたテキスト問合せアプリケーションを使用して作成されました。
図5-4は、図5-1に示したドキュメントの要旨を表示している問合せアプリケーションの画面です。この出力は、付録A「CONTEXT問合せアプリケーション」で説明するウィザードによって作成されたテキスト問合せアプリケーションを使用して作成されました。