CTX_ENTITY PL/SQL パッケージを使用し、ワードおよび句を検索して個人や企業などのカテゴリに分類します。
CTX_ENTITYには、次のストアド・プロシージャおよびファンクションが含まれています。
| 名前 | 説明 |
|---|---|
単一の抽出ルールを抽出ポリシーに追加します。 |
|
抽出されない特定のエンティティ参照またはエンティティ・タイプをマークします。 |
|
追加された抽出ルールを抽出ポリシーにコンパイルします。 |
|
使用する抽出ポリシーを作成します。 |
|
抽出ポリシーを削除します。 |
|
入力ドキュメントで検出されたエンティティを示すXMLドキュメントを生成します。 |
|
抽出ポリシーから単一の抽出ルールを削除します。 |
|
抽出ポリシーからストップ・エンティティを削除します。 |
ADD_EXTRACT_RULEプロシージャは、単一の抽出ルールを抽出ポリシーに追加します。インボーカは、ルールを独自の抽出ポリシーに追加します。抽出ルールは、文全体のスコープを含みます。抽出ルールでは、ルール式のエンティティ・タイプおよびルール演算子を除いて大/小文字を区別する必要があります。ルール追加の順序は重要ではありません。ルールの追加は、CTX_ENTITY.COMPILEが実行されるまで有効ではありません。このプロシージャは、コミットを発行します。
構文
CTX_ENTITY.ADD_EXTRACT_RULE( policy_name IN VARCHAR2, rule_id IN INTEGER, extraction_rule IN VARCHAR2);
ポリシーの名前を指定します。
抽出ポリシー内の一意のルールIDを指定します。ルールIDは0(ゼロ)より大きくする必要があります。
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属性は、最初の逆参照とエンティティのテキストの対応を指定します。
説明のコメントがこのルールと関連付けられます。
このプロシージャを使用して、抽出されない特定のエンティティ参照またはエンティティ・タイプをマークします。インボーカは、独自の抽出ポリシーにストップ・エンティティを追加します。CTX_ENTITY.COMPILEを実行するまで有効になりません。entity_nameとentity_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);
追加されるストップ・エンティティのポリシー名を指定します。
ストップ・エンティティとしてリストするエンティティ名を指定します。entity_typeがNULLの場合、このentity_nameのすべての参照がストップ・エンティティとしてリストされます。大/小文字が区別されます。
entity_nameがNULLの場合、エンティティ・タイプ全体をストップ・エンティティとしてリストするように指定されます。entity_nameがNULLでない場合、<entity_type, entity_name>のみがストップ・エンティティとして指定されます。大文字と小文字は区別されません。最大バイト長は、4000バイトです。
最大バイト長は、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);
このプロシージャは、追加された抽出ルールを抽出ポリシーにコンパイルします。これを使用して、追加されたストップ・エンティティを抽出ポリシーにコンパイルすることもできます。ポリシーにルールまたはストップ・エンティティを追加した場合は、このプロシージャを呼び出す必要があります。
インボーカは、ルールおよびストップ・エンティティを独自の抽出ポリシーにコンパイルします。ユーザーは、追加されたルールまたはストップ・エンティティおよび両方のコンパイルを選択できます。
コンパイル後、エンティティ抽出で使用されているルールとストップ・エンティティが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);
コンパイルされるポリシー名を指定します。
ストップ・エンティティとしてリストするエンティティ名を指定します。entity_typeがNULLの場合、このentity_nameのすべての参照がストップ・エンティティとしてリストされます。大/小文字が区別されます。
オプションは、COMPILE_ALL、COMPILE_RULES、およびCOMPILE_STOP_ENTITIESです。COMPILE_ALLは、ルールおよびストップ・エンティティをコンパイルします。COMPILE_RULESは、ルールのみコンパイルします。COMPILE_STOP_ENTITIESは、ストップ・エンティティのみコンパイルします。
最大バイト長は、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);
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 );
新しい抽出ポリシーの名前を指定します。
レクサー・プリファレンスの名前を指定します。AUTO_LEXERのみがサポートされています。指定しない場合、CTXSYS.DEFAULT_EXTRACT_LEXERが使用されます。index_stemsおよびderiv_stems属性は使用できません。
Oracleから提供されるルールがエンティティ抽出に含まれるかどうかを指定します。falseの場合、自動的な頭字語解決がオフになります。デフォルトはtrueです。
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);
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 );
指定されたポリシーを使用して、抽出を実行します。
抽出を実行する入力ドキュメント。
entity_typeがNULLの場合、このentity_nameのすべての参照がストップ・エンティティとしてリストされます。大/小文字が区別されます。
英語のみがサポートされています。
ドキュメントから抽出されたエンティティのXMLを含むCLOB。
entity_typeがNULLの場合、このentity_nameのすべての参照がストップ・エンティティとしてリストされます。大/小文字が区別されます。
抽出にエンティティタイプのサブセットのみを考慮する場合に指定します。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ドキュメントを生成します。今後の参照のために結果のCLOBをentitiesという表に挿入します。
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>
REMOVE_EXTRACT_RULEプロシージャは、指定されたポリシーからrule_idの抽出ルールを削除します。指定されたポリシーの所有者のみ、ポリシーから抽出ルールを削除できます。CTX_ENTITY.COMPILEの実行後、抽出ルールの削除が有効になります。
構文
CTX_ENTITY.REMOVE_EXTRACT_RULE( policy_name IN VARCHAR2, rule_id IN INTEGER );
例
次の例は、pol1ポリシーからIDが1の抽出ルールを削除します。
exec ctx_entity.remove_extract_rule('pol1', 1);
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 );
指定されたポリシーからstop_entityを削除します。
ストップ・エンティティ・リストから削除される名前を指定します。CTX_ENTITY.ADD_STOP_ENTITYを使用して、あらかじめstop_entityがstop_entityリストに追加されている必要があります。
ストップ・エンティティ・リストから削除されるエンティティのタイプを指定します。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を実行すると、ストップ・エンティティの削除が有効になります。