正規表現の定義

固有表現抽出時、正規表現の特定に使用される正規表現定義の編集またはそれへの追加が必要な場合があります。これは「拡張リソース」タブの 「正規表現の定義」 セクションで行われます。 詳しくは、拡張リソースについてのトピックを参照してください。

ファイルはいくつかのセクションに分割されます。最初のセクションは [macros] です。このセクションのほか、固有表現ごとにセクションが存在する場合があります。このファイルにセクションを追加できます。各セクション内で、規則には番号が付けられています (regexp1regexp2、など)。これらの規則は 1–n の順に番号付けされます。番号が欠けていると、このファイルの処理がすべて一時停止します。

エンティティーが言語に依存する場合があります。構成ファイルの言語パラメーターの値が 0 以外の場合、エンティティーは言語に依存すると見なされます。詳しくは、構成のトピックを参照してください。 エンティティーが言語に依存する場合、[english/PhoneNumber] のようにセクション名の前に言語を示す必要があります。PhoneNumber エンティティーの言語の値に 2 が指定されている場合、このセクションには英語の電話番号にのみ適用される規則が含まれます。

重要: エディターでこのファイルや他のファイルに変更を行い、抽出エンジンが必要に応じて機能しない場合、ツールバーの 「元のものにリセット」 オプションを使用して、ファイルを付属の下の内容に戻します。このファイルは、正規表現に対する特定のレベルの親密度が必要です。この領域においてさらに支援が必要な場合、IBM® Corp. にご連絡ください。

特殊文字。[] {} () \ * + ? | ^ $

以下の特殊文字を除くすべての文字はそれ自身に一致します。これらの特殊文字は、表現内の特別な目的に使用されます。.[{()¥*+?|^$これらの文字をその文字として使用するには、定義で文字の前にバックスラッシュ (¥) を追加する必要があります。

例えば、Web アドレスを抽出しようとしている場合、終止符はエンティティーにとって非常に重要な文字であるため、次のようにバックスラッシュを追加する必要があります。

     www¥.[a-z]+¥.[a-z]+

繰り返し演算子および識別子: ? + * {}

定義をより柔軟性のあるものにするために、正規表現に標準的なワイルドカードをいくつか使用できます。使用できるのは * ? +

  • アスタリスク * は、0 以上の先行文字列があることを示します。例えば、ab*c は、「ac」、「abc」、「abbbc」などに一致します。
  • プラス記号 + は、1 つ以上の先行文字列があることを示します。例えば、ab+c は、「abc」、「abbc」、「abbbc」などに一致しますが、「ac」には一致しません。
  • 疑問符 ? 0 または 1 つの先行文字列があることを示します。例えば、modell?ing は、「modeling」、および「modeling」のどちらにも一致します。
  • 繰り返し制限を示す中カッコ {} は、繰り返しの境界を示します。例を次に示します。

    [0-9]{n} は、ちょうど n 回繰り返された数値に一致します。例えば、[0-9]{4} は「1998」に一致し、「33」および「19983」には一致しません。

    [0-9]{n} は、 n 回以上繰り返された数値に一致します。例えば、[0-9]{3,} は「199」または「1998」に一致しますが「19」には一致しません。

    [0-9]{n,m} は、n から m 回繰り返された数値に一致します。例えば、[0-9]{3,5}199”、”1998”、“19983”と一致しますが、“19”や“199835”とは一致しません。

任意のスペースおよびハイフン

定義内に任意のスペースを追加したい場合があります。例えば、「uruguayan pesos」、「uruguayan peso」、「uruguay pesos」、「uruguay peso」、「pesos」または「peso」などの通貨を抽出したい場合、スペースで区切られた 2 つの単語があるという事実に対処する必要があります。この場合、この定義は (uruguayan |uruguay )?pesos? として記述されます。pesos/peso と共に使用する場合、uruguayan または uruguay の後にはスペースが続くため、任意のスペースは、任意の行列 (uruguayan |uruguay ) 内で定義される必要があります。(uruguayan|uruguay)? pesos? のように任意の行列内にスペースがない場合、スペースが必要であるため「pesos」または「peso」とは一致しません。

リスト内にハイフンを含む一連の文字を探している場合、ハイフンを最後に定義する必要があります。例えば、コンマ (,) またはハイフン (-) を検索する場合、[,-] を使用し、[-,] は決して使用しません。

リストおよびマクロの文字列の順序

短い行列の前に最も長い行列を定義する必要があります。短い行列に一致があるため、最も長い行列が読み取られなくなるためです。例えば、billion”または“bill”という文字列を検索している場合、billion” を“bill”の前に定義する必要があります。つまり、(billion|bill) ではなく、(bill|billion) となります。マクロは一連の文字列であるため、これはマクロにも適用されます。

定義セクションの規則の順序

1 行ごとに 1 つの規則を定義します。各セクション内で、規則には番号が付けられています (regexp1regexp2、など)。これらの規則は 1–n の順に番号付けされます。番号が欠けていると、このファイルの処理がすべて一時停止します。エントリーを無効にするには、正規表現の定義に使用する各行の初めに # 記号を追加します。エントリーを有効にするには、行の前の # 文字を削除します。

各セクションで、確実に処理するために、最も具体的な規則を最も一般的な規則の前に定義する必要があります。例えば、「month year」の形式と「month」の形式で日付を検索したい場合、「month year」の規則を「month」の規則の前に定義する必要があります。次に、その定義を示します。

     #@# January 1932
     regexp1=$(MONTH),? [0-9]{4}

     #@# January
     regexp2=$(MONTH)

そして、次のようには定義してはいけません。

     #@# January
     regexp1=$(MONTH)

     #@# January 1932
     regexp2=$(MONTH),? [0-9]{4}

規則でのマクロの使用

いくつかの規則で特定の行列を使用している場合、マクロを使用できます。この行列の定義を変更する必要がある場合、該当する箇所を一度だけ変更する必要があり、それを参照するすべての規則を変更する必要はありません。例えば、次のようなマクロがあるとします。

     MONTH=((january|february|march|april|june|july|august|september|october|
     november|december)|(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)(¥.)?)

マクロの名前を参照する場合、必ず $() で囲みます。例:regexp1=$(MONTH)

すべてのマクロは [macros] で定義する必要があります。