Excelの図形データから「繋がり」を自動抽出する手法 〜PFD(プロセスフロー図)を実例に〜
はじめに
どうも、CyberToroのCTOの丸山です。
皆さんは業務で「Excelで作られた図面」を扱うことはありませんか?
Excelは手軽に図が描けて共有も簡単なため、プラントの系統図やシステム構成図、ネットワーク図など、様々な図面の作成に広く使われています。
しかし、いざこれらの図面データをシステムで活用しよう(例えば、ナレッジグラフ化したり、AIに読み込ませてGraphRAGで検索させたりしよう)とすると、大きな壁にぶつかります。それは、「人間には線で繋がっているように見えるけれど、データ上はただの『独立した線と図形の集まり』に過ぎない」という問題です。専用CADのように「この機器とこの機器が配線(配管)で繋がっている」というコネクタ情報がないのです。
この記事では、大テーマとして「Excelの図形(DrawingML)から、図形間の繋がり(ネットワーク構造)を自動抽出する手法」を解説します。
そして、その実例(ケーススタディ)として、「PFD(プロセスフロー図)」における配管・計装接続グラフの抽出を取り上げます。
「明示的なコネクタがない状態から、どうやってグラフ構造を作るのか?」「実データに適用したときの限界はどこにあるのか?」など、実装と評価に基づくリアルな知見を余すところなく共有します。
1. そもそも何を解決したいのか?(背景と課題)
現場の課題と期待
プロセス産業(化学、石油精製、食品など)では、プラントの構成を示す「PFD(プロセスフロー図)」や「P&ID(配管計装図)」が極めて重要な技術資産です。
これらがデジタルな「繋がり(グラフ)」として扱えれば、以下のようなことが可能になります。
- 検索の高度化: 「あるタンクの下流にある自動弁は何か?」といった問いに、図面を目視せずに回答できる。
- AIとの連携: 大規模言語モデル(LLM)と連携する GraphRAG の基盤となり、図面を根拠とした質問応答が可能になる。
- 影響範囲の特定: 変更管理や HAZOP(危険源分析)において、特定タグからの影響範囲を自動列挙できる。
Excel図面(DrawingML)特有の技術的ハードル
しかし、現場の資産の多くは Excel の .xlsx に格納された DrawingML 図形です。これには以下のような問題があります。
-
コネクタがない: 線は細い矩形や
lineとして描かれ、機器(テキストボックスやグループ図形)との明示的な結合情報がありません。 - 作図の揺れ: 自動弁の記号がグループ化されず「短い線分の断片」としてバラバラに存在したり、破線と実線が混在したりします。
-
シートの複製: 印刷や部門別のために、複数のシート(
drawing1〜drawing4など)に全く同じレイアウトがコピーされており、そのまま解析するとデータが重複・交差してしまいます。
これらの「不完全な入力」から、幾何学的な位置関係やテキスト情報だけを頼りに、いかに妥当なグラフ構造を復元するかが本手法の腕の見せ所です。
2. 抽出パイプラインの全体像(提案手法)
深層学習による画素ベースの画像認識は使わず、Excelファイル内のXMLデータ(DrawingMLのベクトル幾何とテキスト)を直接解析します。処理は大きく以下の6ステップ(A〜F)で構成されます。
ステップA〜B:データの読み込みと前処理
-
DrawingML解析:
.xlsxをZIP展開しdrawing*.xmlを走査。図形のバウンディングボックスや線分フラグ、テキストを取得します。短すぎる線(実装上 $L_{min}$ = 45000 EMU≒約1.2mm)はノイズとして除外します。 -
役割分類: テキストの正規表現に基づき、ノードを
equipment(主要機器)、instrument(計装)、port(弁やラベル)、junction、otherに分類します。 - 記号合成: バラバラに描かれた自動弁(×印など)の線分を検出し、一つの「合成ノード」にまとめます。
ステップC:完全トポロジ構築(骨格づくり)
ここが幾何推定の要です。
- 端点クラスタリング: 線分の端点同士が近接している場合(距離 $\tau_c$ = 110000 EMU≒約2.5mm以内)、それらを「同じ接合点(クラスタ)」とみなします。このとき、クラスタIDに「図面の名前空間」を付与することで、複数シートにまたがる偽のリンク(シート横断偽リンク)を完全に防ぎます。
- 記号へのアタッチ: クラスタ重心から一定距離($\tau_a$ = 350000 EMU≒約9.7mm)にある機器やポートへ線を結びつけます。無関係な記号まで巻き込まないよう、最近傍距離 $d^\ast$ を基準に $d^\ast + \alpha \cdot \tau_a$ ($\alpha=0.30$)の範囲内の最大 $K=3$ 個までに制限します(カットオフ制約)。
- 貫通切断: 線分が機器のボックスを横切る場合は、その機器を経路の中間ノードとして挿入します。
ステップD:プロセス凝縮と計装紐付け(意味のある繋がりにする)
線分やクラスタのIDだらけのグラフでは実用的ではないため、幅優先探索(BFS)を使って「機器やポートから出発し、線や接合点を経由して、次の機器やポートに辿り着いたルート」を1つのダイレクトな辺に凝縮します。
- 経由線分数上限 ($U$): 何本もの線を経由した遠回りのルートを捨てるため、経由する線分の上限を $U=4$ とします。
-
空間ゲート (SpatialGate): さらに、共有ヘッダなどを経由した「幽霊パス(意図しない遠回り結合)」を防ぐため、両端ノードの中心間距離 $span(u,v)$ が以下の条件を満たさない辺を棄却します。
$$ SpatialGate(u,v) \Leftrightarrow span(u,v) \le 750000 + n_via(u,v) \cdot 750000 \quad (\text{単位:EMU}) $$ - 計装信号(破線)は、プロセス配管とは分けて処理し、後で紐付けます。
ステップE:信頼度の計算と後処理
抽出した辺には、以下の式で 信頼度スコア $conf(u,v)$ を付与します。経由線分 $n_via$ が多いほど、また最初の接合距離 $d_1$ が遠いほどスコアが下がります。
$$ conf(u,v) = 0.92 - 0.06 \cdot n_via(u,v) - \min\left(0.25, \frac{d_1(u,v)}{\tau_a+1} \cdot 0.25\right) $$
また、図面内のただの説明文同士が結ばれてしまうのを防ぐため、テキストラベル間の辺は「縦横が整列している場合のみ許可する」などの剪定を行います。
3. 実例:PFDからの抽出実験
このパイプラインを、ある架空のプロセス系統を描いたExcel図面(約554KB)に適用し、定量・定性評価を行いました。
定量評価の設定
評価には対象シート内の「系統上重要な39辺」を人手で構築した正解セット($E_{gt}$)を使用しました。
評価バイアスの注意: 正解セットは「重要な辺」のみを登録した部分集合です。アルゴリズムが抽出した「工学的には妥当な近傍の配管」であっても、正解セットになければ「誤検知(False Positive: FP)」としてカウントされます。そのため、Precision(適合率)は保守的にかなり低く出る仕様となっています。
実験結果(手法比較)
提案手法と、単純な距離ベースの手法(最近傍法)、アブレーション(空間ゲートの有無、経由上限の変更)を比較した結果が以下の表です。
表:手法比較とアブレーション結果
| 手法・設定 | Precision | Recall | F1 | TP (正解一致) | FP (誤検知) | FN (未抽出) |
|---|---|---|---|---|---|---|
| 提案手法 (空間ゲートあり, U=4) | 0.156 | 0.436 | 0.230 | 17 | 92 | 22 |
| 単純最近傍法 | 0.039 | 0.205 | 0.066 | 8 | 195 | 31 |
| アタッチのみ (BFS凝縮なし) | 0.120 | 0.154 | 0.135 | 6 | 44 | 33 |
| 空間ゲートなし | 0.134 | 0.487 | 0.210 | 19 | 123 | 20 |
| via≦0 (直接接合のみ) | 0.133 | 0.154 | 0.143 | 6 | 39 | 33 |
| via≦8 (経由上限を緩和) | 0.107 | 0.436 | 0.172 | 17 | 142 | 22 |
読み取れること:
- F1スコアは提案手法(0.230)が最良でした。単純最近傍法はFPが195と爆発し、距離だけでは系統を表せないことが分かります。
- アタッチのみ(BFSなし)ではRecallが低く、エルボ(曲がり角)を経由する配管を拾えません。
- 「空間ゲートなし」にするとRecallは最大(0.487, TP=19)になりますが、FPが123に増え、総合的なF1は低下します。
- 経由上限を緩和(via≦8)してもTPは増えずFPだけが増えるため、$U=4$ が妥当な妥協点でした。
成功事例(定性評価)
斜め配置された機器間の復元
初期の実装では「テキスト同士の辺は縦横整列時のみ残す」という強すぎるフィルタにより、斜めに配置された機器間の繋がりが消えていました。タグ文字列を「保護ラベル」として例外扱いすることで、見事に復元されました(以下の図参照)。抑制ルールには必ず例外条件を設けるべきだという良い教訓です。
大型記号のネット復帰
大型の機器記号は、近傍に小さな別記号が多いため、クラスタアタッチのカットオフ条件に弾かれて未接続になりがちでした。そこで「未アタッチの大型記号は線端へ直接スナップ(フォールバック)する」処理を入れた結果、無事にプロセスネットワークに復帰しました。
失敗事例と「原理的限界」
線省略(図面上では並んでいるが線がない)
複数の機器が図面上で見事に「横一列」に並んでいるケースがあります。人間が見れば「当然一本の配管で繋がっている」と解釈します。しかし、DrawingMLの座標を実測すると、「そもそも機器と機器を結ぶ線がデータとして描かれていない」ことが判明しました。
いくらアルゴリズムを調整しても、入力に線がなければ抽出できません。これは「アルゴリズムの欠陥」ではなく「入力品質の限界(原理的限界)」です。
番号のみのラベル問題
単なる番号のみのラベルは、形状だけでは機器なのかただの注釈なのか判定が難しく、ノード化の条件から漏れてしまうケースがありました。
4. なぜこの結果になるのか?(考察と実務の教訓)
空間ゲートと経由上限のジレンマ
Excelの配管図はエルボ(曲がり)を多用するため、複数の線分を経由する探索(via)は必須です。しかし、経由を許せば許すほど「関係ないヘッダ配管を通って遠くの機器と繋がってしまう(幽霊パス)」という問題が起きます。空間ゲートとvia上限の組み合わせは、このトレードオフを制御するための苦肉の(しかし実務的な)策です。
抽出エラーに対するアプローチの順序
「線が描かれていない(線省略)」などの問題に対し、アルゴリズム側で「Y座標が同じなら無理やり繋げる(同軸整列推定)」ようなルールを足すことも可能ですが、誤接続のリスクが高まります。
実務で推奨されるアプローチは、効果が高くコストが低い「人手によるオーバーライド(確定辺の強制追加・削除リストの適用)」を前提とすることです。
GraphRAGへの組み込みと人間との協働
F1スコア=0.230 という現状の精度では、抽出したグラフを完全自動でLLM(GraphRAG)の知識ベースに放り込むのは危険です(嘘の繋がりを根拠に回答してしまうため)。
現実的な運用フローは以下のようになります。
- PFDから自動でプロセスグラフの下書きを生成。
- 信頼度スコア($conf$)が低い辺や、重要な経路を人間がビューアでレビューし、オーバーライド設定で確定。
- 「確認済みの辺」だけを公開知識ベース(GraphRAG)に登録する。
自動化の価値は「100%完璧なグラフを作ること」ではなく、「人間がゼロから線を目で追う作業をなくし、候補の正誤判定(レビュー)に集中させることで探索空間を縮小すること」にあります。
実システム構築に向けた7つの教訓
- まず入力ファイル(XML)の健全性を確認する。
- 辺が欠損しているときは、まず「元データに本当に線が描かれているか」を実測する。
- 強力な抑制フィルタには、必ず特定の識別子(タグ)を除外する例外ルールを設ける。
- 複数シート構成のベクトル図面では、クラスタIDに必ず「名前空間」を付与してシート間衝突を防ぐ(これで偽リンク率が74%→0%に改善)。
- ビューア上の見た目の「隙間」と、データ上の「トポロジ欠落」を混同しない。
- 完全自動化に固執せず、オーバーライドを前提とした運用設計を並行して行う。
- Precision(適合率)の絶対値だけで手法の良し悪しを判断せず、正解セットの性質(部分集合かどうか)を考慮する。
5. まとめと今後の展望
この記事では、明示的なコネクタを持たない Excel 上の PFD(DrawingML)から、配管と計装の接続グラフを自動抽出する手法を解説しました。
端点クラスタリング、BFSによるプロセス凝縮、空間ゲートなどの技術を組み合わせることで、単純な距離計算では破綻する図面から意味のある繋がりを見出すことができます。
この手法の応用範囲
この「骨格抽出 → スナップ → 凝縮 → 可視化 → オーバーライド」という枠組みは、PFDに限らず、電気の単線結線図、ユーティリティ系統図、工場レイアウト図など、「見た目は繋がっているがデータ上は図形の並びである」あらゆる資産に応用可能です(記号辞書を差し替えるだけで対応可能)。
今後の課題
- 全辺を網羅した第三者による正解セットの構築(復元可能辺と不能辺を分けた評価)。
- パラメータ(閾値)の図面サイズに対する相対化。
- 複数図面での交差検証や、LLMを活用したハイブリッドな後処理。
「綺麗なデータがないからDXできない」と諦めるのではなく、不完全なデータからでも検証可能なグラフを生成し、人間の確認を経て価値あるナレッジに変えていく。本手法が、現場に眠るExcel資産を活用する道標となれば幸いです。
参考文献
- Digitize-PID: Automatic Digitization of Piping and Instrumentation Diagrams, arXiv:2109.03794, 2021.
- S. Mani et al., Automatic Digitization of Engineering Diagrams using Deep Learning and Graph Modeling, CVPRW, 2020.
- M. Stürmer et al., PID2Graph, arXiv:2411.13929, 2024.
- ISO 15926, Integration of life-cycle data for process plants.
- Edge et al., From Local to Global: A Graph RAG Approach to Query-Focused Summarization, 2024.
- ECMA-376 / ISO/IEC 29500, Office Open XML (DrawingML).
- ISA-5.1, Instrumentation Symbols and Identification.
付録:実装時のヒント
実装モジュールは、以下の3つに分割して設計するとデバッグが容易です。
- 図面解析モジュール(XMLパース、図形の正規化)
- トポロジ構築モジュール(クラスタリング、アタッチ、貫通切断)
- 抽象化モジュール(BFS凝縮、役割分類、信頼度計算、後処理)
主要パラメータ設定例(実装時に調整が必要)
| パラメータ | 設定値の例 (EMU) | 役割 |
|---|---|---|
| ATTACH_TOLERANCE | 350000 (約9.7mm) | 記号へのアタッチ許容距離 ($\tau_a$) |
| ENDPOINT_CLUSTER | 110000 (約2.5mm) | 端点クラスタリングの半径 ($\tau_c$) |
| Lmin | 45000 (約1.2mm) | ノイズとなる短線の除去閾値 |
| α | 0.30 | アタッチのカットオフ係数 |
| K | 3 | 1クラスタあたりの最大アタッチ数 |
| U | 4 | BFSでの最大経由線分数 |
| 空間ゲート基本長 | 750000 (約0.82inch) | 空間ゲートの基本長 ($\beta_0$) |
| 空間ゲート増分 | 750000 | viaあたりのゲート増分 ($\beta_1$) |



