プライマリ・コンテンツに移動
Oracle® Textリファレンス
12cリリース1 (12.1)
B71316-03
目次へ移動
目次
索引へ移動
索引

前
次

10 CTX_ENTITYパッケージ

CTX_ENTITY PL/SQL パッケージを使用し、ワードおよび句を検索して個人や企業などのカテゴリに分類します。

CTX_ENTITYには、次のストアド・プロシージャおよびファンクションが含まれています。

名前 説明

ADD_EXTRACT_RULE

単一の抽出ルールを抽出ポリシーに追加します。

ADD_STOP_ENTITY

抽出されない特定のエンティティ参照またはエンティティ・タイプをマークします。

COMPILE

追加された抽出ルールを抽出ポリシーにコンパイルします。

CREATE_EXTRACT_POLICY

使用する抽出ポリシーを作成します。

DROP_EXTRACT_POLICY

抽出ポリシーを削除します。

EXTRACT

入力ドキュメントで検出されたエンティティを示すXMLドキュメントを生成します。

REMOVE_EXTRACT_RULE

抽出ポリシーから単一の抽出ルールを削除します。

REMOVE_STOP_ENTITY

抽出ポリシーからストップ・エンティティを削除します。

10.1 ADD_EXTRACT_RULE

ADD_EXTRACT_RULEプロシージャは、単一の抽出ルールを抽出ポリシーに追加します。インボーカは、ルールを独自の抽出ポリシーに追加します。抽出ルールは、文全体のスコープを含みます。抽出ルールでは、ルール式のエンティティ・タイプおよびルール演算子を除いて大/小文字を区別する必要があります。ルール追加の順序は重要ではありません。ルールの追加は、CTX_ENTITY.COMPILEが実行されるまで有効ではありません。このプロシージャは、コミットを発行します。

構文

CTX_ENTITY.ADD_EXTRACT_RULE(
  policy_name                 IN VARCHAR2,
  rule_id                     IN INTEGER,
  extraction_rule             IN VARCHAR2);
policy_name

ポリシーの名前を指定します。

rule_id

抽出ポリシー内の一意のルールIDを指定します。ルールIDは0(ゼロ)より大きくする必要があります。

extraction_rule

XML形式のルール・テキストは、言語、式、および抽出するエンティティを指定します。ルール・テキストは、次のXMLスキーマに準拠します。

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="rule">
  <xsd:sequence>
    <xsd:element name="expression" type="xsd:string"/>
    <xsd:complexType>
      <xsd:attribute name="refid" type="xsd:positiveInteger"/>
    </xsd:complexType>
    <xsd:element name="comments type="xsd:string" default="\0"/>
  </xsd:sequence>
  </xsd:attribute name="language" type="xsd:string" default="ALL"/>
</xsd:element>
</xsd:schema>

詳細は次のとおりです。

  • ルール・タグの言語属性は、ルールに適用される言語を指定します。ルールは、指定された言語のドキュメントにのみ適用されます。言語属性は、省略することも、ルールがすべてのドキュメントに一致する場合には「ALL」に設定することもできます。

  • 式タグには、マッチングで使用されるposix正規表現が含まれます。

  • コメント・タグを使用すると、ユーザーはコメントをこのユーザー・ルールと関連付けることができます。

  • タイプ・タグは、抽出されたエンティティ・テキストを所定のエンティティ・タイプに割り当てます。タイプ・タグのrefid属性は、正規表現のどの逆参照が実際のエンティティに対応するかを指定します。エンティティ・タイプはOracleが提供するタイプのいずれか、これは表10-1にリストされています。または、ユーザー定義のタイプでもかまいません。その場合は、文字xを接頭辞として指定する必要があります。

表10-1 提供されるエンティティ・タイプ

提供されるエンティティ・タイプ 説明

building

特定の建物

ホワイトハウス

city

ニューヨーク

company

オラクル社

country

米国

currency

ドル

date

7月4日

day

月曜日、火曜日

email_address

person@example.com

geo_political

政治組織または戦略組織

国際連合

holiday

国別の休日の名前

労働者の日

location_other

他のタイプの場所

大西洋

month

6月、7月

non_profit

