8 Oracle Textでのドキュメントの表示方法
Oracle Textには、問合せアプリケーションの結果でドキュメントを表す様々な方法が用意されています。
この章のトピックは、次のとおりです:
8.1 問合せ語句のハイライト表示
テキスト問合せアプリケーションでは、テキスト問合せの場合は問合せ語句をハイライト表示し、ABOUT
問合せの場合はテーマをハイライト表示して、選択したドキュメントを表示できます。
ハイライト表示に関連する出力では、次の3タイプの出力を生成できます。
-
マークアップ形式のドキュメント
-
ドキュメントの問合せオフセット情報
-
ドキュメントのコンコーダンス(問合せ語句の出現箇所が前後のテキストとともに戻されます)
この項では、次の項目について説明します。
8.1.1 テキストのハイライト表示
テキストのハイライト表示の場合は、問合せを発行すると、その問合せを満たすドキュメント内のワードがハイライト表示されます。プレーン・テキストまたはHTMLもハイライト表示できます。
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
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
から取得した標準のプレーン・テキスト・マークアップのかわりに、(フォント・タイプや色を変えるなどして)ハイライト表示したバージョンのドキュメントを表示できます。
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
ではすべてのセグメントの合計の長さの上限を設定します。
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
プロシージャを使用します。
次のインメモリー・テーマの例では、ドキュメント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
プロシージャを使用します。プロシージャのコール時に、要旨またはテーマ・サマリーのサイズを指定できます。
インメモリー要旨の例
次の例では、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の出力
出力 | プロシージャ |
---|---|
プレーン・テキスト形式、ハイライト表示なし |
|
HTML形式のドキュメント、ハイライト表示なし |
|
ハイライト表示されたドキュメント、プレーン・テキスト形式 |
|
ハイライト表示されたドキュメント、HTML形式 |
|
プレーン・テキスト形式のハイライト表示オフセット情報 |
|
HTML形式のハイライト表示オフセット情報 |
|
ドキュメントのテーマ・サマリーと要旨 |
|
ドキュメントのテーマ・リスト |
|
関連項目: