[Regexのカスタマイズ]オプションを選択すると、「テキストエクスプローラ 正規表現エディタ」ウィンドウが表示されます。このウィンドウから、電話番号・時間・金額など、予め提供されている、さまざまなビルトインの正規表現(regular expression)を選択できます。また、独自の正規表現を定義することもできます。
メモ: [Regexのカスタマイズ]オプションを使用するのは、デフォルトの正規表現の結果が望ましくない場合のみにしてください。たとえば、デフォルトの正規表現で識別できない構造がテキストに含まれている場合などに使用してください。
ヒント: 起動ウィンドウで「言語」オプションを「日本語」・「中国語(簡体字)」・「中国語(繁体字)」のいずれかに設定した場合、正規表現のリストには、選ばれた言語に対応した正規表現が1つだけ含まれます。独自の正規表現を追加したい場合は、その単一の正規表現の後に追加していくことを推奨します。アジア言語は区切り文字がないので、英語などの言語での正規表現を適用すると長い文字列が1つの単語として認識されてしまいます。そのため、各言語に対応した正規表現の前に、独自の正規表現を使用するのは避けてください。
図12.7 テキストエクスプローラ 正規表現エディタ
ウィンドウの上部には、スクリプトエディタボックスが表示され、サンプルテキストの構文解析結果が表示されます。構文解析結果での色は、「正規表現エディタ」に示されている色に対応しています。
• 「行」の最初・前・次・最後に移動するボタンをクリックすると、分析対象のテキストがスクリプトエディタボックスに表示されます。ここで、各行のテキストがどのように構文解析されるのかを確認できます。スクリプトエディタボックスに行番号を直接入力することもできます。
• [列に保存]ボタンをクリックすると、この正規表現によるトークン化の結果が、データテーブルに新しい列として追加されます。正規表現を変更する方法については、正規表現の編集を参照してください。[列]>[ユーティリティ]>[テキストマッチによる列の作成]から正規表現エディタを表示したときは、[列に保存]ボタンは表示されません。
メモ: [列に保存]ボタンをクリックしたときの結果には、正規表現のみがテキストのマッチに使用され、ストップワード・再コード化・語幹抽出、および、句・単語あたりの最小/最大文字数の設定は使用されません。
トークン化に使用する正規表現を追加するには、正規表現のリストの下にある+記号をクリックします。すると、「正規表現ライブラリからの選択」ウィンドウが表示されます。このウィンドウには、予め用意されている正規表現(ビルトインの正規表現)がすべて表示されます。また、直前に「正規表現エディタ」で編集した正規表現も表示されます。予め用意されている正規表現は「ビルトイン」と記されています。分析者が独自に定義した正規表現(カスタムの正規表現)は、保存した名前で表示されます。同じ名前のカスタムの正規表現は、最新のものだけがライブラリに保存されます。
[前回の設定]ボタンをクリックすると、正規表現エディタを前回使用したときの正規表現のリスト([列に保存]ボタンまたは[OK]ボタンをクリックしたときに表示されていたもの)が自動的に追加されます。
このリストから1つまたは複数の正規表現を選択して[OK]をクリックすると、その正規表現がトークン化に使用されるようになります。ライブラリからカスタムの正規表現を削除するには、[選択アイテムを削除]ボタンを使用します。正規表現のライブラリは、ユーザごとに別のJSLファイルとして、「TextExplorer」というディレクトリに保存されます。このディレクトリの場所は、次のとおりです。
• Windows: "C:¥Users¥<ユーザ名>¥AppData¥Roaming¥SAS¥JMP¥TextExplorer¥"
• macOS: "/Users/<ユーザ名>/Library/Application Support/JMP/TextExplorer/"
このファイルは、他のユーザと共有しても構いませんが、直接編集しないでください。編集する場合は、「正規表現エディタ」を使用してください。
トークン化では、「正規表現エディタ」パネルで指定された正規表現が順番に適用されます。適用される順序を変更するには、リストから正規表現を選択して、リストの下にある上矢印または下矢印をクリックしてください。または、リスト内で正規表現をドラッグ&ドロップしても、適用される順序を変更できます。現在選択している正規表現には、青い三角が付きます。正規表現をリストから削除するには、正規表現を選択して、リストの下にあるマイナス記号をクリックしてください。なお、「レフトオーバー」という正規表現は、リストから削除することはできず、常にこのリストの最後に表示されます。
「正規表現エディタ」パネルのリストから正規表現を選択すると、編集可能なフィールドにその正規表現の属性が表示されます。これらのフィールドは、すべてクリックして編集できます。
正規表現には次のような属性があります。
タイトル
現在のウィンドウで各正規表現を識別するための名前を指定します(正規表現ライブラリにも、この名前で表示されます)。
Regex
正規表現(regular expression)の定義を指定します。正規表現にマッチする文字列を取得するため、最低1組の括弧が必要です。
結果
正規表現にマッチしたテキストを、どのように置き換えるかを指定します。置き換えるものとして、静的なテキスト、空白、正規表現にマッチしたテキストなどを指定できます。以下のように定義してください。
– 正規表現にマッチしたテキストを、特定の静的なテキストに置き換えるには、その静的なテキストをそのまま指定します。
– マッチした文字列を無視するには、このフィールドを空白にします。
– 正規表現にマッチした一番外側の括弧の結果を使用するには、このフィールドに「¥1」と指定します。
– 正規表現にマッチした結果全体を使用するには、このフィールドに「¥0」と指定します。
例
(オプション)正規表現の処理の例を、テキストと色を使って記述します。
コメント
(オプション)正規表現の説明や処理を記述します。
色
正規表現にマッチしたテキストに与える色を指定します。スクリプトエディタボックスおよび「例」フィールドにおいて、指定した色が使われます。色を変更するには、矢印ボタンを使用します。
メモ: 「Regex」フィールドの定義が無効の場合は、正規表現リストのその正規表現名の横に赤い×印が表示されます。
自分自身で独自の正規表現を定義したい場合(カスタムの正規表現を定義したい場合)には、以下の手順に従います。
1. 正規表現のリストの下にある+記号をクリックします。
2. 「正規表現ライブラリからの選択」ウィンドウで、[未定義]が選択されていることを確認します。
3. [OK]をクリックします。
4. 「正規表現エディタ」パネルで、正規表現の定義を編集します。
5. 「タイトル」フィールドに、定義した正規表現に対する固有の名前を指定します。
ヒント: 正規表現の定義フィールドを編集するときは、ログウィンドウを開いて見える状態にしておくと便利です。一部のエラーメッセージは、ログウィンドウにのみ表示されます。ログウィンドウを開くには、[表示]>[ログ]を選択します。正規表現のトラブルシューティングについては、https://regexr.com/をはじめ、インターネット上の多くの資料で解説されています。
[単語の区切り文字のリスト]をクリックすると、トークン化処理において単語の区切りと見なす文字のリストを指定できます。区切り文字は、ある1つの単語の先頭文字には使うことができません。ただし、正規表現で許可されていれば、単語の途中にある文字としては含めることはできます。[単語の区切り文字のリスト]をクリックするとウィンドウが表示され、このウィンドウで区切り文字の追加や削除を行えます。デフォルトでは、空白(ホワイトスペース)のみが区切り文字として指定されています。「区切り文字」ウィンドウで、区切り文字のリストに加えた変更を取り消すには、[リセット]ボタンをクリックします。区切り文字のリストに加えた変更は、そのときのトークン化処理にのみ適用されます。
指定した正規表現と、必須の「レフトオーバー」正規表現によって、以下のような処理が行われます。
1. テキストストリームの現在の文字を、区切り文字のリストと比べます。
– 現在の文字が、区切り文字のリストのいずれかと一致したら、その文字を除外し、そこまでの時点で蓄積された一時的な「レフトオーバー」文字列を処理し、次の文字に移動して、step 1を繰り返します。
– 現在の文字が、区切り文字のリストと一致しない場合は、step 2に進みます。
2. 現在の文字から始まる文字列を、指定された正規表現とひとつずつ比較します(「レフトオーバー」の正規表現は除きます)。
– 現在の文字から始まる文字列が、いずれかの正規表現とマッチしたら、以下で述べる一連の処理を実行します。ここまでの一時的な「レフトオーバー」文字列に蓄積された文字を処理します。そして、「結果」フィールドに定義されている文字列を、単語として保存します。最後に、正規表現にマッチした文字列のすぐ後の1文字を、現在の文字に設定します。これらの処理が済んだら、step 1に戻ります。
– 現在の文字から始まる文字列が、「レフトオーバー」以外のどの正規表現にも一致しなかった場合は、step 3に進みます。
3. 現在の文字を一時的な「レフトオーバー」文字列に追加して、テキストストリーム内の次の文字を現在の文字に設定します。step 1に戻ります。
– 一時的な「レフトオーバー」文字列には、他の正規表現に一致するまで、1文字ずつ追加されます。
– 「レフトオーバー」正規表現の「結果」はデフォルトでは空白で、一時的に蓄積された「レフトオーバー」文字列を破棄する設定になっています。
ヒント:
• 「レフトオーバー」正規表現の「結果」を「¥1」に設定した場合は、句読点などを区切り文字に追加することを検討してください。指定した句読点は、結果から除かれます。
• 目的の単語を取得するために、「レフトオーバー」正規表現の結果を「¥1」に変更する代わりに、以下を行うことを検討してください。
– 正規表現ライブラリからより多くの正規表現を追加する。
– カスタムな正規表現(自分自身の独自な正規表現)を定義する。
上記のような処理は、データテーブルの各行において、テキストの最後まで実行されます。
[列に保存]ボタンをクリックすると、正規表現によるトークン化の結果が、データテーブルに新しい列として追加されます。新しい列は、データタイプが「文字」で、「テキストエクスプローラ」起動ウィンドウで[テキスト列]に指定した名前に、番号が追加されたものになります。[列]>[ユーティリティ]>[テキストマッチによる列の作成]を指定して、正規表現ユーティリティを直接起動して使用することもできます。『JMPの使用法』のテキストマッチによる列の新規作成を参照してください。
メモ: 正規表現を独自に定義した場合、適用されるトークン化は、元のそのままのテキストに対して、その正規表現を適用したものです。小文字に変換したテキストに対する結果ではない点に注意してください。
「テキストエクスプローラ 正規表現エディタ」ウィンドウで[OK]をクリックすると、次の一連の処理が行われます。
1. 「テキストエクスプローラ 正規表現エディタ」ウィンドウで独自に定義した、カスタムの正規表現が、正規表現ライブラリに保存されます。
注意: ユーザーが独自に定義した、カスタムの正規表現がライブラリに保存されるのは、正規表現を定義した後に[OK]をクリックしたときのみです。次にライブラリを使用できるのは、最後に保存した正規表現だけです。正規表現ライブラリに定義した正規表現を保存したい場合は、固有の名前を付けてください。以前の正規表現を後で使用したい場合は、「テキストエクスプローラ」レポートウィンドウで、スクリプトを保存することもできます。
2. 「テキストエクスプローラ」レポートが生成されます。このレポートに、指定した正規表現の設定を使ってテキストをトークン化した結果が表示されます。