非営利組織

赤十字社

organization_other

他のタイプの組織

最高裁判所

percent

数字と%で表される

10%

person_jobtitle

肩書で参照される個人

社長、教授

person_name

名前で参照される個人

John Doe

person_other

他のタイプの個人

他のタイプの個人(犯罪者など)

phone_number

(123)-456-7890

postal_address

Redwood Shores, CA

product

Oracle Text

北アメリカ

ssn

社会保障番号

123-45-6789

state

州や県

カリフォルニア

time_duration

時間の長さ

10秒

tod

時刻

午前8時

url

Webアドレス

www.example.com

zip_code

郵便番号

CA 94065

例1

次の例は、抽出ルールの定義方法およびエンティティ抽出ポリシーへの関連付け方法を示しています。次に、ドキュメントの電子メール・アドレスを検索する簡単な抽出ルールを定義します。

begin
  ctx_entity.add_extract_rule('pol1', 1,
  '<rule>
    <expression>email is (\w+@\w+\.\w+)</expression>
    <type refid = "1">email_address</type>
   </rule>');
end;
/

詳細は次のとおりです。

  • 「My email address is jdoe@company.com」という文の場合、この抽出ルールはemail_addressエンティティ・タイプとして「jdoe@company.com」を抽出します。

  • ルールがpol1という抽出ポリシーに追加されます。

  • ルールIDに1が使用されて、ルールが追加されます。

  • このルールのXMLの説明は、次のとおりです。

    • ルール・タグの言語属性は空のままです。このため、ルールがすべての言語に適用されます。

    • 式タグは、抽出で使用する正規表現を含みます。

    • タイプ要素の値とタイプ・タグのrefid属性は、最初の逆参照とエンティティのテキストの対応を指定します。

例2

次に、ドキュメントの電話番号を検索する簡単な抽出ルールを定義します。

begin
  ctx_entity.add_extract_rule('pol1', 2,
  '<rule language="english">
     <expression>(\(d{3}\) \d{3}-\d{3}-\d{4})</expression>
     <comments>Rule for phone numbers</comments>
     <type refid="1">email_address</type>
   </rule>';
end;
/

詳細は次のとおりです。

  • 「I can be contacted at (123) 456-7890」という文の場合、この抽出ルールはphone_numberエンティティ・タイプとして「(123) 456-7890」を抽出します。

  • ルールがpol1という抽出ポリシーに追加されます。

  • ルールIDに2が使用されて、ルールが追加されます。

  • ルールのXMLの説明は、次のとおりです。

    • ルール・タグの言語属性はenglishに設定されます。このため、ルールが英語のドキュメントにのみ適用されます。

    • 式タグは、抽出で使用する正規表現を含みます。

    • タイプ要素の値とタイプ・タグのrefid属性は、最初の逆参照とエンティティのテキストの対応を指定します。

    • 説明のコメントがこのルールと関連付けられます。

10.2 ADD_STOP_ENTITY

このプロシージャを使用して、抽出されない特定のエンティティ参照またはエンティティ・タイプをマークします。インボーカは、独自の抽出ポリシーにストップ・エンティティを追加します。CTX_ENTITY.COMPILEを実行するまで有効になりません。entity_nameentity_typeのいずれか一方をNULLにできますが、両方をそう設定することはできません。あるストップ・エンティティ別のストップ・エンティティのサブセットである場合、CTX_ENTITY.COMPILEの後にサブセットとしてマークされ、抽出には使用されません。このプロシージャは、コミットを発行します。

構文

CTX_ENTITY.ADD_STOP_ENTITY(
  policy_name                 IN VARCHAR2,
  entity_name                 IN INTEGER,
  entity_type                 IN VARCHAR2 DEFAULT NULL,
  comments                    IN VARCHAR2 DEFAULT NULL);
policy_name

追加されるストップ・エンティティのポリシー名を指定します。

entity_name

ストップ・エンティティとしてリストするエンティティ名を指定します。entity_typeNULLの場合、このentity_nameのすべての参照がストップ・エンティティとしてリストされます。大/小文字が区別されます。

entity_type

entity_nameNULLの場合、エンティティ・タイプ全体をストップ・エンティティとしてリストするように指定されます。entity_nameNULLでない場合、<entity_type, entity_name>のみがストップ・エンティティとして指定されます。大文字と小文字は区別されません。最大バイト長は、4000バイトです。

comments

最大バイト長は、4000バイトです。

次の例は、すべての個人に対応するストップ・エンティティを追加します。コンパイル後、抽出でpersonエンティティ・タイプの参照はレポートされません。

exec ctx_entity.add_stop_entity('pol1', NULL, 'person');

次の例は、<'person', 'john doe'>に対応するストップ・エンティティを追加します。コンパイル後、抽出で<'person', 'john doe'>のペアはレポートされなくなります。このストップ・エンティティは、実際には最初に追加されたストップ・エンティティのサブセットです。CTX_USER_EXTRACT_STOP_ENTITIESビューでサブセットとマークされ、抽出では使用されません。

exec ctx_entity.add_stop_entity('pol1', 'john doe', 'person');

次の例は、fordのすべての参照に対応するストップ・エンティティを追加します。コンパイル後、エンティティ・タイプの参照に関係なく、抽出でfordエンティティの参照がレポートされません。たとえば、fordと個人が対応するルールの場合、抽出でこの一致はレポートされません。fordと企業が対応するルールの場合も、抽出でこの一致はレポートされません。

exec ctx_entity.add_stop_entity('pol1', 'ford', NULL);

10.3 COMPILE

このプロシージャは、追加された抽出ルールを抽出ポリシーにコンパイルします。これを使用して、追加されたストップ・エンティティを抽出ポリシーにコンパイルすることもできます。ポリシーにルールまたはストップ・エンティティを追加した場合は、このプロシージャを呼び出す必要があります。

インボーカは、ルールおよびストップ・エンティティを独自の抽出ポリシーにコンパイルします。ユーザーは、追加されたルールまたはストップ・エンティティおよび両方のコンパイルを選択できます。

コンパイル後、エンティティ抽出で使用されているルールとストップ・エンティティがCTX_USER_EXTRACT_RULESおよびCTX_USER_EXTRACT_STOP_ENTITIESビューに表示されます。

構文

CTX_ENTITY.COMPILE(
  policy_name                 IN VARCHAR2,
  compile_choice              IN NUMBER DEFAULT COMPILE_ALL,
  locking                     IN NUMBER DEFAULT LOCK_NOWAIT_ERROR);
policy_name

コンパイルされるポリシー名を指定します。

compile_choice

ストップ・エンティティとしてリストするエンティティ名を指定します。entity_typeNULLの場合、このentity_nameのすべての参照がストップ・エンティティとしてリストされます。大/小文字が区別されます。

オプションは、COMPILE_ALLCOMPILE_RULES、およびCOMPILE_STOP_ENTITIESです。COMPILE_ALLは、ルールおよびストップ・エンティティをコンパイルします。COMPILE_RULESは、ルールのみコンパイルします。COMPILE_STOP_ENTITIESは、ストップ・エンティティのみコンパイルします。

locking

最大バイト長は、4000バイトです。別のCOMPILEが同じポリシーですでに実行されている場合のCOMPILEの対応を構成します。

lockingのオプションは、次のとおりです。

  • CTX_ENTITY.LOCK_WAIT

    別のコンパイルが実行されている場合は、実行中のコンパイルが完了するまで待機してからコンパイルを開始します。(ロックを取得できない場合は無制限に待機し、maxtime設定は無視されます。)

  • CTX_ENTITY.LOCK_NOWAIT

    別のコンパイルが実行されている場合は、エラーなしで即時に戻ります。

  • CTX_ENTITY.LOCK_NOWAIT_ERROR

    別の同期化が実行されている場合は、「DRG-51313: DMLまたは最適化ロックを待機中にタイムアウトになりました」というエラーが発生します。

次の例は、デフォルト設定を使用してポリシーをコンパイルします。

exec ctx_entity.compile('pol1');

次の例は、ポリシーのストップ・エンティティのみコンパイルします。

exec ctx_entity.compile('pol1', CTX_ENTITY.COMPILE_STOP_ENTITIES);

次の例は、ルールおよびストップ・エンティティをコンパイルします。ロックが存在する場合、ファンクションが即時に戻されますが、エラーは発生しません。

exec ctx_entity.compile('pol1', CTX_ENTITY.COMPILE_ALL,
                                CTX_ENTITY.LOCK_NOWAIT);

10.4 CREATE_EXTRACT_POLICY

CREATE_EXTRACT_POLICYプロシージャは、使用する抽出ポリシーを作成します。ポリシーの所有者のみ、このポリシーを使用できます。

構文

CTX_ENTITY.CREATE_EXTRACT_POLICY(
  policy_name                   IN VARCHAR2,
  lexer                         IN VARCHAR2 DEFAULT NULL,
  include_supplied_rules        IN BOOLEAN DEFAULT TRUE,
  include_supplied_dictionary   IN BOOLEAN DEFAULT TRUE
);
policy_name

新しい抽出ポリシーの名前を指定します。

lexer

レクサー・プリファレンスの名前を指定します。AUTO_LEXERのみがサポートされています。指定しない場合、CTXSYS.DEFAULT_EXTRACT_LEXERが使用されます。index_stemsおよびderiv_stems属性は使用できません。

include_supplied_rules

Oracleから提供されるルールがエンティティ抽出に含まれるかどうかを指定します。falseの場合、自動的な頭字語解決がオフになります。デフォルトはtrueです。

include_supplied_dictionary

Oracleから提供されるディクショナリがエンティティ抽出に含まれるかどうかを指定します。デフォルトはtrueです。

次の例は、デフォルト設定を使用した抽出ポリシーを作成します。デフォルトでは、ルールとディクショナリなどのOracleから提供される機能が使用可能です。

exec CTX_ENTITY.CREATE_EXTRACT_POLICY('pol1');

次の例は、明示的に特定のパラメータを指定する抽出ポリシーを作成します。使用するレクサーをmylexとして指定しており、それをAUTO_LEXERプリファレンスとして実行する必要があります。Oracleが提供するルールも含まれますが、Oracleが提供するディクショナリは無効化されます。

exec CTX_ENTITY.CREATE_EXTRACT_POLICY('pol2', 'mylex', TRUE, FALSE);

10.5 DROP_EXTRACT_POLICY

DROP_EXTRACT_POLICYプロシージャは、抽出ポリシーを削除します。ポリシーの所有者のみ、これらのポリシーを削除できます。このプロシージャは、コミットを発行します。

構文

CTX_ENTITY.DROP_EXTRACT_POLICY(
  policy_name                 IN VARCHAR2
);
policy_name

削除する抽出ポリシーの名前を指定します。

次の例は、pol2抽出ポリシーを削除します。

exec ctx_entity.drop_extract_policy('pol2');

10.6 EXTRACT

EXTRACTプロシージャは、指定されたドキュメントのエンティティ抽出を実行し、ドキュメントで検出されたエンティティを示すXMLドキュメントを生成します。XMLドキュメントは、エンティティのテキスト、タイプ、およびドキュメント内の場所を提供します。抽出には、指定された抽出ポリシーで定義された設定(ルール、ストップ・エンティティ、ディクショナリ)を使用します。

エンティティ・タイプ名の結果は大文字になります。インボーカは、独自の抽出ポリシーを使用して抽出を実行できます。

実行前に、CTX_ENTITY.COMPILEを発行する必要があります。

構文

CTX_ENTITY.EXTRACT(
  policy_name                 IN VARCHAR2,
  document                    IN CLOB,
  language                    IN VARCHAR2,
  result                      IN OUT NOCOPY CLOB,
  entity_type_list            IN CLOB DEFAULT NULL
);
policy_name

指定されたポリシーを使用して、抽出を実行します。

document

抽出を実行する入力ドキュメント。

entity_typeNULLの場合、このentity_nameのすべての参照がストップ・エンティティとしてリストされます。大/小文字が区別されます。

language

英語のみがサポートされています。

result

ドキュメントから抽出されたエンティティのXMLを含むCLOB

entity_typeNULLの場合、このentity_nameのすべての参照がストップ・エンティティとしてリストされます。大/小文字が区別されます。

entity_type_list

抽出にエンティティタイプのサブセットのみを考慮する場合に指定します。entity_type_listは、カンマで区切られたリストです。entity_type_listが指定されない場合、エンティティ抽出にすべてのエンティティタイプが考慮されます。

次の例は、サンプルのドキュメントのエンティティ抽出の結果を示しています。pol1という抽出ポリシーを作成した場合、入力ドキュメントは次のようになります。

Sam A. Schwartz retired as executive vice president of Hupplewhite INc. in New York.

次に、ctx_entity.extractプロシージャをコールして、このドキュメントのエンティティを含むXMLドキュメントを生成します。今後の参照のために結果のCLOBentitiesという表に挿入します。

declare
  myresults clob;
begin
  select txt into mydoc from docs where id=1;
  ctx_entity.extract('p1', mydoc, null, myresults);
  insert into entities values(1, myresults);
  commit;
  end;
/

これで、entities表から抽出されたエンティティを調査できます。エンティティの分類に使用されるソースとともに、各エンティティに入力ドキュメントの場所がタグ付けされます。

<entities>
<entity id="0" offset="75" length="8" source="SuppliedDictionary">
<text>New York</text>
<type>city</type>
</entity>
<entity id="1" offset="55" length="16" source="SuppliedRule">
<text>Hupplewhite Inc.</text>
<type>company</type>
</entity>
<entity id="2" offset="27" length="24" source="SuppliedDictionary">
<text>Sam A. Schwartz</text>
<type>person_name</type>
</entity>
<entity id="4" offset="75" length="8" source="SuppliedDictionary">
<text>New York</text>
<type>state</type>
</entity>
</entities>

10.7 REMOVE_EXTRACT_RULE

REMOVE_EXTRACT_RULEプロシージャは、指定されたポリシーからrule_idの抽出ルールを削除します。指定されたポリシーの所有者のみ、ポリシーから抽出ルールを削除できます。CTX_ENTITY.COMPILEの実行後、抽出ルールの削除が有効になります。

構文

CTX_ENTITY.REMOVE_EXTRACT_RULE(
  policy_name                 IN VARCHAR2,
  rule_id                     IN INTEGER
);
policy_name

指定されたポリシーから抽出ルールを削除します。

rule_id

削除する抽出ルールのルールIDを指定します。

次の例は、pol1ポリシーからIDが1の抽出ルールを削除します。

exec ctx_entity.remove_extract_rule('pol1', 1);

10.8 REMOVE_STOP_ENTITY

REMOVE_STOP_ENTITYプロシージャは、抽出ポリシーからストップ・エンティティを削除します。指定されたポリシーの所有者のみ、ポリシーからストップ・エンティティを削除できます。ストップ・エンティティの削除は、CTX_ENTITY.COMPILEの実行後に有効になります。entity_nameまたはentity_typeにNULLを指定できますが、両方には指定できません。

構文

CTX_ENTITY.REMOVE_STOP_ENTITY(
  policy_name                 IN VARCHAR2,
  entity_name                 IN INTEGER DEFAULT NULL,
  entity_type                 IN VARCHAR2 DEFAULT NULL
);
policy_name

指定されたポリシーからstop_entityを削除します。

entity_name

ストップ・エンティティ・リストから削除される名前を指定します。CTX_ENTITY.ADD_STOP_ENTITYを使用して、あらかじめstop_entitystop_entityリストに追加されている必要があります。

entity_type

ストップ・エンティティ・リストから削除されるエンティティのタイプを指定します。CTX_ENTITY.ADD_STOP_ENTITYを使用して、あらかじめstop_entityがストップ・エンティティ・リストに追加されている必要があります。

exec ctx_entity.remove_stop_entity('pol1', NULL, 'person_name');

例の文は、pol1ポリシーからentity_type person_nameのすべての参照に対応するストップ・エンティティを削除します。実行後、このストップ・エンティティは、CTX_USER_EXTRACT_STOP_ENTITIESビューで「to be deleted」としてマークされます。ユーザーがCTX_ENTITY.COMPILEを実行すると、ストップ・エンティティの削除が有効になります。