# T-Swooshアルゴリズム

このシナリオでは、Jaro-Winklerマッチングメソッドを*lname*カラムと*fname*カラムに使って、入力ファイル内のカラムを比較する基本的なジョブについて説明します。次に、出力レコードを次の出力フローにグルーピングします。

* [Uniques] (一意): グループサイズ(レコードで計算された最小距離)が*1*に等しいレコードをリスト表示します。

* [Matches] (マッチング): グループのクオリティが[Confident match threshold] (信頼できるマッチングしきい値)フィールドで定義したしきい値と同等かそれ以上のレコードをリスト表示します。

* [Suspects] (サスペクト): グループのクオリティが[Confident match threshold] (信頼できるマッチングしきい値)フィールドで定義したしきい値を下回るレコードをリスト表示します。

グループのクオリティは、グループのすべてのレコードペア間で計算された最小距離です。

このシナリオは、Talend Data Management Platform、Talend Big Data Platform、Talend Real-Time Big Data Platform、Talend Data Services Platform、Talend Data Fabricにのみ適用されます。

情報メモ重要: Apache Spark BatchコンポーネントはT-Swooshアルゴリズムをサポートしていないので、このシナリオでは標準コンポーネントを使用します。

## ジョブを設定

### 手順

1. tFixedFlowInputコンポーネント、tMatchGroupコンポーネント、および3つのtLogRowコンポーネントを[Palette] (パレット)からデザインワークスペースにドロップします。
2. [Main] (メイン)リンクを使ってtFixedFlowInputをtMatchGroupに接続します。
3. tMatchGroupコンポーネントをクリックして、[Advanced settings] (詳細設定)ビューで[Separate output] (出力を分割する)チェックボックスをオンにします。
4. [Uniques] (ユニーク)、[Matches] (マッチング)、および[Suspects] (サスペクト)リンクを使って、tMatchGroupを3つのtLogRowコンポーネントに接続します。

   ![tFixedFlowInputコンポーネント、tMatchGroupコンポーネント、tLogRowコンポーネントを使ったジョブ。](https://help.qlik.com/talend/ja-JP/data-matching/Resources/images/tMatchGroup_Job_t-Swoosh.png)

## 入力コンポーネントを設定

### このタスクについて

入力データには次の7つのカラムが含まれています: *lname*、*fname*、*middle\_name*、*address*、*city*、*state\_province*、*postal\_code*。データには、重複、名前のスペルの相違や間違い、同一顧客に異なる情報などの問題があります。

### 手順

1. tFixedFlowInputコンポーネントをダブルクリックし、[Basic settings] (基本設定)ビューを開きます。
2. [Built-in] (組み込み)を選択して、[Edit Schema] (スキーマを編集)の横にある[…]ボタンをクリックします。
3. 7つのカラムを定義し、[OK]をクリックします。
4. [Use Inline Content(delimited file)] (インラインコンテンツを使用: 区切りファイル)を選択します。
5. [Row Separator] (行区切り)フィールドと[Field Separator] (フィールド区切り)フィールドに入力します。
6. 入力データを[Content] (コンテンツ)フィールドに入力します。

## tMatchGroupコンポーネントを設定する

### 手順

1. tMatchGroupコンポーネントをクリックして、[Basic settings] (基本設定)ビューを表示します。
2. [Matching Algorithm] (マッチングアルゴリズム)リストでT-Swooshを選択します。
3. [Sync columns] (カラムを同期)をクリックして、前のコンポーネントからスキーマを取得します。
4. [Edit schema] (スキーマを編集)ボタンをクリックして入力および出力スキーマを表示し、必要に応じて出力スキーマに変更を施します。

   このコンポーネントの出力スキーマには、読み取り専用の出力標準カラムがあります。詳細は、[tMatchGroupの標準プロパティ](https://help.qlik.com/talend/en-US/data-matching/8.0/tmatchgroup-standard-properties)をご覧ください。
5. OKをクリックしてダイアログボックスを閉じます。
6. [Advanced settings] (詳細設定)タブをクリックし、次のチェックボックスをオンにします。
   1. [Separate output] (別の出力)

      コンポーネントには、[Uniques] (一意)、[Matches] (マッチング) 、[Suspects] (サスペクト)という3つの個別の出力フローがあります。

      このチェックボックスをオンにしていないと、tMatchGroupコンポーネントに含まれる出力フローは1つだけとなり、そこにすべての出力データがまとめられます。シナリオサンプルは、Identificationのセクションで*同じ機能キーを持つ出力フロー重複レコード内でカラムを比較し、グルーピングする*をご覧ください。
   2. [Sort the output data by GID] (出力データをGIDでソート)
   3. [Output distance details] (距離の詳細を出力)
   4. [Display detailed labels] (詳細ラベルの表示)
   5. ウィザードオープン時にマッチング計算を無効化
7. [Configure match rules] (マッチングルールの設定)の横にある[...]ボタンをクリックし、コンポーネントの設定とマッチングルールを定義します。

   設定ウィザードを使用して、Talend Studioで作成およびテストし、リポジトリーに保存したマッチングルールをインポートし、マッチングジョブで使用できます。詳細は、[リポジトリーからマッチングルールをインポート](https://help.qlik.com/talend/en-US/data-matching/8.0/importing-match-rules-from-studio-repository)をご覧ください。

   コンポーネントの基本設定で選択したのと同じタイプのルールをインポートまたは定義することが重要です。それ以外の場合、ジョブは2つのアルゴリズム間で互換性のないパラメーターのデフォルト値で実行されます。
8. マッチングルールを次のように定義します。
   1. [Key definition] (キー定義)テーブルで[+]ボタンをクリックし、マッチング操作を行うカラム(このシナリオでは*fname*と*lname*)をリストに追加します。

      情報メモ注: 日付カラムにアルゴリズムやマッチングアルゴリズムを適用すると、日付形式で比較する内容を決定できます。

      たとえば、日付の年のみを比較する場合は、コンポーネントスキーマで日付カラムのタイプを[Date]に設定し、[Date Pattern] (日付パターン)フィールドに*yyyy*と入力します。コンポーネントでは、スキーマで定義されたパターンに基づき、日付形式を文字列に変換してから文字列比較が開始されます。
   2. [Matching Function] (マッチングファンクション)カラムをクリックし、マッチングオペレーションに使用する方法としてJaro-Winklerをリストから選択します。

      マッチングタイプとして[custom] (カスタム)を選択する場合は、[Custom Matcher] (カスタムマッチャー)カラム内に使用する必要のあるカスタムクラス(外部マッチングアルゴリズム)をポイントするパスを設定する必要があります。このパスは、ライブラリーファイル(*.jar*ファイル)で自身で定義します。
   3. [Tokenized measure] (トークン化された測定)リストで[No] (いいえ)を選択します。
   4. [Threshold] (しきい値カラムのセルをクリックし、*fname*に0.7、*lname*に0.4を入力します。
   5. [Confidence Weight] (重み付け)カラムのセルをクリックし、キー属性として使う2つのカラムに数値の重みを設定します: *fname*には1、*lname*には4。
   6. [Handle Null] (Nullを処理)カラムのセルをクリックし、カラム内のNull属性の処理に使用するnullオペレーターを選択します。このサンプルでは、一致結果にnull値の影響が最小となるように、[Null Match NONE] (Nullのマッチングなし)を選択します。
   7. [Survivorship Function] (サバイバーシップ機能)で[Most common] (最も一般的)を選択します。
9. 上記の手順を繰り返して、2番目のマッチングルールを定義し、パラメーターを次のように設定します。
   1. [+]ボダン([Duplicate Rule] (重複したルール))をクリックします。
   2. [Input Key Attribute] (入力キー属性): *address*
   3. [Matching Function] (マッチングファンクション): Jaro
   4. [Tokenized Measure] (トークン化された測定): [No] (いいえ)
   5. [Threshold] (しきい値): 0.8
   6. [Confidence Weight] (信頼度の重み付け): 1
   7. [Handle Null] (Nullを処理): [Null Match NONE] (Nullのマッチングなし)
   8. [Survivorship Function] (サバイバーシップ機能): [Most common] (最も一般的)
10. 各[Match Rule] (マッチングルール)の[Match Threshold] (マッチングしきい値)パラメーターを0.8に設定します。
11. [Hide groups of less than] (未満でグループを非表示)パラメーターを2に設定します。このパラメーターを使うと、小さいサイズのグループを非表示にできます。
12. [Chart] (チャート)ボタンをクリックして、定義済みの設定でジョブを実行し、マッチング結果をウィザードに直接表示します。

    ![tMatchGroupコンポーネントのチャートビューとテーブルビュー。](https://help.qlik.com/talend/ja-JP/data-matching/Resources/images/03-12-2019_16-45-21.png)

    マッチングチャートは、分析されたデータの重複の全体図が表示されます。また、マッチングテーブルには各グループの項目マッチングに関する詳細が示され、マッチングチャートの色に基づいてグループが色分けされます。

    ジョブはレコードにORマッチングオペレーションを実行します。ルールに基づいてレコードを評価します。MATCHING\_DISTANCESカラムを見ると、どのルールがどのレコードに使用されたかを理解できます。

    たとえば2番目のデータグループ(赤レンガ色)では、最後の*Amic*レコードは*address1*をキー属性として使う2番目のルールに従ってマッチングされます。他方、グループ内のその他のレコードは、*lname*と*fname*をキー属性として使う最初のルールに従ってマッチングされます。

    このサンプルでわかるように、GRP\_QUALITYカラムは[Match Threshold] (マッチングしきい値)パラメーターよりも小さくできます。これは、[Match Threshold] (マッチングしきい値)以上のマッチングスコアを持つレコードペアからグループが作成されますが、すべてのレコードが互いに比較されるわけではないためです。他方、GRP\_QUALITYはグループ内のすべてのレコードペアを考慮に入れます。

## ジョブの確定と実行

### 手順

1. 各tLogRowコンポーネントをダブルクリックして、[Basic settings] (基本設定)ビューを表示します。
2. [Table (print values in cells of a table)] (テーブル(テーブルのセルの出力値))を選択します。
3. ジョブを保存し、[F6]を押して実行します。

### タスクの結果

レコードが3つの異なるグループにまとめられていることが確認できます。各レコードが、グループ内で計算された最小距離であるグループスコアの値に従って、3つのグループのどれかにリスト表示されます。

各グループの識別子(*String*データ型のもの)が、対応するレコードの横にある*GID*カラム内にリスト表示されます。この識別子は、古いリリースから移行したジョブの場合は*Long*というデータ型のものです。グループ識別子を*String*にするには、インポートしたジョブ内のtMatchGroupコンポーネントを、Talend Studioの[Palette] (パレット)からのtMatchGroupに置き換えます。

3つの出力ブロックのそれぞれのレコード数が*GRP\_SIZE*カラム内にリスト表示され、マスターレコードでのみ計算されます。*MASTER*カラムは、対応するレコードがマスターレコードかそうでないかをTrueまたはFalseで示します。*SCORE*カラムには、Jaro-WinklerとJaroマッチングアルゴリズムに従い、入力レコードとマスターレコードの間の計算距離がリスト表示されます。

ジョブは最初のルールを基にレコードを評価し、そこでマッチングしたレコードは2番目のルールでは評価しません。

グループスコアがマッチング間隔(適用するルールに応じて*0.95*または*0.85*)の間にあるすべてのレコード、およびtMatchGroupの詳細設定で定義されている信頼しきい値が、[Suspects] (サスペクト)出力フロー内にリスト表示されます。

![「サスペクト」の結果。](https://help.qlik.com/talend/ja-JP/data-matching/Resources/images/tmatchgroup-suspects.png)

グループスコアがマッチング可能性のどれか以上であるレコードのすべてが、[Matches] (マッチング)出力フロー内にリスト表示されます。

![「マッチング」の結果。](https://help.qlik.com/talend/ja-JP/data-matching/Resources/images/tmatchgroup-matches.png)

グループサイズが1に等しいレコードのすべてが、[Uniques] (一意)出力フロー内にリスト表示されます。

![「一意」の結果。](https://help.qlik.com/talend/ja-JP/data-matching/Resources/images/tmatchgroup-uniques.png)

出力レコードを単一の出力フローにグルーピングする別のシナリオは、Identificationのセクションで[同じ機能キーを持つ出力フロー重複レコード内でカラムを比較し、グルーピングする](https://help.qlik.com/talend/ja-JP/components/8.0/identification/tgenkey-tmatchgroup-trowgenerator-tlogrow-comparing-columns-and-grouping-in-output-flow-duplicate-records-that-have-same-functional-key-standard-component-enterprise-this)をご覧ください。