9 CTX_DOCパッケージ
CTX_DOC
PL/SQLパッケージには、抽出したテキストのハイライトまたはドキュメントのテーマ・リストの生成など、ドキュメント・サービスを要求するためのプロシージャとファンクションが用意されています。
CTX_DOC
パッケージには、次のプロシージャおよびファンクションが含まれています。
名前 | 説明 |
---|---|
プレーン・テキストまたはHTML形式のドキュメントを生成します。 |
|
ドキュメントの要点またはテーマ・サマリーを生成します。 |
|
ドキュメントのオフセット情報をハイライト表示するプレーン・テキストまたはHTML形式を生成します。 |
|
プレーン・テキスト形式のバイナリ・データを生成します。 |
|
問合せ語句がハイライト表示されているドキュメントのプレーン・テキストまたはHTML形式を生成します。 |
|
他の |
|
プレーン・テキストまたはHTML形式のドキュメントを、索引なしで生成します。 |
|
ドキュメントの要点またはテーマ・サマリーを、索引なしで生成します。 |
|
プレーン・テキストまたはHTML形式のドキュメントをハイライト表示するオフセット情報を、索引なしで生成します。 |
|
テキストのセクションについて言語をフェッチします。 |
|
プレーン・テキストまたはHTML形式のドキュメントを、索引なしで問合せ語句をハイライト表示して生成します。 |
|
ドキュメントの名詞句を抽出します。 |
|
ドキュメント内の各単語の品詞を抽出します。 |
|
ドキュメントの用語索引を、問合せ語句に基づいて索引なしで生成します。 |
|
テキスト本文にある各単語の語幹を抽出します。 |
|
ドキュメントのテーマのリストを、索引なしで生成します。 |
|
ドキュメントのすべての索引トークンを、索引なしで生成します。 |
|
単一のセンチメント分析を実行し、ドキュメント内の各セグメントに個別のセンチメント・スコアを提供します。 |
|
単一のセンチメント分析を実行し、ドキュメント全体に集計センチメント・スコアを提供します。 |
|
|
|
ドキュメントの用語索引を問合せ語句に基づいて生成します。 |
|
ドキュメントのテーマのリストを生成します。 |
|
ドキュメントのすべての索引トークンを生成します。 |
正引き索引の機能を使用して、プロシージャSNIPPET、HIGHLIGHTおよびMARKUPのパフォーマンスを向上できます。プロシージャFILTER、GIST、THEMESTOKENSのパフォーマンスは、Oracle Textのコピーの保存機能を使用して向上できます。
関連項目:
正引き索引およびコピーの保存機能の詳細は、『Oracle Textアプリケーション開発者ガイド』を参照してください。
9.1 CTX_DOCパッケージのプロシージャについて
CTX_DOC
PL/SQLパッケージ・プロシージャの多くには2つの種類があります。索引を使用するプロシージャと、索引を使用しないプロシージャです。索引を使用しないプロシージャは、ポリシーベースのプロシージャと呼ばれます。これらのプロシージャは、CONTEXT索引を事前作成せずに単一のドキュメント上でドキュメント・サービスを使用する場合があるために、提供されています。ポリシーベースのプロシージャを使用することで、このような処理を実行できます。
policy_*プロシージャは従来のインメモリー・ドキュメント・サービスをミラー化し、index_nameをpolicy_nameに、textkeyをドキュメントのデータ型であるVARCHAR2
、CLOB
、BLOB
またはBFILE
に置き換えて使用されます。このため、これらのプロシージャを使用してドキュメント・サービス出力を取得するために索引を作成する必要はありません。
文字オフセットおよび長さを生成するプロシージャ(HIGHLIGHT
、TOKENS
など)について、Oracle TextはUSC-2コードポイント・セマンティクスに準拠します。
注意:
CTX_DOC
パッケージのAPIは、スキーマまたは所有者名を接頭辞として使用する識別子をサポートしていません。
9.2 FILTER
CTX_DOC.FILTER
プロシージャを使用して、プレーン・テキストまたはHTML形式のいずれかのドキュメントを生成します。表示されたドキュメントは、結果表またはメモリーのいずれかに格納できます。このプロシージャは、通常、問合せの後でフィルタ処理するドキュメントを決定してから使用します。
注意:
生成されたHTML形式のドキュメントには、図形は含まれていません。
構文1: インメモリーの結果記憶域
exec CTX_DOC.FILTER( index_name IN VARCHAR2, textkey IN VARCHAR2, restab IN OUT NOCOPY CLOB, plaintext IN BOOLEAN DEFAULT FALSE, use_saved_copy IN NUMBER DEFAULT CTX_DOC.SAVE_COPY_FALLBACK); exec CTX_DOC.HIGHLIGHT_CLOB_QUERY( index_name IN VARCHAR2, textkey IN VARCHAR2, text_query IN CLOB, restab IN OUT NOCOPY HIGHLIGHT_TAB, plaintext IN BOOLEAN DEFAULT FALSE, use_saved_copy IN NUMBER DEFAULT CTX_DOC.SAVE_COPY_FALLBACK);
構文2: 結果表記憶域
exec CTX_DOC.FILTER( index_name IN VARCHAR2, textkey IN VARCHAR2, restab IN VARCHAR2, query_id IN NUMBER DEFAULT 0, plaintext IN BOOLEAN DEFAULT FALSE, use_saved_copy IN NUMBER DEFAULT CTX_DOC.SAVE_COPY_FALLBACK); exec CTX_DOC.HIGHLIGHT_CLOB_QUERY( index_name IN VARCHAR2, textkey IN VARCHAR2, text_query IN CLOB, restab IN VARCHAR2, query_id IN NUMBER DEFAULT 0, plaintext IN BOOLEAN DEFAULT FALSE, use_saved_copy IN NUMBER DEFAULT CTX_DOC.SAVE_COPY_FALLBACK);
- index_name
-
textkeyで識別されるドキュメントを含むテキスト列に関連する索引の名前を指定します。
- textkey
-
一意のドキュメントのID(通常は主キー)を指定します。
textkeyパラメータは、次のいずれかです。
-
単一列の主キーの値。
-
コンポジット(複数列)主キーのコード化された仕様。CTX_DOC.PKENCODE を使用します
-
ドキュメントを含む行のROWID。
主キーとROWIDの識別を切り替えるには、CTX_DOC.SET_KEY_TYPEを使用します。
関連項目:
フィルタ結果表の構造の詳細は、「Oracle Text結果表」の「フィルタ表」を参照してください。
結果をメモリーに格納するには、CLOB
ロケータの名前を指定します。restabがNULL
の場合は、一時CLOB
が割り当てられて戻ります。使用後は、DBMS_LOB.FREETEMPORARY()
でロケータの割当てを解除する必要があります。
restabがNULL
でない場合は、操作の前にCLOB
が切り捨てられます。
- query_id
-
restabに挿入した行の識別に使用する識別子を指定します。
query_idが指定されていないか、または
NULL
に設定されている場合、デフォルトは0(ゼロ)です。restabに指定されている表を手動で切り捨てる必要があります。 - plaintext
-
プレーン・テキスト形式のドキュメントを生成するには、
TRUE
を指定します。AUTO_FILTER
フィルタを使用している場合またはHTMLドキュメントを索引付けしている場合は、FALSE
を指定してHTML形式のドキュメントを生成します。 - use_saved_copy
-
$D表を参照してドキュメントのコピーをフェッチするかどうかと、$D表でドキュメントのコピーが取得できないときにどんなアクションを実行するかを指定します。
use_saved_copy
パラメータに指定できる値は、次のいずれかです。
-
CTX_DOC.SAVE_COPY_FALLBACK:
$D表からドキュメントのコピーをフェッチします。ドキュメントのコピーが$D表に存在しない場合は、データストアからドキュメントをフェッチします。 -
CTX_DOC.SAVE_COPY_ERROR:
$D表からドキュメントのコピーをフェッチします。ドキュメントのコピーが$D表に存在しない場合は、エラー・メッセージを表示します。$D表でドキュメントのコピーが取得できないときに特定のフォールバック・ロジックを実装する場合には、この値を指定してください。 -
CTX_DOC.SAVE_COPY_IGNORE:
ドキュメントを常にデータストアからフェッチします。
デフォルト値は、CTX_DOC.SAVE_COPY_FALLBACK
です。
例
次のコードは、ドキュメントをメモリー内のHTMLにフィルタ処理する方法を示しています。
declare mklob clob; amt number := 40; line varchar2(80); begin ctx_doc.filter('myindex','1', mklob, FALSE); -- mklob is NULL when passed-in, so ctx-doc.filter will allocate a temporary -- CLOB for us and place the results there. dbms_lob.read(mklob, amt, 1, line); dbms_output.put_line('FIRST 40 CHARS ARE:'||line); -- have to de-allocate the temp lob dbms_lob.freetemporary(mklob); end;
フィルタ処理されたドキュメントを格納するために、次のようにフィルタ結果表を作成します。
create table filtertab (query_id number, document clob);
テキストキー20でプレーン・テキスト形式のドキュメントを取得するには、次の文を入力します。
begin ctx_doc.filter('newsindex', '20', 'filtertab', '0', TRUE); end;
9.3 GIST
ドキュメントの要点およびテーマ・サマリーを生成するには、CTX_DOC.GIST
プロシージャを使用します。段落レベルまたは文レベルの要点またはテーマ・サマリーを生成できます。
構文1: インメモリー記憶域
CTX_DOC.GIST(
index_name IN VARCHAR2, textkey IN VARCHAR2, restab IN OUT CLOB, glevel IN VARCHAR2 DEFAULT 'P', pov IN VARCHAR2 DEFAULT 'GENERIC', numParagraphs IN NUMBER DEFAULT 16, maxPercent IN NUMBER DEFAULT 10, num_themes IN NUMBER DEFAULT 50, use_saved_copy IN NUMBER DEFAULT CTX_DOC.SAVE_COPY_FALLBACK);
構文2: 結果表記憶域
CTX_DOC.GIST(
index_name IN VARCHAR2, textkey IN VARCHAR2, restab IN VARCHAR2, query_id IN NUMBER DEFAULT 0, glevel IN VARCHAR2 DEFAULT 'P', pov IN VARCHAR2 DEFAULT NULL, numParagraphs IN NUMBER DEFAULT 16, maxPercent IN NUMBER DEFAULT 10, num_themes IN NUMBER DEFAULT 50, use_saved_copy IN NUMBER DEFAULT CTX_DOC.SAVE_COPY_FALLBACK);
- index_name
-
textkeyで識別されるドキュメントを含むテキスト列に関連する索引の名前を指定します。
- textkey
-
一意のドキュメントのID(通常は主キー)を指定します。
textkeyパラメータは、次のいずれかです。
-
単一列の主キーの値。
-
コンポジット(複数列)主キーのコード化された仕様。コンポジット・テキストキーをコード化するには、
CTX_DOC.PKENCODE
プロシージャを使用します。 -
ドキュメントを含む行のROWID。
主キーとROWIDの識別を切り替えるには、CTX_DOC.SET_KEY_TYPE
を使用します。
結果をメモリーに格納するには、CLOB
ロケータの名前を指定します。restabがNULL
の場合は、一時CLOB
が割り当てられて戻ります。使用後は、ロケータの割当てを解除する必要があります。
restab
がNULL
でない場合は、操作の前にCLOB
が切り捨てられます。
-
段落の場合はP
-
文の場合はS
デフォルトはPです。
- pov
-
要点または単一のテーマ・サマリーを生成するかどうかを指定します。生成される要点またはテーマ・サマリーのタイプ(文レベルまたは段落レベル)は、
glevel
に指定した値によって決まります。ドキュメント全体の要点を生成するには、
pov
に値GENERIC
を指定します。ドキュメントの単一のテーマに対するテーマ・サマリーを生成するには、そのテーマをpov
の値として指定します。結果表記憶域を使用しているときに、
pov
の値を指定しない場合、このプロシージャはドキュメントに対して、全体の要点に加えて最大50個までのテーマ・サマリーを戻します。インメモリーの結果記憶域を
CLOB
に対して使用する場合は、pov
を指定する必要があります。ただし、pov
を指定しない場合、このプロシージャはドキュメントの全体の要点のみを生成します。注意:
pov
パラメータでは、大/小文字が区別されます。ドキュメントの要点を戻すには、すべて大文字で「GENERIC
」を指定します。テーマ・サマリーを戻すには、ドキュメントに対して生成されたとおりのテーマを正確に指定します。ドキュメントに対してTHEMESで生成されたテーマのみを、
pov
の入力として使用できます。 - numParagraphs
-
ドキュメントの要点またはテーマ・サマリーに対して選択されたドキュメントの段落(または文)の最大数を指定します。デフォルトは16です。
注意:
numParagraphs
パラメータが使用されるのは、このパラメータによって生成される要点またはテーマ・サマリーのサイズが、maxPercent
パラメータによって生成される要点またはテーマ・サマリーのサイズよりも小さいときのみです。つまり、システムは、常に最小サイズの要点またはテーマ・サマリーを戻します。
- maxPercent
-
ドキュメントの要点またはテーマ・サマリーに対して選択されたドキュメントの段落(または文)の最大数を、ドキュメントの合計段落数(または合計文数)に対する割合で指定します。デフォルトは10です。
注意:
numParagraphs
パラメータが使用されるのは、このパラメータによって生成される要点またはテーマ・サマリーのサイズが、maxPercent
パラメータによって生成される要点またはテーマ・サマリーのサイズよりも小さいときのみです。つまり、システムは、常に最小サイズの要点またはテーマ・サマリーを戻します。
- num_themes
-
pov
の値を指定しない場合は、生成するテーマ・サマリーの数を指定します。たとえば、10を指定すると、トップ10のテーマ・サマリーが戻ります。デフォルトは50です。0(ゼロ)またはNULLを指定すると、ドキュメント内の全テーマが戻ります。51以上のテーマがドキュメントに格納されている場合、概念階層が表示されるのは、トップ50のテーマのみです。
- use_saved_copy
-
$D表を参照してドキュメントのコピーをフェッチするかどうかと、$D表でドキュメントのコピーが取得できないときにどんなアクションを実行するかを指定します。
use_saved_copy
パラメータに指定できる値は、次のいずれかです。
-
CTX_DOC.SAVE_COPY_FALLBACK:
$D表からドキュメントのコピーをフェッチします。ドキュメントのコピーが$D表に存在しない場合は、データストアからドキュメントをフェッチします。 -
CTX_DOC.SAVE_COPY_ERROR:
$D表からドキュメントのコピーをフェッチします。ドキュメントのコピーが$D表に存在しない場合は、エラー・メッセージを表示します。$D表でドキュメントのコピーが取得できないときに特定のフォールバック・ロジックを実装する場合には、この値を指定してください。 -
CTX_DOC.SAVE_COPY_IGNORE:
ドキュメントを常にデータストアからフェッチします。
デフォルト値は、CTX_DOC.SAVE_COPY_FALLBACK
です。
例
インメモリー要点
次の例では、10個以内の段落のデフォルト・サイズでない全体の要点表を生成します。結果はCLOB
ロケータの中のメモリーに格納されます。使用後、コードは戻されたCLOB
ロケータの割当てを解除します。
set serveroutput on; declare gklob clob; amt number := 40; line varchar2(80); begin ctx_doc.gist('newsindex','34',gklob, 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;
結果表の要点
次の例では、要点表CTX_GIST
を作成します。
create table CTX_GIST (query_id number, pov varchar2(80), gist CLOB);
次の例では、ドキュメント34に対するデフォルト・サイズの段落レベルの要点と、ドキュメント内の全テーマに対するトップ10のテーマ・サマリーを戻します。
begin
ctx_doc.gist('newsindex','34','CTX_GIST', 1, num_themes=>10);
end;
次の例では、10個以内の段落のデフォルト・サイズでない要点表を生成します。
begin ctx_doc.gist('newsindex','34','CTX_GIST',1,pov =>'GENERIC',numParagraphs=>10); end;
次の例では、段落数がドキュメントの合計段落数の10パーセント以下である要点表を生成します。
begin ctx_doc.gist('newsindex','34','CTX_GIST',1,pov => 'GENERIC', maxPercent => 10); end;
テーマ・サマリー
次の例では、ドキュメント34のinsectsに対する段落レベルのテーマ・サマリーを戻します。デフォルト・サイズのテーマ・サマリーが戻されます。
begin ctx_doc.gist('newsindex','34','CTX_GIST',1, pov => 'insects'); end;
9.4 HIGHLIGHT
CTX_DOC.HIGHLIGHT
プロシージャを使用して、ドキュメントのハイライト・オフセットを生成します。オフセット情報は、指定する問合せを満たすドキュメント内の語句に対して生成されます。これらのハイライト表示される語句は、ワード問合せを満たすワードまたはABOUT
問合せを満たすテーマのいずれかです。
プレーン・テキスト形式またはHTML形式のいずれかのドキュメントに対して、ハイライト・オフセットを生成できます。CTX_DOC.HIGHLIGHT
が戻す表には、元のドキュメントにあった図形は含まれていません。オフセット情報は、CTX_DOC.FILTER でフィルタ処理された同じドキュメントに適用します。
このプロシージャは、通常、問合せの後で処理するドキュメントを決めてから使用します。ハイライト・オフセットは、インメモリーPL/SQL表または結果表のいずれかに格納できます。
問合せ時に主にドキュメントのフィルタ処理に使用される述語が含まれる問合せの場合、ハイライト中に述語は無視されることに注意してください。これはSNIPPET
、MARKUP
およびHIGHLIGHT
プロシージャに適用されます。次の述語は、この目的でフィルタ述語として扱われ、XML属性内を検索します。SDATA
、HASPATH
およびWITHIN
/INPATH
。
索引が不要なこのプロシージャの形式は、「CTX_DOC.POLICY_HIGHLIGHT」を参照してください。
Oracle Textの正引き索引の機能を使用して、プロシージャSNIPPET、HIGHLIGHT
およびMARKUP のパフォーマンスを向上できます。
関連項目:
正引き索引の詳細は、『Oracle Textアプリケーション開発者ガイド』を参照してください。
構文1: インメモリーの結果記憶域
exec CTX_DOC.HIGHLIGHT( index_name IN VARCHAR2, textkey IN VARCHAR2, text_query IN VARCHAR2, restab IN OUT NOCOPY HIGHLIGHT_TAB, plaintext IN BOOLEAN DEFAULT FALSE, use_saved_copy IN NUMBER DEFAULT CTX_DOC.SAVE_COPY_FALLBACK); exec CTX_DOC.HIGHLIGHT_CLOB_QUERY( index_name IN VARCHAR2, textkey IN VARCHAR2, text_query IN CLOB, restab IN OUT NOCOPY HIGHLIGHT_TAB, plaintext IN BOOLEAN DEFAULT FALSE, use_saved_copy IN NUMBER DEFAULT CTX_DOC.SAVE_COPY_FALLBACK);
構文2: 結果表記憶域
exec CTX_DOC.HIGHLIGHT( index_name IN VARCHAR2, textkey IN VARCHAR2, text_query IN VARCHAR2, restab IN VARCHAR2, query_id IN NUMBER DEFAULT 0, plaintext IN BOOLEAN DEFAULT FALSE, use_saved_copy IN NUMBER DEFAULT CTX_DOC.SAVE_COPY_FALLBACK); exec CTX_DOC.HIGHLIGHT_CLOB_QUERY( index_name IN VARCHAR2, textkey IN VARCHAR2, text_query IN CLOB, restab IN VARCHAR2, query_id IN NUMBER DEFAULT 0, plaintext IN BOOLEAN DEFAULT FALSE, use_saved_copy IN NUMBER DEFAULT CTX_DOC.SAVE_COPY_FALLBACK);
- index_name
-
textkeyで識別されるドキュメントを含むテキスト列に関連する索引の名前を指定します。
- textkey
-
一意のドキュメントのID(通常は主キー)を指定します。
textkeyパラメータは、次のいずれかです。
-
単一列の主キーの値。
-
コンポジット(複数列)主キーのコード化された仕様。CTX_DOC.PKENCODEプロシージャを使用します。
-
ドキュメントを含む行のROWID。
主キーとROWIDの識別を切り替えるには、CTX_DOC.SET_KEY_TYPEを使用します。
- text_query
-
ドキュメントを取り出すために使用された元の問合せ式を指定します。NULLの場合、ハイライトは生成されません。
text_query
にワイルド・カード、ステミング、ファジー・マッチングが指定されていて、結果としてストップワードが戻る場合、HIGHLIGHT
はストップワードをハイライト表示しません。text_query
にTHRESHOLD演算子がある場合、その演算子は無視されます。HIGHLIGHT
プロシージャは、常に結果セット全体に対するハイライト情報を戻します。 - restab
-
このプロシージャが、ハイライト・オフセットを表またはインメモリーPL/SQL表のいずれかに格納することを指定できます。
結果を表に格納するには、表の名前を指定します。このプロシージャのコール前に、表が存在している必要があります。
関連項目:
ハイライト結果表の構造の詳細は、「Oracle Text結果表」の「ハイライト表」を参照してください。
結果をインメモリー表に格納するには、
CTX_DOC.HIGHLIGHT_TAB
型のインメモリー表の名前を指定します。HIGHLIGHT_TAB
データ型は、次のように定義されます。type highlight_rec is record ( offset number, length number ); type highlight_tab is table of highlight_rec index by binary_integer;
CTX_DOC.HIGHLIGHT
は、操作の前にHIGHLIGHT_TAB
をクリアします。 - query_id
-
restabに挿入した行の識別に使用する識別子を指定します。query_idが指定されていないか、または
NULL
に設定されている場合、デフォルトは0(ゼロ)です。restabに指定されている表を手動で切り捨てる必要があります。 - plaintext
-
プレーン・テキスト・オフセットのドキュメントを生成するには、
TRUE
を指定します。AUTO_FILTER
フィルタを使用している場合またはHTMLドキュメントを索引付けしている場合は、FALSE
を指定してドキュメントのHTMLオフセットを生成します。 - use_saved_copy
-
$D表を参照してドキュメントのコピーをフェッチするかどうかと、$D表でドキュメントのコピーが取得できないときにどんなアクションを実行するかを指定します。デフォルト値は、
CTX_DOC.SAVE_COPY_FALLBACK
です。use_saved_copy
パラメータに指定できる値は、次のいずれかです。
-
CTX_DOC.SAVE_COPY_FALLBACK:
$D表からドキュメントのコピーをフェッチします。ドキュメントのコピーが$D表に存在しない場合は、データストアからドキュメントをフェッチします。 -
CTX_DOC.SAVE_COPY_ERROR:
$D表からドキュメントのコピーをフェッチします。ドキュメントのコピーが$D表に存在しない場合は、エラー・メッセージを表示します。$D表でドキュメントのコピーが取得できないときに特定のフォールバック・ロジックを実装する場合には、この値を指定してください。 -
CTX_DOC.SAVE_COPY_IGNORE:
ドキュメントを常にデータストアからフェッチします。
例
ハイライト・オフセット情報を格納するために、ハイライト表を作成します。
create table hightab(query_id number, offset number, length number);
次のような問合せでハイライトを実行すると、キーワード(この例では「dog」)のみハイライトされます。AND
演算子の後のフィルタ述語は無視されます。
begin ctx_doc.highlight('newsindex', '20', 'dog AND cat WITHIN titlesection@name', 'hightab', 0, FALSE); end; begin ctx_doc.highlight('newsindex', '20', 'dog AND SDATA(price > 100)', 'hightab', 0, FALSE); end;
ワード・ハイライト・オフセット
ドキュメント20のdogという語句に対するHTMLハイライト・オフセット情報を取得するには、次の問合せを発行します。
begin ctx_doc.highlight('newsindex', '20', 'dog', 'hightab', 0, FALSE); end; begin ctx_doc.highlight('newsindex', '20', 'dog AND cat WITHIN titlesection', 'hightab', 0, FALSE); end;
索引newsindexにテーマ・コンポーネントがある場合は、次の問合せを発行することによって、politicsというテーマ問合せに関するHTMLハイライト・オフセット情報を取得します。
begin ctx_doc.highlight('newsindex', '20', 'about(politics)', 'hightab', 0, FALSE); end;
この文に対する出力は、ドキュメントのpoliticsのテーマを表すハイライト表示されたワードおよび句に対するオフセットです。
制限事項
CTX_DOC.HIGHLIGHT
では、問合せテンプレートの使用やXML属性値のハイライト表示はサポートされていません。
9.5 IFILTER
バイナリ・データをテキストにフィルタ処理します。
このプロシージャは、バイナリ・データ(BLOB IN
)を取り出し、そのデータをAUTO_FILTER
フィルタでフィルタ処理し、そのテキスト形式データをCLOB
に書き込みます。(元のドキュメント内の図形はすべて無視されます。)CTX_DOC.IFILTER
ではセーフ・コールアウトを使用しており、索引は不要です。CTX_DOC.FILTER
の場合は、索引が必要です。
注意:
このプロシージャは、将来のリリースではサポートされません。かわりに、CTX_DOC.POLICY_FILTERを使用する必要があります。
要件
CTX_DOC.IFILTER
では、セーフ・コールアウト・メカニズムを使用しているため、extproc
エージェントの起動には、SQL*Netリスナーの実行と構成が必要です。
構文
CTX_DOC.IFILTER(data IN BLOB, text IN OUT NOCOPY CLOB);
例
MATCHES
問合せでは、VARCHAR2
またはCLOB
のドキュメント・テキストを使用できます。BLOB
入力は使用できないため、フィルタ処理済のドキュメントに直接一致させることはできません。かわりに、AUTO_FILTER
フィルタを使用してバイナリ・コンテンツをCLOB
にフィルタ処理する必要があります。次の例は、ドキュメント・データがバインド変数:doc_blob
内にあることを前提としています。
declare doc_text clob; begin -- create a temporary CLOB to hold the document text dbms_lob.createtemporary(doc_text, TRUE, DBMS_LOB.SESSION); -- call ctx_doc.ifilter to filter the BLOB to CLOB data ctx_doc.ifilter(:doc_blob, doc_text); -- now do the matches query using the CLOB version for c1 in (select * from queries where matches(query_string, doc_text)>0) loop -- do what you need to do here end loop; dbms_lob.freetemporary(doc_text); end;
9.6 MARKUP
CTX_DOC.MARKUP
プロシージャは、問合せ指定およびドキュメントのテキストキーを取り出し、問合せ語句がマークアップされた形式のドキュメントを戻します。これらのマークアップされた語句は、ワード問合せを満たすワードまたはABOUT
問合せを満たすテーマのいずれかです。
マークアップされた出力は、プレーン・テキストまたはHTMLのいずれかに設定できます。CTX_DOC.MARKUP
が戻すマークアップ・ドキュメントには、元のドキュメントにあった図形は含まれていません。
ハイライト表示された語句をマークするには、事前定義済のタグセットの1つ(HTMLナビゲーションを可能にするタグ順序を含む)を使用できます。
CTX_DOC.MARKUP
は、通常、問合せの後で処理するドキュメントを決めてから使用します。
マークアップされたドキュメントは、メモリーまたは結果表のいずれかに格納できます。
問合せ時に主にドキュメントのフィルタ処理に使用される述語が含まれる問合せの場合、MARKUP
中に述語は無視されることに注意してください。次の述語は、この目的でフィルタ述語として扱われ、XML属性内を検索します。SDATA
、HASPATH
およびWITHIN
/INPATH
。
索引が不要なこのプロシージャの形式は、「CTX_DOC.POLICY_MARKUP」を参照してください。
Oracle Textの正引き索引の機能を使用して、プロシージャSNIPPET、HIGHLIGHTおよびMARKUP
のパフォーマンスを向上できます。
関連項目:
正引き索引の詳細は、『Oracle Textアプリケーション開発者ガイド』を参照してください。
注意:
Oracle TextによってCTX.DOC.MARKUP
から戻される出力は、常に整形式であるとはかぎりません。特に、すでにHTMLまたはXMLを使用してマークアップされている語句については保証できません。特に、マークアップ・タグに予期しないネストが存在する場合、このようになることがあります。
構文1: インメモリーの結果記憶域
exec CTX_DOC.MARKUP(
index_name IN VARCHAR2, textkey IN VARCHAR2, text_query IN VARCHAR2, restab IN OUT NOCOPY CLOB, plaintext IN BOOLEAN DEFAULT FALSE, tagset IN VARCHAR2 DEFAULT 'TEXT_DEFAULT', starttag IN VARCHAR2 DEFAULT NULL, endtag IN VARCHAR2 DEFAULT NULL, prevtag IN VARCHAR2 DEFAULT NULL, nexttag IN VARCHAR2 DEFAULT NULL, use_saved_copy IN NUMBER DEFAULT CTX_DOC.SAVE_COPY_FALLBACK); exec CTX_DOC.MARKUP_CLOB_QUERY( index_name IN VARCHAR2, textkey IN VARCHAR2, text_query IN CLOB, restab IN OUT NOCOPY CLOB, plaintext IN BOOLEAN DEFAULT FALSE, tagset IN VARCHAR2 DEFAULT 'TEXT_DEFAULT', starttag IN VARCHAR2 DEFAULT NULL, endtag IN VARCHAR2 DEFAULT NULL, prevtag IN VARCHAR2 DEFAULT NULL, nexttag IN VARCHAR2 DEFAULT NULL, use_saved_copy IN NUMBER DEFAULT CTX_DOC.SAVE_COPY_FALLBACK);
構文2: 結果表記憶域
exec CTX_DOC.MARKUP(
index_name IN VARCHAR2, textkey IN VARCHAR2, text_query IN VARCHAR2, restab IN VARCHAR2, query_id IN NUMBER DEFAULT 0, plaintext IN BOOLEAN DEFAULT FALSE, tagset IN VARCHAR2 DEFAULT 'TEXT_DEFAULT', starttag IN VARCHAR2 DEFAULT NULL, endtag IN VARCHAR2 DEFAULT NULL, prevtag IN VARCHAR2 DEFAULT NULL, nexttag IN VARCHAR2 DEFAULT NULL, use_saved_copy IN NUMBER DEFAULT CTX_DOC.SAVE_COPY_FALLBACK); exec CTX_DOC.MARKUP_CLOB_QUERY( index_name IN VARCHAR2, textkey IN CLOB, text_query IN VARCHAR2, restab IN VARCHAR2, query_id IN NUMBER DEFAULT 0, plaintext IN BOOLEAN DEFAULT FALSE, tagset IN VARCHAR2 DEFAULT 'TEXT_DEFAULT', starttag IN VARCHAR2 DEFAULT NULL, endtag IN VARCHAR2 DEFAULT NULL, prevtag IN VARCHAR2 DEFAULT NULL, nexttag IN VARCHAR2 DEFAULT NULL, use_saved_copy IN NUMBER DEFAULT CTX_DOC.SAVE_COPY_FALLBACK);
- index_name
-
textkeyで識別されるドキュメントを含むテキスト列に関連する索引の名前を指定します。
- textkey
-
一意のドキュメントのID(通常は主キー)を指定します。
textkeyパラメータは、次のいずれかです。
-
単一列の主キーの値。
-
コンポジット(複数列)主キーのコード化された仕様。CTX_DOC.PKENCODEプロシージャを使用します。
-
ドキュメントを含む行のROWID。
主キーとROWIDの識別を切り替えるには、CTX_DOC.SET_KEY_TYPEを使用します。
- text_query
-
ドキュメントを取り出すために使用された元の問合せ式を指定します。
text_queryにワイルド・カード、ステミング、ファジー・マッチングが指定されていて、結果としてストップワードが戻る場合、
MARKUP
はストップワードをハイライト表示しません。text_queryにTHRESHOLD演算子がある場合、その演算子は無視されます。
MARKUP
プロシージャは、常に結果セット全体に対するハイライト情報を戻します。 - restab
-
このプロシージャで、マークアップされたテキストを表またはインメモリー
CLOB
のどちらに格納するかを指定できます。結果を表に格納するには、表の名前を指定します。このプロシージャのコール前に、結果表が存在している必要があります。
関連項目:
マークアップ結果表の構造の詳細は、「Oracle Text結果表」の「マークアップ表」を参照してください。
結果をメモリーに格納するには、CLOBロケータの名前を指定します。restabがNULL
の場合は、一時CLOBが割り当てられて戻ります。使用後は、ロケータの割当てを解除する必要があります。
restabがNULL
でない場合は、操作の前にCLOBが切り捨てられます。
- query_id
-
restabに挿入した行の識別に使用する識別子を指定します。
query_idが指定されていないか、または
NULL
に設定されている場合、デフォルトは0(ゼロ)です。restabに指定されている表を手動で切り捨てる必要があります。 - plaintext
-
プレーン・テキストのマークアップ・ドキュメントを生成するには、
TRUE
を指定します。AUTO_FILTER
フィルタを使用している場合またはHTMLドキュメントを索引付けしている場合は、FALSE
を指定してマークアップされたHTML形式のドキュメントを生成します。 - tagset
-
次の事前定義済のタグセットの1つを指定します。この表の2列目および3列目は、各
tagset
に対して定義された異なるタグを示します。タグセット タグ タグ値 TEXT_DEFAULT
starttag
<<<
TEXT_DEFAULT
endtag
>>>
HTML_DEFAULT
starttag
<B>
HTML_DEFAULT
endtag
</B>
HTML_NAVIGATE
starttag
<A NAME=ctx%CURNUM><B>
HTML_NAVIGATE
endtag
</B></A>
HTML_NAVIGATE
prevtag
<A HREF=#ctx%PREVNUM><</A>
HTML_NAVIGATE
nexttag
<A HREF=#ctx%NEXTNUM>></A>
- starttag
-
ハイライト表示された語句の開始を示すために、
MARKUP
によって挿入された文字を指定します。ハイライト表示されたワードに対するstarttag、endtag、prevtagおよびnexttagの順序は、次のとおりです。
... prevtag starttag word endtag nexttag...
- endtag
-
ハイライト表示された語句の終了を示すために、
MARKUP
によって挿入された文字を指定します。 - prevtag
-
前のハイライト表示された部分にユーザーをナビゲートするタグを定義するマークアップ順序を指定します。
マークアップ順序prevtagおよびnexttagで、動的に設定される次のオフセット変数を指定できます。
オフセット変数 値 %CURNUM
現在のオフセット番号
%PREVNUM
前のオフセット番号
%NEXTNUM
次のオフセット番号
例については、HTML_NAVIGATE
タグセットの記述を参照してください。
- nexttag
-
次のハイライト表示された部分にユーザーをナビゲートするタグを定義するマークアップ順序を指定します。
マークアップ順序内で、prevtagに使用するものと同じオフセット変数を使用できます。例については、prevtagおよび
HTML_NAVIGATE
タグセットの記述を参照してください。 - use_saved_copy
-
$D表を参照してドキュメントのコピーをフェッチするかどうかと、$D表でドキュメントのコピーが取得できないときにどんなアクションを実行するかを指定します。
use_saved_copy
パラメータに指定できる値は、次のいずれかです。
-
CTX_DOC.SAVE_COPY_FALLBACK:
$D表からドキュメントのコピーをフェッチします。ドキュメントのコピーが$D表に存在しない場合は、データストアからドキュメントをフェッチします。 -
CTX_DOC.SAVE_COPY_ERROR:
$D表からドキュメントのコピーをフェッチします。ドキュメントのコピーが$D表に存在しない場合は、エラー・メッセージを表示します。$D表でドキュメントのコピーが取得できないときに特定のフォールバック・ロジックを実装する場合には、この値を指定してください。 -
CTX_DOC.SAVE_COPY_IGNORE:
ドキュメントを常にデータストアからフェッチします。
デフォルト値は、CTX_DOC.SAVE_COPY_FALLBACK
です。
例
インメモリー・マークアップ
次のコードは、ドキュメント(the dog chases the cat)を取り出し、割り当てられたマークアップを実行し、結果をメモリーに格納します。
set serveroutput on drop table mark_tab; create table mark_tab (id number primary key, text varchar2(80) ); insert into mark_tab values ('1', 'The dog chases the cat.'); create index mark_tab_idx on mark_tab(text) indextype is ctxsys.context parameters ('filter ctxsys.null_filter'); declare mklob clob; amt number := 40; line varchar2(80); begin ctx_doc.markup('mark_tab_idx','1','dog AND cat', mklob); -- mklob is NULL when passed-in, so ctx_doc.markup will -- allocate a temporary CLOB for us and place the results there. dbms_lob.read(mklob, amt, 1, line); dbms_output.put_line('FIRST 40 CHARS ARE:'||line); -- have to de-allocate the temp lob dbms_lob.freetemporary(mklob); end; /
この例の出力には、マークアップ・ドキュメントの外観が示されます。
FIRST 40 CHARS ARE: The <<<dog>>> chases the <<<cat>>>.
マークアップ表
マークアップされたドキュメントを格納するために、次のようにハイライト・マークアップ表を作成します。
create table markuptab (query_id number, document clob);
MARKUP
の結果を表に格納することもできます。ドキュメント23のdogまたはcatというワードに対するHTMLハイライト・マークアップを作成するには、次の例を入力します。
begin ctx_doc.markup(index_name => 'my_index', textkey => '23', text_query => 'dog|cat', restab => 'markuptab', query_id => '1', tagset => 'HTML_DEFAULT'); end; begin ctx_doc.markup(index_name => 'my_index', textkey => '23', text_query => 'dog AND cat WITHIN titlesection@name', restab => 'markuptab', query_id => '1', tagset => 'HTML_DEFAULT'); end;
フィルタが存在する状態でのワード・ハイライト
次のような問合せでマークアップを実行すると、キーワード(この例では「dog」)のみマークアップされます。AND
演算子の後のフィルタ述語は無視されます。
begin ctx_doc.markup(index_name => 'my_index', textkey => '23', text_query => 'dog AND cat WITHIN titlesection@name', restab => 'markuptab', query_id => '1', tagset => 'HTML_DEFAULT'); end; begin ctx_doc.markup(index_name => 'my_index', textkey => '23', text_query => 'dog AND SDATA(price > 100)', restab => 'markuptab', query_id => '1', tagset => 'HTML_DEFAULT'); end;
ドキュメント23のpoliticsというテーマに対するHTMLハイライト・マークアップを作成するには、次の文を入力します。
begin ctx_doc.markup(index_name => 'my_index', textkey => '23', text_query => 'about(politics)', restab => 'markuptab', query_id => '1', tagset => 'HTML_DEFAULT'); end;
制限事項
CTX_DOC.MARKUP
では、問合せテンプレートの使用はサポートされていません。
9.7 PKENCODE
CTX_DOC.PKENCODE
ファンクションは、コンポジット・テキストキーのリストを1つの文字列に変換し、文字列を戻します。
PKENCODE
によって作成された文字列は、CTX_DOC.THEMESやCTX_DOC.GISTなどの他のCTX_DOC
プロシージャで、主キー・パラメータtextkeyとして使用できます。
構文
CTX_DOC.PKENCODE( pk1 IN VARCHAR2, pk2 IN VARCHAR2 DEFAULT NULL, pk4 IN VARCHAR2 DEFAULT NULL, pk5 IN VARCHAR2 DEFAULT NULL, pk6 IN VARCHAR2 DEFAULT NULL, pk7 IN VARCHAR2 DEFAULT NULL, pk8 IN VARCHAR2 DEFAULT NULL, pk9 IN VARCHAR2 DEFAULT NULL, pk10 IN VARCHAR2 DEFAULT NULL, pk11 IN VARCHAR2 DEFAULT NULL, pk12 IN VARCHAR2 DEFAULT NULL, pk13 IN VARCHAR2 DEFAULT NULL, pk14 IN VARCHAR2 DEFAULT NULL, pk15 IN VARCHAR2 DEFAULT NULL, pk16 IN VARCHAR2 DEFAULT NULL) RETURN VARCHAR2;
戻り値
コンポジット・テキストキーのコード化された値を表す文字列です。
例
begin ctx_doc.gist('newsindex',CTX_DOC.PKENCODE('smith', 14), 'CTX_GIST'); end;
この例のsmithおよび14は、ドキュメントのコンポジット・テキストキーの値を構成します。
9.8 POLICY_FILTER
プレーン・テキストまたはHTML形式のドキュメントを生成します。このプロシージャでは、CONTEXT
索引は不要です。
このプロシージャでは、信頼できるコールアウトを使用しています。
構文
ctx_doc.policy_filter(policy_name in VARCHAR2, document in [VARCHAR2|CLOB|BLOB|BFILE], restab in out nocopy CLOB, plaintext in BOOLEAN default FALSE, language in VARCHAR2 default NULL, format in VARCHAR2 default NULL, charset in VARCHAR2 default NULL);
- policy_name
-
CTX_DDL.CREATE_POLICYを使用して作成されたポリシーの名前を指定します。
- document
-
フィルタ処理するドキュメントを指定します。
- restab
-
CLOB
ロケータの名前を指定します。 - plaintext
-
プレーン・テキスト形式のドキュメントを生成するには、
TRUE
を指定します。AUTO_FILTER
フィルタを使用している場合またはHTMLドキュメントを索引付けしている場合は、FALSE
を指定してHTML形式のドキュメントを生成します。 - language
-
ドキュメントの言語を指定します。元表の言語列で使用する、Oracle Textでサポートされている言語の値を使用します。「Oracle Text索引付けの要素」の「BASIC_LEXER」を参照してください。
- format
-
ドキュメントの形式を指定します。元表のフォーマット列で指定する、Oracle Textでサポートされているフォーマットの値(TEXT、BINARYまたはIGNOREのいずれか)を使用します。詳細は、「Oracle TextのSQL文と演算子」の「CREATE INDEX」のフォーマット列の説明を参照してください。
- charset
-
ドキュメントのキャラクタ・セットを指定します。元表のキャラクタ・セット列で指定する、Oracle Textでサポートされている値を使用します。「フィルタ型」を参照してください。
9.9 POLICY_GIST
ドキュメントの要点またはテーマ・サマリーを生成します。段落レベルまたは文レベルの要点またはテーマ・サマリーを生成できます。このプロシージャでは、CONTEXT
索引は不要です。
構文
ctx_doc.policy_gist(policy_name in VARCHAR2, document in [VARCHAR2|CLOB|BLOB|BFILE], restab in out nocopy CLOB, glevel in VARCHAR2 default 'P', pov in VARCHAR2 default 'GENERIC', numParagraphs in VARCHAR2 default NULL, maxPercent in NUMBER default NULL, num_themes in NUMBER default 50 language in VARCHAR2 default NULL, format in VARCHAR2 default NULL, charset in VARCHAR2 default NULL );
- policy_name
-
CTX_DDL.CREATE_POLICYを使用して作成されたポリシーの名前を指定します。
- document
-
要点またはテーマ・サマリーを生成するドキュメントを指定します。
- restab
-
CLOB
ロケータの名前を指定します。 - glevel
-
生成する要点またはテーマ・サマリーのタイプを指定します。有効な値は、次のとおりです。
-
段落の場合はP
-
文の場合はS
デフォルトはPです。
- pov
-
要点または単一のテーマ・サマリーを生成するかどうかを指定します。生成される要点またはテーマ・サマリーのタイプ(文レベルまたは段落レベル)は、
glevel
に指定した値によって決まります。ドキュメント全体の要点を生成するには、
pov
に値GENERICを指定します。ドキュメントの単一のテーマに対するテーマ・サマリーを生成するには、そのテーマをpov
の値として指定します。結果表記憶域を使用し、
pov
の値を指定しない場合、このプロシージャはドキュメントに対して、全体の要点に加えて最大50個までのテーマ・サマリーを戻します。注意:
pov
パラメータでは、大/小文字が区別されます。ドキュメントの要点を戻すには、すべて大文字で「GENERIC
」を指定します。テーマ・サマリーを戻すには、ドキュメントに対して生成されたとおりのテーマを正確に指定します。ドキュメントに対してTHEMESで生成されたテーマのみを、
pov
の入力として使用できます。 - numParagraphs
-
ドキュメントの要点またはテーマ・サマリーに対して選択されたドキュメントの段落(または文)の最大数を指定します。デフォルトは16です。
注意:
numParagraphs
パラメータが使用されるのは、このパラメータによって生成される要点またはテーマ・サマリーのサイズが、maxPercent
パラメータによって生成される要点またはテーマ・サマリーのサイズよりも小さいときのみです。つまり、システムは、常に最小サイズの要点またはテーマ・サマリーを戻します。
- maxPercent
-
ドキュメントの要点またはテーマ・サマリーに対して選択されたドキュメントの段落(または文)の最大数を、ドキュメントの合計段落数(または合計文数)に対する割合で指定します。デフォルトは10です。
注意:
numParagraphs
パラメータが使用されるのは、このパラメータによって生成される要点またはテーマ・サマリーのサイズが、maxPercent
パラメータによって生成される要点またはテーマ・サマリーのサイズよりも小さいときのみです。つまり、システムは、常に最小サイズの要点またはテーマ・サマリーを戻します。
- num_themes
-
pov
の値を指定しない場合は、生成するテーマ・サマリーの数を指定します。たとえば、10を指定すると、トップ10のテーマ・サマリーが戻ります。デフォルトは50です。0(ゼロ)またはNULLを指定すると、ドキュメント内の全テーマが戻ります。51以上のテーマがドキュメントに格納されている場合、概念階層が表示されるのは、トップ50のテーマのみです。
- language
-
ドキュメントの言語を指定します。元表の言語列で使用する、Oracle Textでサポートされている言語の値を使用します。「MULTI_LEXER」を参照してください。
- format
-
ドキュメントの形式を指定します。元表のフォーマット列で指定する、Oracle Textでサポートされているフォーマットの値(TEXT、BINARYまたはIGNOREのいずれか)を使用します。詳細は、「CREATE INDEX」のフォーマット列の説明を参照してください。
- charset
-
ドキュメントのキャラクタ・セットを指定します。元表のキャラクタ・セット列で指定する、Oracle Textでサポートされている値を使用します。
9.10 POLICY_HIGHLIGHT
ドキュメントのオフセット情報をハイライト表示するプレーン・テキストまたはHTML形式を生成します。このプロシージャでは、CONTEXT
索引は不要です。
オフセット情報は、指定する問合せを満たすドキュメント内の語句に対して生成されます。これらのハイライト表示される語句は、ワード問合せを満たすワードまたはABOUT
問合せを満たすテーマのいずれかです。
プレーン・テキスト形式またはHTML形式のいずれかのドキュメントに対して、ハイライト・オフセットを生成できます。オフセット情報は、CTX_DOC.FILTER でフィルタ処理された同じドキュメントに適用します。
構文
exec ctx_doc.policy_highlight( policy_name in VARCHAR2, document in [VARCHAR2|CLOB|BLOB|BFILE], text_query in VARCHAR2, restab in out nocopy highlight_tab, plaintext in boolean FALSE language in VARCHAR2 default NULL, format in VARCHAR2 default NULL, charset in VARCHAR2 default NULL ); exec ctx_doc.policy_highlight_clob_query( policy_name in VARCHAR2, document in [VARCHAR2|CLOB|BLOB|BFILE], text_query in CLOB, restab in out nocopy highlight_tab, plaintext in boolean FALSE language in VARCHAR2 default NULL, format in VARCHAR2 default NULL, charset in VARCHAR2 default NULL );
- policy_name
-
CTX_DDL.CREATE_POLICYを使用して作成されたポリシーの名前を指定します。
- document
-
ハイライト表示するオフセット情報を生成するドキュメントを指定します。
- text_query
-
ドキュメントを取り出すために使用された元の問合せ式を指定します。NULLの場合、ハイライトは生成されません。
text_query
にワイルド・カード、ステミング、ファジー・マッチングが指定されていて、結果としてストップワードが戻る場合、このプロシージャはストップワードをハイライト表示しません。text_query
にTHRESHOLD演算子がある場合、その演算子は無視されます。このプロシージャは、常に結果セット全体に対するハイライト情報を戻します。 - restab
-
highlight_tab
PL/SQL索引付き表型の名前を指定します。関連項目:
highlight_tab
表型の構造の詳細は、「HIGHLIGHT」を参照してください - plaintext
-
プレーン・テキスト・オフセットのドキュメントを生成するには、
TRUE
を指定します。AUTO_FILTER
フィルタを使用している場合またはHTMLドキュメントを索引付けしている場合は、FALSE
を指定してドキュメントのHTMLオフセットを生成します。 - language
-
ドキュメントの言語を指定します。元表の言語列で使用する、Oracle Textでサポートされている言語の値を使用します。「Oracle Text索引付けの要素」の「MULTI_LEXER」を参照してください。
- format
-
ドキュメントの形式を指定します。元表のフォーマット列で指定する、Oracle Textでサポートされているフォーマットの値(TEXT、BINARYまたはIGNOREのいずれか)を使用します。詳細は、「CREATE INDEX」のフォーマット列の説明を参照してください。
- charset
-
ドキュメントのキャラクタ・セットを指定します。元表のキャラクタ・セット列で指定する、Oracle Textでサポートされている値を使用します。
制限事項
CTX_DOC.POLICY_HIGHLIGHT
では、問合せテンプレートの使用はサポートされていません。
9.11 POLICY_LANGUAGES
テキストのセクションについて言語をフェッチします。
言語の説明とスコアの表を戻します。スコアは、指定したテキストが特定の言語であることをシステムが確定できる信頼度です。
構文
CTX_DOC.POLICY_LANGUAGES ( policy_name IN VARCHAR2 | CLOB, document IN VARCHAR2, restab IN OUT NOCOPY CTX_DOC.LANGUAGE_TAB );
- policy_name
-
CTX_DDL.CREATE_POLICYメソッドを使用して以前に作成されたポリシー。指定したポリシーにセクション化プリファレンスが含まれている場合、APIはそのセクション化プリファレンスを優先します。たとえばHTMLセクション化が指定されている場合、入力ドキュメントを処理する前にHTMLタグが削除されます。
- document
-
言語を抽出するテキストの本文。テキストは、UTF-8文字エンコーディングのプレーン・テキストとみなされます。
- restab
-
言語抽出プロセスの結果。結果は、レコードの表です。各レコードには、言語文字列と、言語文字列ごとのスコアの2つの属性があります。スコアは、0から100の範囲で、指定したテキストが特定の言語であることをシステムが確定できる信頼度です。生成される言語は、信頼度が最も高い言語を先頭にソートして戻されます。
restab
の表レイアウトは、HIGHLIGHTの表レイアウトと類似しています。関連項目:
restab
レイアウトの詳細は、「HIGHLIGHT」を参照してください
CTX_DOC.POLICY_LANGUAGESとPOLICY_STEMSでサポートされる言語
言語の抽出は、AUTO_LEXERでサポートされている言語のテキストでサポートされます。このリリースのCTX_DOC.POLICY_LANGUAGESとCTX_DOC.POLICY_STEMSでサポートされている言語は、次のとおりです。
アラビア語
ノルウェー語(ブークモール)
カタロニア語
クロアチア語
チェコ語
デンマーク語
オランダ語
英語
フィンランド語
フランス語
ドイツ語
ギリシャ語
ヘブライ語
ハンガリー語
イタリア語
日本語
韓国語
ポーランド語
ノルウェー語(ニーノシュク)
ペルシア語
ポルトガル語
ルーマニア語
ロシア語
セルビア語
スロバキア語
スロベニア語
中国語(簡体字)
スペイン語
スウェーデン語
タイ語
中国語(繁体字)
トルコ語
9.12 POLICY_MARKUP
問合せ語句がハイライト表示されているドキュメントのプレーン・テキストまたはHTML形式を生成します。このプロシージャでは、CONTEXT
索引は不要です。
CTX_DOC.POLICY_MARKUP
プロシージャは、問合せ指定およびドキュメントを取り出し、問合せ語句がマークアップされた形式のドキュメントを戻します。これらのマークアップされた語句は、ワード問合せを満たすワードまたはABOUT
問合せを満たすテーマのいずれかです。
マークアップされた出力は、プレーン・テキストまたはHTMLのいずれかに設定できます。
ハイライト表示された語句をマークするには、事前定義済のタグセットの1つ(HTMLナビゲーションを可能にするタグ順序を含む)を使用できます。
構文
ctx_doc.policy_markup(policy_name in VARCHAR2, document in [VARCHAR2|CLOB|BLOB|BFILE], text_query in VARCHAR2, restab in out nocopy CLOB, plaintext in BOOLEAN default FALSE, tagset in VARCHAR2 default 'TEXT_DEFAULT', starttag in VARCHAR2 default NULL, endtag in VARCHAR2 default NULL, prevtag in VARCHAR2 default NULL, nexttag in VARCHAR2 default NULL language in VARCHAR2 default NULL, format in VARCHAR2 default NULL, charset in VARCHAR2 default NULL ); ctx_doc.policy_markup_clob_query( policy_name in VARCHAR2, document in [VARCHAR2|CLOB|BLOB|BFILE], text_query in CLOB, restab in out nocopy CLOB, plaintext in BOOLEAN default FALSE, tagset in VARCHAR2 default 'TEXT_DEFAULT', starttag in VARCHAR2 default NULL, endtag in VARCHAR2 default NULL, prevtag in VARCHAR2 default NULL, nexttag in VARCHAR2 default NULL language in VARCHAR2 default NULL, format in VARCHAR2 default NULL, charset in VARCHAR2 default NULL );
- policy_name
-
CTX_DDL.CREATE_POLICYを使用して作成されたポリシーの名前を指定します。
- document
-
ハイライト表示するオフセット情報を生成するドキュメントを指定します。
- text_query
-
ドキュメントを取り出すために使用された元の問合せ式を指定します。
text_query
にNULLが含まれている場合、このプロシージャは失敗し、エラーが生成されます。text_query
にワイルド・カード、ステミング、ファジー・マッチングが指定されていて、結果としてストップワードが戻る場合、このプロシージャはストップワードをハイライト表示しません。text_query
にTHRESHOLD演算子がある場合、その演算子は無視されます。このプロシージャは、常に結果セット全体に対するハイライト情報を戻します。 - restab
-
CLOB
ロケータの名前を指定します。 - plaintext
-
プレーン・テキストのマークアップ・ドキュメントを生成するには、
TRUE
を指定します。AUTO_FILTER
フィルタを使用している場合またはHTMLドキュメントを索引付けしている場合は、FALSE
を指定してマークアップされたHTML形式のドキュメントを生成します。 - tagset
-
次の事前定義済のタグセットの1つを指定します。この表の2列目および3列目は、各タグセットに対して定義された異なるタグを示します。
タグセット タグ タグ値 TEXT_DEFAULT
starttag
<<<
TEXT_DEFAULT
endtag
>>>
HTML_DEFAULT
starttag
<B>
HTML_DEFAULT
endtag
</B>
HTML_NAVIGATE
starttag
<A NAME=ctx%CURNUM><B>
HTML_NAVIGATE
endtag
</B></A>
HTML_NAVIGATE
prevtag
<A HREF=#ctx%PREVNUM><</A>
HTML_NAVIGATE
nexttag
<A HREF=#ctx%NEXTNUM>></A>
- starttag
-
ハイライト表示された語句の開始を示すために、
MARKUP
によって挿入された文字を指定します。ハイライト表示されたワードに対するstarttag、endtag、prevtagおよびnexttagの順序は、次のとおりです。
... prevtag starttag word endtag nexttag...
- endtag
-
ハイライト表示された語句の終了を示すために、
MARKUP
によって挿入された文字を指定します。 - prevtag
-
前のハイライト表示された部分にユーザーをナビゲートするタグを定義するマークアップ順序を指定します。
マークアップ順序prevtagおよびnexttagで、動的に設定される次のオフセット変数を指定できます。
オフセット変数 値 %CURNUM
現在のオフセット番号
%PREVNUM
前のオフセット番号
%NEXTNUM
次のオフセット番号
tagsetの例は、HTML_NAVIGATE
タグセットの記述を参照してください。
- nexttag
-
次のハイライト表示された部分にユーザーをナビゲートするタグを定義するマークアップ順序を指定します。
マークアップ順序内で、prevtagに使用するものと同じオフセット変数を使用できます。例については、prevtagおよび
HTML_NAVIGATE
タグセットの記述を参照してください。 - language
-
ドキュメントの言語を指定します。元表の言語列で使用する、Oracle Textでサポートされている言語の値を使用します。「Oracle Text索引付けの要素」の「MULTI_LEXER」を参照してください。
- format
-
ドキュメントの形式を指定します。元表のフォーマット列で指定する、Oracle Textでサポートされているフォーマットの値(TEXT、BINARYまたはIGNOREのいずれか)を使用します。詳細は、「CREATE INDEX」のフォーマット列の説明を参照してください。
- charset
-
ドキュメントのキャラクタ・セットを指定します。元表のキャラクタ・セット列で指定する、Oracle Textでサポートされている値を使用します。「フィルタ型」を参照してください。
制限事項
CTX_DOC.POLICY_MARKUP
では、問合せテンプレートの使用はサポートされていません。
9.13 POLICY_NOUN_PHRASES
指定したドキュメントの各名詞句内の各単語の品詞情報とともに名詞句を抽出できる機能を提供します。
たとえば、次の文について考えてみます。
「The mayor of Chicago is giving a brief press conference.」
この入力の名詞句は「mayor of Chicago」と「brief press conference」です。入力テキストのサブグループは戻されません。たとえば、前述の例で、「mayor」、「Chicago」、「brief press」、「press conference」、「press」、「conference」は戻されません。
-
オランダ語
-
英語
-
ドイツ語
-
フランス語
-
イタリア語
-
日本語
-
韓国語
-
中国語(簡体字)
-
スペイン語
-
中国語(繁体字)
構文
ctx_doc.policy_noun_phrases ( policy_name in varchar2, document in varchar2 | CLOB, restab in out nocopy noun_phrase_tab, language in varchar2 default NULL, format in varchar2 default NULL, charset in varchar2 default NULL );
- policy_name
-
CTX_DDL.CREATE_POLICYを使用して作成されたポリシーの名前を指定します。
- document
-
言語を抽出するテキストの本文。テキストは、UTF-8文字エンコーディングのプレーン・テキストとみなされます。
- restab
-
CLOB
ロケータの名前を指定します。
POLICY_NOUN_PHRASESおよびPOLICY_PART_OF_SPEECHで使用される略称
表9-1にPOLICY_NOUN_PHRASES
およびPOLICY_PART_OF_SPEECH
の問合せで使用する略称のリストを示します。例ではこれらの略称を使用します。
表9-1 品詞の略称
略称 | 品詞 |
---|---|
N |
名詞 |
propN |
固有名詞 |
V |
動詞 |
Adj |
形容詞 |
Adv |
副詞 |
Prep |
前置詞 |
Part |
不変化詞 |
Punct |
句読 |
Pro |
代名詞 |
Wh |
疑問詞 |
Det |
限定詞 |
Conj |
接続詞 |
Card |
基数 |
Ord |
序数 |
Suf |
接尾辞 |
Pre |
接頭辞 |
Acr |
頭字語 |
Poss |
所有格 |
Unk |
不明 |
POLICY__NOUN_PHRASESの例
この項の例では、表9-1に示す略称を使用します。
set serverout on create or replace function toString(b boolean) return varchar2 is begin if (b) then return 'TRUE'; end if; return 'FALSE'; end; / declare the_nps ctx_doc.noun_phrase_tab; begin ctx_ddl.create_preference('rvlex', 'AUTO_LEXER'); ctx_ddl.set_attribute('rvlex','mixed_case','YES'); ctx_ddl.set_attribute('rvlex','timeout',0); ctx_ddl.create_policy(policy_name => 'rv_policy_21',lexer => 'rvlex'); ctx_doc.policy_noun_phrases('rv_policy_21','The mayor of Chicago is giving a brief press conference',the_nps); dbms_output.put_line(the_nps.count); for i in 1..the_nps.count loop if (the_nps(i).is_phrase_start) then if (i>1) then dbms_output.put(']'); dbms_output.new_line; end if; dbms_output.put('Phrase{term,POS,is_in_lex,offset,len,is_phrase_ start}:['); else dbms_output.put(','); end if; dbms_output.put('{' || the_nps(i).term || ',' || the_nps(i).pos_tag || ',' || toString(the_nps(i).is_in_lexicon) || ',' || the_nps(i).offset || ',' || the_nps(i).length || ',' || toString(the_nps(i).is_phrase_start) || '}'); end loop; dbms_output.put(']'); dbms_output.new_line; end; /
この例の出力:
Phrase{term,POS,is_in_lex,offset,len,is_phrase_start}: [{The,Det,TRUE,1,3,TRUE},{mayor,N,TRUE,5,5,FALSE}, {of,Prep,TRUE,11,2,FALSE},{Chicago,propN,TRUE,14,7,FALSE} Phrase{term,POS,is_in_lex,offset,len,is_phrase_start}: [{a,Det,TRUE,32,1,TRUE},{brief,N,TRUE,34,5,FALSE}, {press,N,TRUE,40,5,FALSE},{conference,N,TRUE,46,10,FALSE}]
9.14 POLICY_PART_OF_SPEECH
テキスト本文にある各単語の品詞を抽出します。
POLICY_NOUN_PHRASESには、サポートされている言語のリストがあります。
構文
ctx_doc.policy_part_of_speech ( policy_name in varchar2, document in varchar2 | CLOB, restab in out nocopy noun_phrase_tab, language in varchar2 default NULL, format in varchar2 default NULL, charset in varchar2 default NULL disambiguate_tags in boolean default TRUE );
- policy_name
-
CTX_DDL.CREATE_POLICYを使用して作成されたポリシーの名前を指定します。指定したポリシーにセクション化プリファレンスが含まれている場合、APIはそのセクション化プリファレンスを優先します。たとえばHTMLセクション化が指定されている場合、入力ドキュメントを処理する前にHTMLタグが削除されます。
- document
-
言語を抽出するテキストの本文。テキストは、UTF-8文字エンコーディングのプレーン・テキストとみなされます。
- restab
-
CLOB
ロケータの名前を指定します。この問合せでは名詞句の抽出の結果を含む表を戻します。各単語に対し、次の属性も戻されます。-
pos_tags
: この単語の品詞タグ。最初にリストされている最も可能性の高いタグを含む、複数の品詞タグがある場合があります。 -
offset
: 入力文字列での単語のオフセット -
length
: 入力文字列での単語の長さ。 -
is_in_lexicon
: 単語がレキシコン内にあるかどうかを示します。
-
POLICY_PART_OF_SPEECHの例
この項の例では、表9-1に示す略称を使用します。
set serveroutput on; declare the_nps ctx_doc.part_of_speech_tab; begin ctx_doc.policy_part_of_speech(policy_name => 'rv_policy_21', document => 'The mayor of Chicago is giving a brief press conference', restab => the_nps, disambiguate_tags => false, language => 'english'); for i in 1..the_nps.count loop dbms_output.put('word:' || the_nps(i).word || ',pos:['); for j in 1..the_nps(i).pos_tags.count loop dbms_output.put(the_nps(i).pos_tags(j) || ','); end loop; dbms_output.put_line(']'); end loop; end; /
この例の出力:
word:The,pos:[Det,] word:mayor,pos:[N,] word:of,pos:[Prep,] word:Chicago,pos:[propN,] word:is,pos:[V,] word:giving,pos:[N,V,Adj,] word:a,pos:[Det,] word:brief,pos:[N,V,Adj,] word:press,pos:[N,V,] word:conference,pos:[N,V,]
9.15 POLICY_SNIPPET
コンテキスト内のマークアップ・キーワードを表示します。戻されたテキストに含まれるのは、ワード問合せを満たすワードまたはABOUT
問合せを満たすテーマのいずれかです。このバージョンのCTX_DOC.SNIPPETプロシージャでは、索引は不要です。
構文
構文1
exec CTX_DOC.POLICY_SNIPPET(
policy_name IN VARCHAR2, document IN [VARCHAR2|CLOB|BLOB|BFILE], text_query IN VARCHAR2, language IN VARCHAR2 default NULL, format IN VARCHAR2 default NULL, charset IN VARCHAR2 default NULL, starttag IN VARCHAR2 DEFAULT '<b>', endtag IN VARCHAR2 DEFAULT '</b>', entity_translation IN BOOLEAN DEFAULT TRUE, separator IN VARCHAR2 DEFAULT '<b>...</b>' radius IN INTEGER DEFAULT 25, max_length IN INTEGER DEFAULT 150 ) return varchar2;
構文2
exec CTX_DOC.POLICY_SNIPPET_CLOB_QUERY( policy_name IN VARCHAR2, document IN [VARCHAR2|CLOB|BLOB|BFILE], text_query IN CLOB, language IN VARCHAR2 default NULL, format IN VARCHAR2 default NULL, charset IN VARCHAR2 default NULL, starttag IN VARCHAR2 DEFAULT '<b>', endtag IN VARCHAR2 DEFAULT '</b>', entity_translation IN BOOLEAN DEFAULT TRUE, separator IN VARCHAR2 DEFAULT '<b>...</b>' radius IN INTEGER DEFAULT 25, max_length IN INTEGER DEFAULT 150 ) return varchar2;
- policy_name
-
CTX_DDL.CREATE_POLICYを使用して作成されたポリシーの名前を指定します。
- document
-
キーワード検索の対象となるドキュメントを指定します。
- text_query
-
ドキュメントを取り出すために使用された元の問合せ式を指定します。NULLの場合、ハイライトは生成されません。
text_query
にワイルド・カード、ステミング、ファジー・マッチングが指定されていて、結果としてストップワードが戻る場合、POLICY_SNIPPET
はストップワードをハイライト表示しません。text_query
にTHRESHOLD演算子がある場合、その演算子は無視されます。 - language
-
ドキュメントの言語を指定します。元表の言語列で使用する、Oracle Textでサポートされている言語の値を使用します。「Oracle Text索引付けの要素」の「MULTI_LEXER」を参照してください。
- format
-
ドキュメントの形式を指定します。元表のフォーマット列で指定する、Oracle Textでサポートされているフォーマットの値(TEXT、BINARYまたはIGNOREのいずれか)を使用します。詳細は、「CREATE INDEX」のフォーマット列の説明を参照してください。
- charset
-
ドキュメントのキャラクタ・セットを指定します。元表のキャラクタ・セット列で指定する、Oracle Textでサポートされている値を使用します。「フィルタ型」を参照してください。
- starttag
-
問合せキーワードのマークアップ用の開始タグを指定します。デフォルトは<b>です。
- endtag
-
問合せキーワードのマークアップ用の終了タグを指定します。デフォルトは</b>です。
- entity_translation
-
HTMLエンティティを変換させるかどうかを指定します。デフォルトはTRUEで、プロシージャによって出力される際、特殊エンティティ(<、>、&)が代替形式(<、>、&)に変換されます。ただし、
CTX_DOC.POLICY_SNIPPET
によって生成されたマークアップ・タグ内の特殊文字は変換されません。 - separator
-
戻される複数の異なるフラグメントを区切る文字列を指定します。デフォルトは<b>...</b>です。
- radius
-
セグメントでヒットした問合せのいずれかの側に表示される文字の数を指定します。ヒット問合せより前の文字数カウントは、セグメントに表示される最初のヒット問合せの最初の文字で始まります。同様に、ヒット問合せより後の文字数カウントは、特定のセグメントに表示される最後のヒット問合せの最後の文字で始まります。半径が重なる場合には、2つのセグメントが1つのマージされます。両側に表示される文字の数は、文または単語の最初と最後に一致するように、+/-10文字単位で変更できます。
値を
0
にするときは、特に注意が必要です。指定した半径は自動的に設定され、文によって異なります。結果の最適予測が表示され、これは文全体への一致を試みます。ヒット問合せの両側の半径は、大きく異なるのが普通です。デフォルト値は25です。
- max_length
-
スニペット出力の最大長を、文字単位で指定します。この値には現在、CTX_DOC.SNIPPETとCTX_DOC.POLICY_SNIPPET (VARCHAR2)の現在の戻り型によって上限が設定されます。出力が戻り型VARCHAR2より長くなる場合は、結果が切り捨てられます。
max_lengthのデフォルト値は150です。
注意:
max_length
値を極端に小さい値に設定すると、スニペットが生成されない場合があります。たとえば、max_length
を0
に設定した場合や、max_length
を問合せトークン自体の長さより小さく設定した場合、スニペットはまったく生成されません。
制限事項
CTX_DOC.POLICY_SNIPPET
では、問合せテンプレートの使用はサポートされていません。
CTX_DOC.POLICY_SNIPPET
をNULL_SECTION_GROUP
で使用すると、コンテキスト内のマークアップ・キーワードが表示されます。ただし、XMLドキュメントでこのプロシージャを使用する場合は制限があります。XML_SECTION_GROUP
またはAUTO_SECTION_GROUP
で使用すると、XML構造は無視され、ユーザーが指定したタグは外されます。したがって、戻される結果には、テキストの前後の部分が含まれることになります。
9.16 POLICY_STEMS
テキスト本文にある各単語の語幹を抽出します。このプロシージャはAUTO_LEXERで使用されます。このプロシージャは、「POLICY_LANGUAGES」に示されたAUTO_LEXERによってサポートされる言語のみ使用できます。
構文
exec CTX_DOC.POLICY_STEMS ( policy_name in varchar2, document in varchar2 | CLOB, restab in out nocopy ctx_doc.stem_group_tab, language in varchar2 default NULL, format in varchar2 default NULL, charset in varchar2 default NULL );
- policy_name
-
CTX_DDL.CREATE_POLICYメソッドを使用して以前に作成されたポリシー。指定したポリシーに
HTML_SECTION_GROUP
セクション化プリファレンスが含まれている場合、APIはそのセクション化プリファレンスを優先します。たとえばHTMLセクション化が指定されている場合、入力ドキュメントを処理する前にHTMLタグが削除されます。ポリシーはAUTO_LEXERしか使用できません。
- document
-
言語を抽出するテキストの本文。テキストは、UTF-8文字エンコーディングのプレーン・テキストとみなされます。
- restab
-
語幹抽出プロセスの結果。PL/SQL表で戻される値は、入力文字列ドキュメントの単語ごとに1つのセルを持ちます。各単語は、レクサーで定義される複数ワードでもかまいません。単語ごとに、すべての語幹(すべての代替語幹も含む)が戻されます。語幹ごとに、語幹である単語のオフセットと長さ(入力文字列の)が戻されます。さらに、語幹ごとに、その語幹がレキシコンで見つかったかどうかを示すブール値が戻されます。
stem_group_tab
は、stem_group_records
の表です。 - language
-
入力テキストの言語。言語文字列は、言語抽出の前のセクションで指定した値のいずれかです。このパラメータがnullの場合、言語は自動的に検出されます。言語の検出には負荷が伴います。したがって、言語がわかっている場合には言語の値を指定するようにしてください。言語のリストは、「POLICY_LANGUAGES」を参照してください。
- format
-
入力テキストのフォーマット。
- charset
-
入力テキストのキャラクタ・セット。
制限事項と注意
語幹抽出プロセスは、一定の非標準のワード形式(大文字表記エラーなど)にも標準形式にも対応しています。したがって、非公式または不正確なテキスト(電子メール、オンライン・ドキュメント、問合せなど)の処理にも使用できます。また、大/小文字の変動、ハイフン、アクセント指定のない文字などの差異も処理されます。
語幹抽出プロセスで、複合語は分割されませんが、かわりに#文字で複合語が区切られます。このような複合語は、ドイツ語で一般的です。たとえば、ドイツ語の複合語Bildungsroman (「教養」の意のBildungと「小説」の意のRomanから成る)は、Bildungsとromanの2つの語幹ではなく、Bildungs#romanという1つの語幹になります。
9.17 POLICY_THEMES
ドキュメントのテーマのリストを生成します。このプロシージャでは、CONTEXT
索引は不要です。
構文
ctx_doc.policy_themes(policy_name in VARCHAR2, document in [VARCHAR2|CLOB|BLOB|BFILE], restab in out nocopy theme_tab, full_themes in BOOLEAN default FALSE, num_themes in number default 50 language in VARCHAR2 default NULL, format in VARCHAR2 default NULL, charset in VARCHAR2 default NULL );
- policy_name
-
CTX_DDL.CREATE_POLICYを使用して作成されたポリシーを指定します。
- document
-
テーマのリストを生成するドキュメントを指定します。
- restab
-
theme_tab
PL/SQL索引付き表型の名前を指定します。関連項目:
theme_tab
型の構造の詳細は、「THEMES」を参照してください。 - full_themes
-
このプロシージャが、各ドキュメント・テーマに対して単一のテーマを作成するか、親テーマ(全テーマ)の階層型リストを作成するかを指定します。
TRUE
を指定すると、このプロシージャは全テーマを結果表のTHEME
列に書き込みます。FALSE
を指定すると、このプロシージャは単一テーマ情報を結果表のTHEME
列に書き込みます。これはデフォルトです。 - num_themes
-
取り出すテーマの最大数を指定します。たとえば、10を指定すると、ドキュメントのテーマが最初の10個まで戻ります。デフォルトは50です。
0(ゼロ)または
NULL
を指定すると、ドキュメント内の全テーマが戻ります。51以上のテーマがドキュメントに格納されている場合、概念階層が表示されるのは、最初の50テーマのみです。 - language
-
ドキュメントの言語を指定します。元表の言語列で使用する、Oracle Textでサポートされている言語の値を使用します。「Oracle Text索引付けの要素」の「MULTI_LEXER」を参照してください。
- format
-
ドキュメントの形式を指定します。元表のフォーマット列で指定する、Oracle Textでサポートされているフォーマットの値(
TEXT
、BINARY
またはIGNORE
のいずれか)を使用します。詳細は、「Oracle TextのSQL文と演算子」の「CREATE INDEX」のフォーマット列の説明を参照してください。 - charset
-
ドキュメントのキャラクタ・セットを指定します。元表のキャラクタ・セット列で指定する、Oracle Textでサポートされている値を使用します。「フィルタ型」を参照してください。
例
ポリシーを作成します。
exec ctx_ddl.create_policy('mypolicy');
テーマを実行します。
declare la varchar2(200); rtab ctx_doc.theme_tab; begin ctx_doc.policy_themes('mypolicy', 'To define true madness, What is''t but to be nothing but mad?', rtab); for i in 1..rtab.count loop dbms_output.put_line(rtab(i).theme||':'||rtab(i).weight); end loop; end;
9.18 POLICY_TOKENS
ドキュメントのすべての索引トークンを生成します。このプロシージャでは、CONTEXT
索引は不要です。
構文
ctx_doc.policy_tokens(policy_name in VARCHAR2, document in [VARCHAR2|CLOB|BLOB|BFILE], restab in out nocopy token_tab, language in VARCHAR2 default NULL, format in VARCHAR2 default NULL, charset in VARCHAR2 default NULL, thes_name in VARCHAR2 default NULL, thes_toktype in VARCHAR2 default 'SYN');
- policy_name
-
CTX_DDL.CREATE_POLICYを使用して作成されたポリシーの名前を指定します。
- document
-
トークンを生成するドキュメントを指定します。
- restab
-
token_tab
PL/SQL索引付き表型の名前を指定します。戻されるトークンは、ドキュメントの索引に挿入されるトークンです。ストップワードは戻されません。セクション・タグは、テキスト・トークンではないため、戻されません。
関連項目:
token_tab
型の構造の詳細は、この章の「TOKENS」を参照してください。 - language
-
ドキュメントの言語を指定します。元表の言語列で使用する、Oracle Textでサポートされている言語の値を使用します。「Oracle Text索引付けの要素」の「MULTI_LEXER」を参照してください。
- format
-
ドキュメントの形式を指定します。元表のフォーマット列で指定する、Oracle Textでサポートされているフォーマットの値(TEXT、BINARYまたはIGNOREのいずれか)を使用します。詳細は、「CREATE INDEX」のフォーマット列の説明を参照してください。
- charset
-
ドキュメントのキャラクタ・セットを指定します。元表のキャラクタ・セット列で指定する、Oracle Textでサポートされている値を使用します。「フィルタ型」を参照してください。
- the_name
-
シソーラス名を指定します。名前を指定しない場合、索引トークンのシノニムまたは上位語は生成されません。
システムのデフォルト・シソーラスを使用するには、
DEFAULT
を指定します。 - thes_toktype
SYN
を指定して、シノニムを生成します。一方、BT
を指定して、索引トークンの上位語を生成します。デフォルトでは、シノニムだけが生成されます。このパラメータを使用するには、最初にthes_name
パラメータを使用してシソーラス名を指定する必要があります。
例1
トークンを取得します。
declare la varchar2(200); rtab ctx_doc.token_tab; begin ctx_doc.policy_tokens('mypolicy', 'To define true madness, What is''t but to be nothing but mad?',rtab); for i in 1..rtab.count loop dbms_output.put_line(rtab(i).offset||':'||rtab(i).token); end loop; end;
例2
この例では、シソーラス・サポートを使用してトークンのシノニムを生成します。
declare rtab ctx_doc.token_tab; begin ctx_doc.policy_tokens('mypolicy','the lazy dog',rtab,thes_name =>'animals'); for i in 1..rtab.count loop dbms_output.put_line(rtab(i).token||'a'||rtab(i).thes_tokens); end loop; end;
9.19 SENTIMENT
このプロシージャを使用して、ドキュメントのセンチメント・スコアを実行、ドキュメント内のトピックごとに個別のセンチメント・スコアを決定、および結果を結果表に移入します。
このプロシージャでは、ドキュメント・セットに関連するテキスト索引の名前および各ドキュメントを識別する一意の識別子のテキスト・キーの入力が必須です。センチメント分類の実行後、ドキュメントのテキスト・セグメントおよびそれらに関連するセンチメント・スコアが、結果表に移入されます。センチメント・スコアの値は、-100から100の間です。
このプロシージャの実行前に、結果表が存在している必要があります。結果表が存在しない、または指定されたトピックがない場合、エラーが戻されます。
指定されたトピックがドキュメントに存在しない場合、デフォルトのスニペットおよびゼロのセンチメント・スコアが結果表に書き込まれます。センチメント分類子が指定されない場合、デフォルトのセンチメント分類子を使用します。デフォルトの分類子は、AUTO_LEXER
を使用している場合のみ、使用可能です。
構文
SENTIMENT(
index_name IN VARCHAR2,
textkey IN VARCHAR2,
topic IN VARCHAR2,
restab IN VARCHAR2,
clsfier_name IN VARCHAR2 default NULL,
ttype IN VARCHAR2 default 'EXACT',
radius IN NUMBER default 50,
max_inst IN NUMBER default 5,
starttag IN VARCHAR2 default '',
endtag IN VARCHAR2 default '',
use_saved_copy IN NUMBER default 0
);
SENTIMENT
のほとんどのパラメータは、SENTIMENT_AGGREGATE
でも使用されます。SENTIMENT
およびSENTIMENT_AGGREGATE
に共通のパラメータの詳細は、SENTIMENT_AGGREGATEを参照してください。
関連項目:
SENTIMENT
プロシージャの使用例は、『Oracle Textアプリケーション開発者ガイド』を参照してください
9.20 SENTIMENT_AGGREGATE
このプロシージャを使用して、センチメント分析を実行し、各ドキュメントに単一の集計センチメント・スコアを返します。集計センチメント・スコアの値は、-100から100の間です。
テキスト問合わせの一部として検索キーワードを指定し、ドキュメント内のトピックに関連付けられているセンチメントを識別します。
このプロシージャでは、ドキュメント・セットに関連するテキスト索引の名前および各ドキュメントを識別する一意の識別子のテキスト・キーの入力が必須です。センチメント分類子が指定されない場合、デフォルトのセンチメント分類子を使用します。デフォルトの分類子は、AUTO_LEXER
を使用している場合のみ、使用可能です。
指定されたトピック・キーワードがドキュメントに見つからない場合、ゼロのセンチメント・スコアが戻されます。トピックを指定しない場合、ドキュメント全体に対する集計センチメント・スコアを返します。
注意:
センチメント・スコアの不整合性が発生するため、AUTO_LEXER
をユーザー定義の分類子を使用して実行しないでください。
構文
SENTIMENT_AGGREGATE(
index_name IN VARCHAR2,
textkey IN VARCHAR2,
topic IN VARCHAR2 default NULL,
clsfier_name IN VARCHAR2 default NULL,
ttype IN VARCHAR2 default 'EXACT',
radius IN NUMBER default 50,
max_inst IN NUMBER default 5,
use_saved_copy IN NUMBER default 0
) return NUMBER;
- index_name
-
テキスト列の
CONTEXT
索引名を指定します。このパラメータは必須です。 - textkey
-
一意のドキュメントのID(通常は主キー)を指定します。
textkey
は必須で、単一列の主キーの値です。 - clsfier_name
-
センチメント分類子の名前を指定して、センチメント分析の実行に使用します。サポートされる分類子の名前の最大長は、24バイトです。分類子名を指定しない場合、デフォルトの分類子が使用されます。
- topic
- このドキュメントでセンチメント・スコアを生成するトピックを指定します。トピックを指定しない場合、ドキュメント全体に対するセンチメント・スコアが生成されます。
- ttype
- このドキュメントで実行する検索のタイプを指定します。
-
EXACT:
指定された検索キーワードをドキュメント内で検索します。これがデフォルトの設定です。 -
ABOUT:
シソーラスを使用して、検索キーワードに関連する語を見つけます。
-
- radius
-
センチメント分類中に分析するテキストの周囲の半径を指定します。デフォルト値は50です。
分析で使用する実際のテキストの量は異なります。Oracle Textでは、最も一致する近隣のトピック・キーワード、ワードの境界および文章の境界を持つテキスト・セグメントを見つけようと試みるためです。
- max_inst
- 分析する
topic
のインスタンス/.オカレンスの最大数を指定します。このパラメータのデフォルト値は5です。 - use_saved_copy
$D
表を参照してドキュメントのコピーをフェッチするかどうかと、$D
表でドキュメントのコピーが取得できないときにどんなアクションを実行するかを指定します。このパラメータのデフォルト値は0(ゼロ)です。
関連項目:
SENTIMENT_AGGREGATE
プロシージャの使用例は、『Oracle Textアプリケーション開発者ガイド』を参照してください
9.21 SET_KEY_TYPE
このプロシージャを使用してCTX_DOC
プロシージャを設定し、ROWID
またはPRIMARY_KEY
のドキュメントの識別子を受け取ります。この設定は、セッションの起動にのみ影響を与えます。
構文
ctx_doc.set_key_type(key_type in varchar2);
例
次の例では、CTX_DOC
プロシージャを設定して、主キーのドキュメント識別子を受け取ります。
begin ctx_doc.set_key_type('PRIMARY_KEY'); end
9.22 SNIPPET
ドキュメントの用語索引を作成するには、CTX_DOC.SNIPPET
プロシージャを使用します。スニペットの出力は、セグメントのコレクションです。用語索引とは、問合せ語句とその前後のテキストを含むテキストの断片(フラグメント)です。この用語索引は、マークアップされた問合せキーワードを前後のテキストと一緒に戻すため、文脈付きキーワード(KWIC)としても知られており、ユーザーは問合せキーワードを文脈で評価できます。戻されたテキストには、ABOUT
問合せを満たすテーマが含まれていることもあります。
たとえば、brilligとslitheyの検索では、ドキュメントの関連フラグメントが戻される場合もあります。
'Twas <b>brillig</b>, and the <b>slithey</b> toves did gyre and
CTX_DOC.SNIPPET
は、問合せ語句を含んでいるドキュメントを対象として、関連性の最も高い1つ以上のフラグメントを戻します。CTX_DOC.SNIPPET
は前後のテキストも含めて戻すため、ユーザーは戻された語句の有用性を即時に評価できます。CTX_DOC.SNIPPET
は、戻されたテキストのワードがマークアップされていない場合に全体のドキュメントを戻します。
問合せ時に主にドキュメントのフィルタ処理に使用される述語が含まれる問合せの場合、SNIPPET
生成中に述語は無視されることに注意してください。次の述語は、この目的でフィルタ述語として扱われ、xml属性内を検索します。SDATA
、HASPATH
およびWITHIN
/INPATH
。
関連項目:
このプロシージャのポリシーベースのバージョンは、「CTX_DOC.POLICY_SNIPPET」を参照してください。
構文
構文1
exec CTX_DOC.SNIPPET(
index_name IN VARCHAR2, textkey IN VARCHAR2, text_query IN VARCHAR2, starttag IN VARCHAR2 DEFAULT '<b>', endtag IN VARCHAR2 DEFAULT '</b>', entity_translation IN BOOLEAN DEFAULT TRUE, separator IN VARCHAR2 DEFAULT '<b>...</b>', radius IN INTEGER DEFAULT 25, max_length IN INTEGER DEFAULT 250 use_saved_copy IN NUMBER DEFAULT CTX_DOC.SAVE_COPY_FALLBACK return varchar2 );
構文2
exec CTX_DOC.SNIPPET_CLOB_QUERY( index_name IN VARCHAR2, textkey IN VARCHAR2, text_query IN CLOB, starttag IN VARCHAR2 DEFAULT '<b>', endtag IN VARCHAR2 DEFAULT '</b>', entity_translation IN BOOLEAN DEFAULT TRUE, separator IN VARCHAR2 DEFAULT '<b>...</b>', radius IN INTEGER DEFAULT 25, max_length IN INTEGER DEFAULT 250 use_saved_copy IN NUMBER DEFAULT CTX_DOC.SAVE_COPY_FALLBACK return varchar2 );
-
単一列の主キーの値。
-
コンポジット(複数列)主キーのコード化された仕様。テキストキーがコンポジット・キーの場合は、
CTX_DOC.PKENCODE
プロシージャを使用して、コンポジット・テキストキー文字列をコード化する必要があります。 -
ドキュメントを含む行のROWID。
主キーとROWIDの識別を切り替えるには、CTX_DOC.SET_KEY_TYPE
を使用します。
- text_query
-
ドキュメントを取り出すために使用された元の問合せ式を指定します。NULLの場合、ハイライトは生成されません。
text_query
にワイルド・カード、ステミング、ファジー・マッチングが指定されていて、結果としてストップワードが戻る場合、SNIPPET
はストップワードをハイライト表示しません。text_query
にTHRESHOLD演算子がある場合、その演算子は無視されます。 - starttag
-
問合せキーワードのマークアップ用の開始タグを指定します。デフォルトは<b>です。
- endtag
-
問合せキーワードのマークアップ用の終了タグを指定します。デフォルトは</b>です。
- entity_translation
-
HTMLエンティティを変換させるかどうかを指定します。デフォルトはTRUEで、プロシージャによって出力される際、特殊エンティティ(<、>、&)が代替形式(<、>、&)に変換されます。ただし、
CTX_DOC.SNIPPET
によって生成されたマークアップ・タグ内の特殊文字は変換されません。 - separator
-
戻される複数の異なるフラグメントを区切る文字列を指定します。デフォルトは<b>...</b>です。
- radius
-
セグメントでヒットした問合せのいずれかの側に表示される文字の数を指定します。ヒット問合せより前の文字数カウントは、セグメントに表示される最初のヒット問合せの最初の文字で始まります。同様に、ヒット問合せより後の文字数カウントは、特定のセグメントに表示される最後のヒット問合せの最後の文字で始まります。半径が重なる場合には、2つのセグメントが1つのマージされます。両側に表示される文字の数は、文または単語の最初と最後に一致するように、+/-10文字単位で変更できます。
値を
0
にするときは、特に注意が必要です。指定した半径は自動的に設定され、文によって異なります。結果の最適予測が表示され、これは文全体への一致を試みます。ヒット問合せの両側の半径は、大きく異なるのが普通です。デフォルト値は25です。
- max_length
-
スニペット出力の最大長を、文字単位で指定します。この値には現在、CTX_DOC.SNIPPET and CTX_DOC.POLICY_SNIPPET (VARCHAR2)の現在の戻り型によって上限が設定されます。出力が戻り型VARCHAR2より長くなる場合は、結果が切り捨てられます。max_lengthのデフォルト値は250です。
max_length
値を極端に小さい値に設定すると、スニペットが生成されない場合があります。たとえば、max_length
を0
に設定した場合や、max_length
を問合せトークン自体の長さより小さく設定した場合、スニペットはまったく生成されません。 - use_saved_copy
-
$D表を参照してドキュメントのコピーをフェッチするかどうかと、$D表でドキュメントのコピーが取得できないときにどんなアクションを実行するかを指定します。デフォルト値は、
CTX_DOC.SAVE_COPY_FALLBACK
です。use_saved_copy
パラメータに指定できる値は、次のいずれかです。-
CTX_DOC.SAVE_COPY_FALLBACK:
$D表からドキュメントのコピーをフェッチします。ドキュメントのコピーが$D表に存在しない場合は、データストアからドキュメントをフェッチします。 -
CTX_DOC.SAVE_COPY_ERROR:
$D表からドキュメントのコピーをフェッチします。ドキュメントのコピーが$D表に存在しない場合は、エラー・メッセージを表示します。$D表でドキュメントのコピーが取得できないときに特定のフォールバック・ロジックを実装する場合には、この値を指定してください。 -
CTX_DOC.SAVE_COPY_IGNORE:
ドキュメントを常にデータストアからフェッチします。
-
例
create table tdrbhk01 (id number primary key, text varchar2(4000)); insert into tdrbhk01 values (1, 'Oracle Text adds powerful search and intelligent text management to the Oracle database. Complete. You can search and manage documents, web pages, catalog entries in more than 150 formats in any language. Provides a complete text query language and complete character support. Simple. You can index and search text using SQL. Oracle Text Management can be done using Oracle Enterprise Manager - a GUI tool. Fast. You can search millions of documents, document,web pages, catalog entries using the power and scalability of the database. Intelligent. Oracle Text''s unique knowledge-base enables you to search, classify, manage documents, clusters and summarize text based on its meaning as well as its content. '); create index tdrbhk01x on tdrbhk01(text) indextype is ctxsys.context; create or replace function my_snippet_wrapper( key in varchar2, query in varchar2, radius in number, max_length in number) return varchar2 is buff varchar2(4000); begin buff := ctx_doc.snippet('tdrbhk01x', key, query, '<b>', '<b>', true, '<b>..<b>', radius, max_length); return buff; end; / show errors; select my_snippet_wrapper('1','Oracle', 10, 100) from dual;
次のような結果になります。
CTX_DOC.SNIPPET('TDRBHK01X','1','SEARCH|CLASSIFY') ------------------------------------------------------------------------ Text's unique knowledge-base enables you to <b>search</b>, <b>classify</b>, manage documents, clusters and summarize
制限事項
CTX_DOC.SNIPPET
では、問合せテンプレートの使用はサポートされていません。
CTX_DOC.SNIPPET
をNULL_SECTION_GROUP
で使用すると、コンテキスト内のマークアップ・キーワードが表示されます。ただし、XMLドキュメントでこのプロシージャを使用する場合は制限があります。XML_SECTION_GROUP
またはAUTO_SECTION_GROUP
で使用すると、XML構造は無視され、ユーザーが指定したタグは外されます。したがって、戻される結果には、テキストの前後の部分が含まれることになります。
9.23 THEMES
CTX_DOC.THEMES
プロシージャを使用して、1つのドキュメントに対してテーマ・リストを1つ生成します。各テーマは、指定した結果表またはインメモリーPL/SQL表のいずれかに行として格納できます。
構文1: インメモリー表記憶域
CTX_DOC.THEMES(
index_name IN VARCHAR2, textkey IN VARCHAR2, restab IN OUT NOCOPY THEME_TAB, full_themes IN BOOLEAN DEFAULT FALSE, num_themes IN NUMBER DEFAULT 50, use_saved_copy IN NUMBER DEFAULT CTX_DOC.SAVE_COPY_FALLBACK);
構文2: 結果表記憶域
CTX_DOC.THEMES(
index_name IN VARCHAR2, textkey IN VARCHAR2, restab IN VARCHAR2, query_id IN NUMBER DEFAULT 0, full_themes IN BOOLEAN DEFAULT FALSE, num_themes IN NUMBER DEFAULT 50, use_saved_copy IN NUMBER DEFAULT CTX_DOC.SAVE_COPY_FALLBACK);
-
単一列の主キーの値。
-
コンポジット(複数列)主キーのコード化された仕様。テキストキーがコンポジット・キーの場合は、
CTX_DOC.PKENCODE
プロシージャを使用して、コンポジットtextkey文字列をコード化する必要があります。 -
ドキュメントを含む行のROWID。
主キーとROWIDの識別を切り替えるには、CTX_DOC.SET_KEY_TYPE
を使用します。
- restab
-
このプロシージャが、結果を表またはインメモリーPL/SQL表のいずれかに格納することを指定できます。
結果を表に格納するには、表の名前を指定します。
関連項目:
結果をインメモリー表に格納するには、
THEME_TAB
型のインメモリー表の名前を指定します。THEME_TAB
データ型は、次のように定義されます。type theme_rec is record ( theme varchar2(2000), weight number ); type theme_tab is table of theme_rec index by binary_integer;
操作の前に、
CTX_DOC.THEMES
は、ユーザーが指定したTHEME_TAB
をクリアします。 - query_id
-
restabに挿入した行の識別に使用する識別子を指定します。
- full_themes
-
このプロシージャが、各ドキュメント・テーマに対して単一のテーマを作成するか、親テーマ(全テーマ)の階層型リストを作成するかを指定します。
TRUE
を指定すると、このプロシージャは全テーマを結果表のTHEME
列に書き込みます。FALSE
を指定すると、このプロシージャは単一テーマ情報を結果表のTHEME
列に書き込みます。これはデフォルトです。 - num_themes
-
取り出すテーマの最大数を指定します。たとえば、10を指定すると、ドキュメントのテーマが最初の10個まで戻ります。デフォルトは50です。
0(ゼロ)または
NULL
を指定すると、ドキュメント内の全テーマが戻ります。50を超えるテーマがドキュメントに格納されている場合、概念階層が表示されるのは、最初の50テーマのみです。 - use_saved_copy
-
$D表を参照してドキュメントのコピーをフェッチするかどうかと、$D表でドキュメントのコピーが取得できないときにどんなアクションを実行するかを指定します。
use_saved_copy
パラメータに指定できる値は、次のいずれかです。
-
CTX_DOC.SAVE_COPY_FALLBACK:
$D表からドキュメントのコピーをフェッチします。ドキュメントのコピーが$D表に存在しない場合は、データストアからドキュメントをフェッチします。 -
CTX_DOC.SAVE_COPY_ERROR:
$D表からドキュメントのコピーをフェッチします。ドキュメントのコピーが$D表に存在しない場合は、エラー・メッセージを表示します。$D表でドキュメントのコピーが取得できないときに特定のフォールバック・ロジックを実装する場合には、この値を指定してください。 -
CTX_DOC.SAVE_COPY_IGNORE:
ドキュメントを常にデータストアからフェッチします。
デフォルト値は、CTX_DOC.SAVE_COPY_FALLBACK
です。
例
インメモリー・テーマ
次の例では、ドキュメント1の最初の10テーマを生成し、それをthe_themes
というインメモリー表に格納します。その後、表全体をループし、ドキュメントのテーマを表示します。
declare the_themes ctx_doc.theme_tab; begin ctx_doc.themes('myindex','1',the_themes, num_themes=>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_THEMES
を作成します。
create table CTX_THEMES (query_id number, theme varchar2(2000), weight number);
単一テーマ
リストの各要素が単一テーマである場合、最初の20テーマまでのリストを取得するには、次の文を入力します。
begin
ctx_doc.themes('newsindex','34','CTX_THEMES',1,full_themes => FALSE, num_themes=> 20);
end;
全テーマ
リストの各要素が親テーマの階層リストの場合、トップ20のテーマのリストを取得するには、次の文を入力します。
begin
ctx_doc.themes('newsindex','34','CTX_THEMES',1,full_themes => TRUE, num_ themes=>20);
end;
9.24 TOKENS
このプロシージャを使用して、ドキュメント内のすべてのテキスト・トークンを識別します。戻されるトークンは、索引に挿入されるトークンです。シソーラスのサポートにより、問合せた索引トークンのシノニムまたは上位語を生成できます。この機能は、ドキュメントの分類、ルーティングまたはクラスタ化を行う場合に有効です。
ストップワードは戻されません。セクション・タグは、テキスト・トークンではないため、戻されません。
構文1: インメモリー表記憶域
CTX_DOC.TOKENS(index_name IN VARCHAR2, textkey IN VARCHAR2, restab IN OUT NOCOPY TOKEN_TAB, thes_name IN VARCHAR2 DEFAULT NULL, thes_toktype IN VARCHAR2 DEFAULT 'SYN', use_saved_copy IN NUMBER DEFAULT CTX_DOC.SAVE_COPY_FALLBACK);
構文2: 結果表記憶域
CTX_DOC.TOKENS(index_name IN VARCHAR2, textkey IN VARCHAR2, restab IN VARCHAR2, thes_name IN VARCHAR2 DEFAULT NULL, thes_toktype IN VARCHAR2 DEFAULT 'SYN', query_id IN NUMBER DEFAULT 0, use_saved_copy IN NUMBER DEFAULT CTX_DOC.SAVE_COPY_FALLBACK);
-
単一列の主キーの値。
-
コンポジット(複数列)主キーのコード化された仕様。コンポジットtextkeyをコード化するには、CTX_DOC.PKENCODE プロシージャを使用します。
-
ドキュメントを含む行のROWID。
主キーとROWIDの識別を切り替えるには、CTX_DOC.SET_KEY_TYPEを使用します。
- restab
-
このプロシージャが、結果を表またはインメモリーPL/SQL表のいずれかに格納することを指定できます。
戻されるトークンは、textkeyで指定したドキュメント(または行)の索引に挿入されるトークンです。ストップワードは戻されません。セクション・タグは、テキスト・トークンではないため、戻されません。
- the_name
- シソーラス名を指定します。シソーラスの名前を指定しない場合、シノニムまたは上位語は生成されません。システムのデフォルト・シソーラスを使用するには、
DEFAULT
を指定します。 - thes_toktype
SYN
を指定して、索引トークンのシノニムを生成します。一方、BT
を指定して、索引トークンの上位語を生成します。デフォルトでは、シノニムが生成されます。このパラメータを使用するには、最初にthes_name
パラメータを使用してシソーラス名を指定する必要があります。
トークン表の指定
結果を表に格納するには、表の名前を指定します。トークン表には自由に名前を付けることができますが、次の表に示す名前およびデータ型を持つ列が組み込まれている必要があります。
表9-2 トークン表に必要な列
列名 | 型 | 説明 |
---|---|---|
|
|
|
|
|
テキスト内のトークン文字列。 |
|
|
ドキュメント内のトークンの位置(ドキュメントの開始位置1との相対的な位置)。 |
|
|
トークンの文字の長さ。 |
インメモリー表の指定
結果をインメモリー表に格納するには、TOKEN_TAB
型のインメモリー表の名前を指定します。TOKEN_TAB
データ型は、次のように定義されます。
type token_rec is record (
token varchar2(64), offset number, length number
); type token_tab is table of token_rec index by binary_integer;
操作の前に、CTX_DOC.TOKENS
は、ユーザーが指定したTOKEN_TAB
をクリアします。
- query_id
-
restabに挿入した行の識別に使用する識別子を指定します。
- use_saved_copy
-
$D表を参照してドキュメントのコピーをフェッチするかどうかと、$D表でドキュメントのコピーが取得できないときにどんなアクションを実行するかを指定します。
use_saved_copy
パラメータに指定できる値は、次のいずれかです。
-
CTX_DOC.SAVE_COPY_FALLBACK:
$D表からドキュメントのコピーをフェッチします。ドキュメントのコピーが$D表に存在しない場合は、データストアからドキュメントをフェッチします。 -
CTX_DOC.SAVE_COPY_ERROR:
$D表からドキュメントのコピーをフェッチします。ドキュメントのコピーが$D表に存在しない場合は、エラー・メッセージを表示します。$D表でドキュメントのコピーが取得できないときに特定のフォールバック・ロジックを実装する場合には、この値を指定してください。 -
CTX_DOC.SAVE_COPY_IGNORE:
ドキュメントを常にデータストアからフェッチします。
デフォルト値は、CTX_DOC.SAVE_COPY_FALLBACK
です。
例
インメモリー・トークン
次の例では、ドキュメント1のトークンを生成し、それをインメモリー表に格納して、the_tokens
として宣言します。その後、表全体をループし、ドキュメントのトークンを表示します。
declare the_tokens ctx_doc.token_tab; begin ctx_doc.tokens('myindex','1',the_tokens); for i in 1..the_tokens.count loop dbms_output.put_line(the_tokens(i).token); end loop; end;