Skip to main content

リコンシリエーション(データ照合)

Overview

リコンシリエーションとは、手元のデータと外部のデータセットを照合する作業です。レコードリンク やデータマッチングとも呼ばれ、エンティティ解決、フィールド(プロパティ)マッチ、重複レコードの検出 などと併せて行われることもあります。比較対象となるデータは図書館・アーカイブ・博物館・学術機関・研究機関・非営利団体・関心団体などが作成したもののほか、Wikidata や他の Wikibase インスタンス 上のユーザー編集データ、あるいは ローカルで用意したデータセット に対しても行うことができます。

OpenRefine で外部データと照合するには、そのデータが Reconciliation Service API に準拠した Web サービスを提供している必要があります。

照合を行う目的としては:

  • 変名や誤字などの正規化
  • Library of Congress Subject Headings などの権威ファイルと照合して主題見出しを補正
  • 自分のデータと既存のデータセットをリンク
  • Wikidata のような編集可能なプラットフォームに書き込み
  • パナマ文書 のような特定のリストに含まれているか確認

OpenRefine のリコンシリエーションは半自動です。OpenRefine はできるだけ候補を自動抽出しますが、人の目で見直して承認する必要があります。リコンシリエーションは文字列検索に基づくため、スペルミス・空白・不要な文字があると結果に影響します。リコンシリエーション前に データのクリーンアップやクラスタリング を行うと精度が上がります。

繰り返しの作業

リコンシリエーションは一度で完了しない場合が多いため、異なる設定やデータのサブセットで繰り返し実行することをおすすめします。

Sources

このリコンシリエーション可能な公開サービス一覧 から始めてください。新しいサービスがあれば Wikidata 編集を通じて追加できます。

OpenRefine では さらに多くのソースを Wiki にまとめたページ をメンテナンスしており、誰でも編集可能です。この中には ローカルデータ との照合方法も含まれています。

この2つのページにまだ掲載されていないサービスも存在するかもしれません。たとえば Organized Crime and Corruption Reporting Project (OCCRP) には 310 種類のデータセットがあり、それぞれ固有のリコンシリエーション URL を持っています(照合リスト に URL が載っています)。また Virtual International Authority File (VIAF) 全体、あるいは特定機関の寄与のみと照合することもできます。お目当ての権威ファイルがサービスを提供しているか、CSV をダウンロードしてローカルリコンシリエーションを構築できないかを調査してみてください。

OpenRefine にはインストール時点で Wikidata リコンシリエーションが同梱されています。詳細は Wikibase ページを参照してください。拡張機能を使えば、さらなるリコンシリエーションサービスや機能拡張を追加できます。ダウンロードページ の拡張機能一覧を確認してください。

各サービスには提供方法が異なるため、照合 API リスト の表で対応している機能を確認してください。挙動や OpenRefine 機能との互換性について疑問があれば、該当サービスのドキュメントを参照してください。

独自のサービスを構築したい場合も API 仕様 からスクラッチで作るか、リコンシリエーションサーベイ で紹介されているフレームワークを使うことができます。

注目すべきプロジェクトに reconcile-csv があり、単純な CSV から独自のリコンシリエーションサービスを構築できます。たとえば別の OpenRefine プロジェクトと照合したい場合、対象プロジェクトを CSV でエクスポートし、reconcile-csv でその CSV を読み込ませるだけで準備が整います。Python で書かれた後継プロジェクトも存在します。

取得済みの URL から追加データを取り込む

照合先サービスがデータを拡張できない場合は、一般的な Web API や固有 ID を持つ構造化 URL(例: https://viaf.org/viaf/000000)を探してください。取得した ID を使って Edit columnAdd column by fetching URLs を実行し、expressions で URL を構築すると API を呼び出せます。

ページ全体の HTML を取得したくない場合は、JSON 形式などのメタデータエンドポイントを探して利用するとよいでしょう。照合プロセス中に取得した ID を活用したり、マッチしたセルの cell.recon.match.id から ID を取り出して URL を生成したりできます。

たとえば Getty ULAN にアーティストを照合し、固有の ULAN ID を列として持っているなら、Add column by fetching URLs で GREL 式 "http://vocab.getty.edu/" + value + ".json" を使って JSON を取得できます(ID が ulan/000000 形式)。

またはマッチした候補を直接参照するには、"http://vocab.getty.edu/" + cell.recon.match.id + ".json" のように書くことで逐一 ID を埋め込めます。

適切なスロットルを設定し、サービスの利用規約に従ってください。この操作の説明 を参考にフェッチ処理の詳細を確認できます。

提案候補をすべて保持する

最良候補だけでなく、すべての提案候補の一覧を得たい場合は GREL 式 を使います。Edit columnAdd column based on this column で次のように書くと候補名を列挙できます。

forEach(cell.recon.candidates,c,c.name).join(", ")

候補の ID を取得したい場合は:

forEach(cell.recon.candidates,c,c.id).join(", ")

これで文字列として保存され、リコンシリエーション情報自体は含まれません。

リコンシリエーション式を書く

OpenRefine にはリコンシリエーション用の変数が用意されており、GREL/Jython の式内で利用できます。主な変数には:

  • cell.recon.match.id / cell.recon.match.name(マッチした候補)
  • cell.recon.best.name / cell.recon.best.id(ベスト候補)
  • cell.recon.candidates(セルごとの候補リスト)
  • cell.recon.judgment(「judgment」ファセットの値)
  • cell.recon.judgmentHistory(判断タイムスタンプ)
  • cell.recon.matched(true/false)

詳しくは reconciliation variables セクションを参照してください。

リコンシリエーション列をコピーする

Edit columnAdd column based on this column で GREL 式に cell だけを書くと、入力のセルを丸ごと別列にコピーできます(リコンシリエーション情報を含む)。

リコンシリエーション結果のエクスポート

既に Web 上のエンティティと照合済みのデータは Wikidata や他の Wikibase へのアップロードその他の形式 でエクスポートできます。

途中経過の照合データを共有するには、プロジェクトをエクスポート/インポート する方法があります。読み込む側の OpenRefine には対象のリコンシリエーションサービス(Start reconcilingAdd Standard Service...)が事前に追加されている必要があります。追加されていないと候補や ID のリンクが壊れるため、再度サービスを追加してリコンシリエーションし直す必要があります。Wikidata の場合は OpenRefine に標準添付されているため、より簡単に共有できます。