この項の例では、ユーザー定義のルールを使用して、新しいエンティティ・タイプを作成する方法を示します。ルールは、正規表現ベースの構文を使用して定義されます。ルールが抽出ポリシーに追加され、ポリシーが使用されると適用されます。
ルールは、株式指数などの増加を識別します。増加を表現する方法は多数あります。ルールは、次のいずれかの式に一致させる必要があります。
climbed by 5% increased by over 30 percent jumped 5.5%
したがって、これらいずれかに一致する正規表現を作成し、新しいタイプのエンティティを作成します。ユーザー定義のエンティティは、xの文字で開始する必要があるため、次のようにエンティティxPositiveGainをコールします。
ctx_entity.add_extract_rule( 'mypolicy', 1, '<rule>' || '<expression>' || '((climbed|gained|jumped|increasing|increased|rallied)' || '( (by|over|nearly|more than))* \d+(\.\d+)?( percent|%))' || '</expression>' || '<type refid="1">xPositiveGain</type>' || '</rule>');
この例では、refid
を使用することに注意してください。これにより、正規表現内のカッコのペアを参照することで、正規表現のどの部分が実際に一致するかがわかります。この場合は、エンティティ式が必要なため、最も外側(および最初に出現する)カッコ(refid=1
)になります。
この場合は、ポリシーをCTX_ENTITY.COMPILE
でコンパイルする必要があります。
ctx_entity.compile('mypolicy');
これにより、従来どおりそれを使用できます。
ctx_entity.extract('mypolicy', mydoc, null, myresults)
この(省略した)出力は次のとおりです。
<entities> ... <entity id="6" offset="72" length="18" source="UserRule" ruleid="1"> <text>climbed by over 5%</text> <type>xPositiveGain</type> </entity> </entities>
最後に、別のユーザー定義のエンティティを追加しますが、この場合は辞書を使用しています。Dow Jonesの個別平均をタイプxIndex
のエンティティとして認識するとします。S&P 500も同様に追加します。これを実行するには、次を含むXMLファイルを作成します。
<dictionary> <entities> <entity> <value>dow jones industrial average</value> <type>xIndex</type> </entity> <entity> <value>S&P 500</value> <type>xIndex</type> </entity> </entities> </dictionary>
このファイルでは大文字/小文字は重要でありませんが、"S&P"の"&"をXMLエンティティ&
としてどのように指定する必要があるか注意してください。そうでない場合、XMLは有効になりません。
このXMLファイルは、CTXLOAD
ユーティリティを使用してシステムにロードされます。ファイルがdict.load
と呼ばれる場合は、次のコマンドを使用します。
ctxload -user username/password -extract -name mypolicy -file dict.load
CTX_ENTITY.COMPILE
を使用してポリシーをコンパイルする必要があります。